|
|
1.1 root 1: .\" Copyright (c) 1990 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)dc.1 6.4 (Berkeley) 7/24/90
6: .\"
7: .Dd July 24, 1990
8: .Dt DC 1
9: .Os ATT 7th
10: .Sh NAME
11: .Nm dc
12: .Nd desk calculator
13: .Sh SYNOPSIS
14: .Nm dc
15: .Op file
16: .Sh DESCRIPTION
17: .Nm Dc
18: is an arbitrary precision arithmetic package.
19: Ordinarily it operates on decimal integers,
20: but one may specify an input base, output base,
21: and a number of fractional digits to be maintained.
22: The overall structure of
23: .Nm dc
24: is
25: a stacking (reverse Polish) calculator.
26: If an argument is given,
27: input is taken from that file until its end,
28: then from the standard input.
29: The following constructions are recognized:
30: .Tw Fl
31: .Tp Va number
32: The value of the number is pushed on the stack.
33: A number is an unbroken string of the digits 0-9.
34: It may be preceded by an underscore _ to input a
35: negative number.
36: Numbers may contain decimal points.
37: .Tp Li \&+ \&\- \&/ \&* \&% \&^
38: The
39: top two values on the stack are added
40: (+),
41: subtracted
42: (\-),
43: multiplied (*),
44: divided (/),
45: remaindered (%),
46: or exponentiated (^).
47: The two entries are popped off the stack;
48: the result is pushed on the stack in their place.
49: Any fractional part of an exponent is ignored.
50: .Tc Ic s
51: .Ar x
52: .Cx
53: The
54: top of the stack is popped and stored into
55: a register named
56: .Ar x ,
57: where
58: .Ar x
59: may be any character.
60: If
61: the
62: .Ar s
63: is capitalized,
64: .Ar x
65: is treated as a stack and the value is pushed on it.
66: .Tc Ic l
67: .Ar x
68: .Cx
69: The
70: value in register
71: .Ar x
72: is pushed on the stack.
73: The register
74: .Ar x
75: is not altered.
76: All registers start with zero value.
77: If the
78: .Ar l
79: is capitalized,
80: register
81: .Ar x
82: is treated as a stack and its top value is popped onto the main stack.
83: .Tp Ic d
84: The
85: top value on the stack is duplicated.
86: .Tp Ic p
87: The top value on the stack is printed.
88: The top value remains unchanged.
89: .Ar P
90: interprets the top of the stack as an ascii string,
91: removes it, and prints it.
92: .Tp Ic f
93: All values on the stack and in registers are printed.
94: .Tp Ic q
95: exits the program.
96: If executing a string, the recursion level is
97: popped by two.
98: If
99: .Ar q
100: is capitalized,
101: the top value on the stack is popped and the string execution level is popped
102: by that value.
103: .Tp Ic x
104: treats the top element of the stack as a character string
105: and executes it as a string of dc commands.
106: .Tp Ic X
107: replaces the number on the top of the stack with its scale factor.
108: .Tp Op \&...
109: puts the bracketed ascii string onto the top of the stack.
110: .Tp Va \&<x \&>x \&=x
111: The
112: top two elements of the stack are popped and compared.
113: Register
114: .Ar x
115: is executed if they obey the stated
116: relation.
117: .Tp Ic v
118: replaces the top element on the stack by its square root.
119: Any existing fractional part of the argument is taken
120: into account, but otherwise the scale factor is ignored.
121: .Tp Ic \&!
122: interprets the rest of the line as a UNIX command.
123: .Tp Ic c
124: All values on the stack are popped.
125: .Tp Ic i
126: The top value on the stack is popped and used as the
127: number radix for further input.
128: .Ic I
129: pushes the input base on the top of the stack.
130: .Tp Ic o
131: The top value on the stack is popped and used as the
132: number radix for further output.
133: .Tp Ic O
134: pushes the output base on the top of the stack.
135: .Tp Ic k
136: the top of the stack is popped, and that value is used as
137: a non-negative scale factor:
138: the appropriate number of places
139: are printed on output,
140: and maintained during multiplication, division, and exponentiation.
141: The interaction of scale factor,
142: input base, and output base will be reasonable if all are changed
143: together.
144: .Tp Ic z
145: The stack level is pushed onto the stack.
146: .Tp Ic Z
147: replaces the number on the top of the stack with its length.
148: .Tp Ic \&?
149: A line of input is taken from the input source (usually the terminal)
150: and executed.
151: .Tp Ic \&; \&:
152: are used by
153: .Ar bc
154: for array operations.
155: .Tp
156: .Pp
157: An example which prints the first ten values of
158: .Ic n\&! :
159: .Pp
160: .Df I
161: .Cx Op Li la1+dsa*pla10>y
162: .Cx sy
163: .Cx
164: .De
165: .Ds I
166: .Li 0sa1
167: .De
168: .Ds I
169: .Li lyx
170: .De
171: .Sh SEE ALSO
172: .Xr bc 1 ,
173: which is a preprocessor for
174: .Nm dc
175: providing infix notation and a C- like syntax
176: which implements functions and reasonable control
177: structures for programs.
178: .Sh HISTORY
179: .Nm Dc
180: appeared in Version 6 AT&T Unix.
181: .Sh DIAGNOSTICS
182: .Tw Ar
183: .Tp Li x is unimplemented
184: where x is an octal number.
185: .Tp Li stack empty
186: for not enough elements on the stack to do what was asked.
187: .Tp Li Out of space
188: when the free list is exhausted (too many digits).
189: .Tp Li Out of headers
190: for too many numbers being kept around.
191: .Tp Li Out of pushdown
192: for too many items on the stack.
193: .Tp Li Nesting Depth
194: for too many levels of nested execution.
195: .Tp
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.