DC(I) 1/15/73 DC(I) NAME dc - desk calculator SYNOPSIS dc [ file ] DESCRIPTION Dc is an arbitrary precision integer arithmetic package. The overall structure of dc is a stacking (reverse Polish) calculator. The following constructions are recognized by the calculator: number The value of the number is pushed on the stack. A number is an unbroken string of the digits 0-9. It may be preceded by an underscore _ to input a negative number. + - * % ^ The top two values on the stack are added (+), subtracted (-), multiplied (*), divided (/), remaindered (%), or exponentiated (^). The two entries are popped off the stack; the result is pushed on the stack in their place. sx The top of the stack is popped and stored into a register named x, where x may be any character. lx The value in register x is pushed on the stack. The register x is not altered. All registers start with zero value. d The top value on the stack is pushed on the stack. Thus the top value is duplicated. p The top value on the stack is printed. The top value remains unchanged. f All values on the stack and in registers are printed. q exits the program. If executing a string, the nesting level is popped by two. x treats the top element of the stack as a character string and executes it as a string of dc commands. [|...|] puts the bracketed ascii string onto the top of the stack. <x =x >x The top two elements of the stack are popped and compared. Register x is executed if they obey the stated relation. v replaces the top element on the stack by its square root. ! interprets the rest of the line as a UNIX command. c All values on the stack are popped. i The top value on the stack is popped and used as the number radix for further input. o The top value on the stack is popped and used as the number radix for further output. z The stack level is pushed onto the stack. ? A line of input is taken from the input source (usually the console) and executed. new-line ignored except as the name of a register or to end the response to a ?. space ignored except as the name of a register or to terminate a number. If a file name is given, input is taken from that file until end-of-file, then input is taken from the console. An example which prints the first ten values of n! is [la1+dsa*pla10>x]sx 0sa1 lxx FILES /etc/msh to implement `!' DIAGNOSTICS (x) ? for unrecognized character x. (x) ? for not enough elements on the stack to do what was asked by command x. `Out of space' when the free list is exhausted (too many digits). `Out of headers' for too many numbers being kept around. `Out of pushdown' for too many items on the stack. `Nesting Depth' for too many levels of nested execution. BUGS