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