($help) .dup .where (.pop .pop) (100 .dict .def) .ifelse .cvx .exec

(/def)
(3 .copy .exch .pop .def .pop $help 3 1 .roll .put) .cvx .def

(/xdef)
(3 .copy .exch .pop .cvx .def .pop $help 3 1 .roll .put) .cvx .def


(/def)
("/def" accepts three entries on the stack: a key, string, and value.
	the string is stored under the key in the $help dictionary, and
	the value is stored as a noun under the key in the current dictionary.)
(/def) .load /def

(/xdef)
("/xdef" accepts three entries on the stack: a key, string, and value.
	the string is stored under the key in the $help dictionary, and
	the value is stored as a verb under the key in the current dictionary.)
(/xdef) .load /xdef

(?)
("?"	prints the explanation of the given key from the $help dictionary)
($help .exch .get =)/xdef

(??)
("??" 	prints the names of all the utility commands found in the $help 
dictionary.)
($help /kdir)/xdef

(=)
("="	prints the top of the stack on the default display)
((             ) .cvis .print (
).print)/xdef


(/pause)
(/pause is used to pause the execution of a program until the user types something.)
((
** type CR to continue)= .mystream .readitem .pop .pop)/xdef

(/stk)
("/stk"	prints (without destroying) the contents of the operand stack.)
(.cntstk .dup 1 .add .copy  (.dup .type .print
       (	).print = ) .cvx .rept .pop)/xdef

(/pstk)
("/pstk"	pretty prints (without destroying) the contents of the operand stack.)
(.cntstk .dup 1 .add .copy  (==) .cvx .rept .pop)/xdef

(/clr)
("/clr"	clears the operand stack  (same as .clrstk))
(.clrstk) /xdef


(/dir)
("/dir"	prints the contents of the dictionary on top of the operand stack.)
((.exch (                    ) .cvis .print (		).print .dup .type .print (	).print =) .cvx .dictforall)/xdef

(/kdir)
("/kdir" prints the keys found in the dictionary on the top of the operand
stack.)
((.exch = .pop) .cvx .dictforall)/xdef


(/if)
("/if" is equivalent to ".cvx .if")
(.cvx .if)/xdef

(/ifelse)
("/ifelse" is equivalent to " .ifelse .cvx .exec")
(.ifelse .cvx .exec)/xdef

([)
("[" is a command that marks the operand stack for use by the command "]".
This pair of commands is use to create arrays.  For example:
[ 1 2 (hello) ] 
will create an array containing two integers (1 and 2) and the string
"hello".)
(.mark)/xdef

(])
("]" is a command that counts the elements after the mark on the stack and 
puts these elements into an array which is left on the stack. 
The pair of commands ( "[" and "]" ) is use to create arrays.  For example:
[ 1 2 (hello) ] 
will create an array containing two integers (1 and 2) and the string
"hello".)
(.cnttomrk .array .astore .exch .pop)/xdef


(/altfile)
(/altfile  redefines the definition of .print so that printing is done on an alternate
file. /endalt exits this state.)
( (.print) .load $altfile .begin (/altprint) .exch .def
(Enter alternate file name:) /altprint .mystream .readline .pop .token (.cvlit 6 .bytestream (altfile) .exch .def .pop )((bad file name - ) /altprint /altprint .end)/ifelse)
/xdef

($altfile)  .dup .where (.pop .pop) .cvx (10 .dict .def) .cvx .ifelse
(/altprint)(.print) .load
$altfile .begin
.def
(.prompt)((alt>) /altprint ).cvx .def
(.print)
(.dup /altprint altfile .exch .writebytes).cvx .def
(/endalt)(altfile .killstream .end) .cvx .def
.end

(==)
(== is used to print all types of objects in a manner which can easily be 
read. The object to be printed is expected on the operand stack.
	<x> == => -- )
(($tab$) -1 .def pprint )/xdef

(pprint)
(pprint supports == and does all the printing)
(.dup .type $ptypes .exch .get .exec)/xdef

($ptypes) .dup .where (.pop .pop) (15 .dict .def) /ifelse

$ptypes .begin
(.nulltype)((nulltype -- no value)= .pop).cvx .def
(.integertype)((integertype -- value is: ).print =).cvx .def
(.longintegertype)((longintegertype -- value is: ).print =).cvx .def
(.realtype)((realtype -- value is: ).print =).cvx .def
(.booleantype)((booleantype -- value is: ).print =).cvx .def
(.stringtype)((stringtype -- value is: ).print =).cvx .def
(.inputtype)((inputtype -- no value)= .pop).cvx .def
(.outputtype)((outputtype -- no value)= .pop).cvx .def
(.commandtype)((commandtype -- value is: ).print .commandname =).cvx .def
(.dicttype)((dicttype -- length is: ).print .dup .length (         ).cvis .print ( maxlength is: ).print .maxlength =).cvx .def
(.arraytype)(tabinc tabprint(array: )= (tabprint pprint).cvx .arrayforall tabdec).cvx .def
(.localstype)((localstype -- no value)= .pop).cvx .def
(.marktype)((marktype -- no value)= .pop).cvx .def
.end

(tabinc)(($tab$) .dup .load 1 .add .store).cvx .def
(tabprint)($tab$ ((	).print).cvx .rept).cvx .def
(tabdec)(($tab$) .dup .load 1 .sub .store).cvx .def