RPOS

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.
Category:LanguagesCategory:ImplementedCategory:Stack-basedCategory:2011