We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.

RPOS

From Esolang
Jump to navigation Jump to search

RPOS is an (arguably) esoteric programming language made by User:iconmaster. It stands for Reverse Polish Operating System (or alternately, Reverse POlish Shell). It is a combination of RPL and DOS, as it has both a filesystem and a stack.

Description

RPOS takes a space-separated string of words. Each word can be either a number, a string (with ' or " prefixes), or a command. Numbers and strings are pushed onto the stack, commands are executed. Alternately, words can have a one-character symbol prefix; these prefixes change how the characters after are used. There are 3 basic data types: Numbers, strings, and directories. Numbers and strings may be pushed onto the stack; directories may not. Directories contain an associative array of data; the key is the variable's name, the value is that variable's value. The root directory and the starting current directory is called root. The system starts up with a directory inside root called sys. This contains system variables.

Commands

Taken directly from the core.rhlp help file.


NAME: add LIB: core USAGE: num1 num2 add DESC: Adds num1 and num2, and pushes the result onto the stack. NOTES: num1 and num2 have to be numbers.

NAME: sub LIB: core USAGE: num1 num2 sub DESC: Subtracts num1 and num2, and pushes the result onto the stack. NOTES: num1 and num2 have to be numbers.

NAME: mul LIB: core USAGE: num1 num2 mul DESC: Multiplies num1 and num2, and pushes the result onto the stack. NOTES: num1 and num2 have to be numbers.

NAME: div LIB: core USAGE: num1 num2 div DESC: Divides num1 and num2, and pushes the result onto the stack. NOTES: Num1 and num2 have to be numbers. Num2 cannot be zero.

NAME: disp LIB: core USAGE: item disp DESC: Takes the top item off of the stack and displays it.

NAME: peek LIB: core USAGE: item peek DESC: Like disp, but it does not pop the top element.

NAME: dup LIB: core USAGE: item dup DESC: Takes the top item off of the stack and pushes 2 copies of it.

NAME: drop LIB: core USAGE: item drop DESC: Takes the top item off the stack.

NAME: swap LIB: core USAGE: it1 it2 swap DESC: Swaps the top 2 items on the stack, so that 1 2 -} 2 1 .

NAME: rot LIB: core USAGE: i1 i2 i3 rot DESC: Takes the 3 top items on the stack and pushes them on in reverse order, so that 1 2 3 -} 3 2 1 .

NAME: clear LIB: core USAGE: clear DESC: Empties the entire stack.

NAME: cls LIB: core USAGE: cls DESC: Clears the screen.

NAME: dump LIB: core USAGE: dump DESC: Displays the contents of the stack.

NAME: mkdir LIB: core USAGE: name mkdir DESC: Creates a new directory called name. NOTES: Name must be a string. SAMEAS: prefix :

NAME: chdir LIB: core USAGE: name chdir DESC: Changes the current directory called name. NOTES: Name must be a string and either be a valid directory name or '..' . SAMEAS: prefix rb

NAME: isdir LIB: core USAGE: name isdir DESC: Pushes 1 if name is a directory, 0 otherwise. NOTES: Name must be a string.

NAME: del LIB: core USAGE: name del DESC: Deltes the item at name. SAMEAS: prefix ~

NAME: sto LIB: core USAGE: val name sto DESC: Stores val in the variable called name. NOTES: Name must be a string. SAMEAS: prefix =

NAME: rcl LIB: core USAGE: name rcl DESC: Recalls the varible in name to the stack. NOTES: Name must be a string and cannot be a directory name. SAMEAS: prefix $

NAME: list LIB: core USAGE: list DESC: Displays all the items in the current directory. SAMEAS: prefix @

NAME: dir LIB: core USAGE: dir DESC: Displays the current path.

NAME: exec LIB: core USAGE: code exec DESC: Executes code as RPOS batch. NOTES: Code must be a string.

NAME: eq LIB: core USAGE: i1 i2 eq DESC: Pushes 1 if i1 and i2 are equal, 0 otherwise.

NAME: ne LIB: core USAGE: i1 i2 ne DESC: Pushes 1 if i1 and i2 are not equal, 0 otherwise.

NAME: lt LIB: core USAGE: i1 i2 lt DESC: Pushes 1 if i1 is less than i2, 0 otherwise.

NAME: le LIB: core USAGE: i1 i2 le DESC: Pushes 1 if i1 is less than or equal to i2, 0 otherwise.

NAME: gt LIB: core USAGE: i1 i2 gt DESC: Pushes 1 if i1 is greater than i2, 0 otherwise.

NAME: ge LIB: core USAGE: i1 i2 ge DESC: Pushes 1 if i1 is grater than or equal to i2, 0 otherwise.

NAME: not LIB: core USAGE: bool not DESC: Pushes 0 if bool is 1, 0 otherwise.

NAME: and LIB: core USAGE: b1 b2 and DESC: Pushes 1 if b1 and b2 are 1, 0 otherwise.

NAME: or LIB: core USAGE: b1 b2 or DESC: Pushes 1 if b1 or b2 is 1, 0 otherwise.

NAME: doif LIB: core USAGE: bool code doif DESC: Executes code if bool is 1. NOTES: Code must be a string. SAMEAS: prefix ?

NAME: while LIB: core USAGE: cond code while DESC: Keeps executing code while the code in cond evaluates to 1. NOTES: Cond and code bust be strings.

NAME: rep LIB: core USAGE: num code rep DESC: Executes code num times and pushes the current iteration on the stack. NOTES: Num must be a number, and code must be a string.

NAME: repdir LIB: core USAGE: name code repdir DESC: For every item in the directory called name, pushes the item's name and executes code. NOTES: Name and code must be strings. Name must be a valid directory name, '.', or '..' .

NAME: size LIB: core USAGE: name size DESC: Pushes the number of items in the directory called name. NOTES: name must be a valid directory name, '.', or '..' . SAMEAS: prefix #

NAME: join LIB: core USAGE: s1 s2 join DESC: Joins s1 and s2 together, and pushes it on the stack.

NAME: move LIB: core USAGE: old new move DESC: Moves the directory called old into the directory called new. NOTES: old must be strings and must be a valid directory name. New may also be '..' .

NAME: copy LIB: core USAGE: old new copy DESC: Copies the directory called old into the directory called new. NOTES: old must be strings and must be a valid directory name. New may also be '..' .

NAME: lib LIB: core USAGE: name lib DESC: Imports the library called name. NOTES: Name must be a string and a valid library name. Libraries are in the enclosing filesystem and have the .rlib prefix. Libraries are written in Lua. SAMEAS: prefix *

NAME: libcmd LIB: core USAGE: list name libcmd DESC: Imports the commands in list from library called name. NOTES: Name must be a string and a valid library name. Libraries are in the enclosing filesystem and have the .rlib prefix. Libraries are written in Lua. List must be a space-seperated string.

NAME: func LIB: core USAGE: code name func DESC: Creates a user-defined command called name. When name is refrenced as a command later, code will be executed. NOTES: Code and name must be strings.

NAME: isvar LIB: core USAGE: name isvar DESC: Pushes 1 if name is a valid item, 0 otherwise. NOTES: Name must be a string.

NAME: isfunc LIB: core USAGE: name isfunc DESC: Pushes 1 if name is a valid command, 0 otherwise. NOTES: Name must be a string.

NAME: delfunc LIB: core USAGE: name delfunc DESC: Deletes the command called name. WARNING!!! This may cause grat damage to the system. Use this command wisely. NOTES: Name must be a string.

NAME: type LIB: core USAGE: item type DESC: Pushes 'number' if item is a number, 0 otherwise.

NAME: substr LIB: core USAGE: str start end substr DESC: Gets the substring of str, starting at start and ending and end. NOTES: start and end must be numbers. Str must be a string.

NAME: inp LIB: core USAGE: inp DESC: Gets a line of input and pushes it to the stack.

NAME: write LIB: core USAGE: write DESC: Gets input until CTRL+D is pressed on a newline, and then pushes it. SAMEAS: prefix }

NAME: root LIB: core USAGE: root DESC: Sets the current directory to root.

NAME: import LIB: core USAGE: name import DESC: Pushes the contents of outside file called name. NOTES: Files are in the outside filesystem and have the .rfil extenstion.

NAME: export LIB: core USAGE: val name export DESC: Set the contents of outside file called name to val. NOTES: Files are in the outside filesystem and have the .rfil extenstion.

NAME: save LIB: core USAGE: save DESC: Saves the system state to an outside file. NOTES: System Saves are in the outside filesystem and have the .rsav extenstion.

NAME: load LIB: core USAGE: load DESC: Loads the system state from an outside file. NOTES: System Saves are in the outside filesystem and have the .rsav extenstion.

NAME: call LIB: core USAGE: name call DESC: Executes the outside file called name in RPOS batch. NOTES: name must be a string. Files are in the outside filesystem and have the .rfil extenstion. SAMEAS: prefix %

NAME: run LIB: core USAGE: name run DESC: Executes the outside file called name as Lua code. NOTES: name must be a string. Files are in the outside filesystem and have the .rfil extenstion.

NAME: ren LIB: core USAGE: name newname ren DESC: Renames the item called name to newname. NOTES: Name and newname must be strings. Name must be a valid item name.

NAME: prompt LIB: core USAGE: opt prompt DESC: Configures the prompt based on opt. If opt is, it shows: 'S' - the size of the stack. 'T' - the top item on the stack. 'D' - The current path. 'C' - The current directorie's name.

NAME: help LIB: core USAGE: help DESC: Enters RPOS Interactive Help.

NAME: info LIB: core USAGE: info DESC: Displays the RPOS version information.

NAME: alias LIB: core USAGE: old new alias DESC: Aliases the command called old as new. NOTES: Old and new must be strings.

NAME: pshdir LIB: core USAGE: pshdir DESC: Pushes the current path on to the stack.

NAME: popdir LIB: core USAGE: dr popdir DESC: Sets the current path to dr. NOTES: dr has to be a string.

NAME: len LIB: core USAGE: str len DESC: Returns the lenght of str. NOTES: str has to be a string.

NAME: tos LIB: core USAGE: itm tos DESC: Converts itm to a string.

NAME: ton LIB: core USAGE: itm ton DESC: Converts itm to a number.

Prefixes

Again, taken from core.rhlp.

PREFIX: ' DESC: Builds a string. The characters after ' are pushed as a string.

PREFIX: " DESC: Builds a string. The characters after " are pushed as a string after replacing the occourenses of the sysvar srcchr with the sysvar repchr.

PREFIX: $ DESC: Recalls the referenced variable. NOTES: the referenced name must be a valid variable name.

PREFIX: = DESC: Pops a value off the stack ands sets the referenced variable to it.

PREFIX: : DESC: Creates the referenced name as a directory.

PREFIX: Right Brakcet DESC: Changes the current directory to the referenced directory. NOTES: The characters after must be a valid directory.

PREFIX: ~ DESC: Deletes the referenced item.

PREFIX: ? DESC: Does the referenced command if the top value on the stack is 1.

PREFIX: @ DESC: Displays the items in the referenced directory. NOTES: the referenced name must be a valid directory.

PREFIX: # DESC: Displays the number of items in the referenced directory. NOTES: the referenced name must be a valid directory.

PREFIX: & DESC: Displays the contents of the refrenced item.

PREFIX: % DESC: Calls the outside file refernced as RPOS batch code. NOTES: Files are in the enclosing filesystem and have the .rfil prefix.

PREFIX: * DESC: Imports the library refernced. NOTES: Libraries are in the enclosing filesystem and have the .rlib prefix. Libraries are written in Lua.

PREFIX: } DESC: Puts what you input until CTRL+D into the refernced variable.

PREFIX: + DESC: Adds to the refernced variable the sysvar inc. NOTES: the referenced name must be a number variable.

PREFIX: - DESC: Subtracts to the refernced variable the sysvar inc. NOTES: the referenced name must be a number variable.

System Varialbes

Also directly from core.rhlp.

NAME: errs TYPE: number DFALUT: 1 DESC: Set errs to 1 to display error messages, 0 otherwise.

NAME: disp TYPE: number DFALUT: 0 DESC: Set disp to 1 to display pushed items, 0 otherwise.

NAME: srcchr TYPE: string DFALUT: _ DESC: Used in the prefix " as the character to replace.

NAME: repchr TYPE: string DFALUT: DESC: Used in the prefix " as the character to replace with.

NAME: version TYPE: number DFALUT: -varies- DESC: The current version number.

NAME: bdate TYPE: string DFALUT: -varies- DESC: The current build date.

NAME: joinchr TYPE: string DFALUT: DESC: What to put in between the two arguments of the join command.

NAME: inc TYPE: number DFALUT: 1 DESC: What to increment and decrement variables by in the + and - prefixes.

NAME: pcf1 TYPE: string DFALUT: DESC: What to display before pcf2 in the prompt.

NAME: pcf2 TYPE: string DFALUT: S DESC: what the prompt displays. Don't set this sysvar directly, use the prompt command.

NAME: pcf3 TYPE: string DFALUT: rb DESC: What to display after pcf2 in the prompt.

NAME: errmsg TYPE: string DFALUT: DESC: The message of the last error that occoured.

NAME: pshloop TYPE: number DFALUT: 1 DESC: Set to 1 to push the counter in the commands rep and repdir, 0 otherwise.

NAME: term TYPE: number DFALUT: 0 DESC: Set to 1 to terminate on errors, 0 otherwise.

NAME: libs TYPE: directory DFALUT: -dir- DESC: Contains the names of the commands from all the imported libraries.

NAME: platform TYPE: string DFALUT: -varies- DESC: The platform of the RPOS shell currently running.

Implementation

A Lua implementation of RPOS is available here.