Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
.TH DC 1
2
.SH NAME
3
dc \- desk calculator
4
.SH SYNOPSIS
5
.B dc
6
[
7
.I file
8
]
9
.SH DESCRIPTION
10
.I Dc
11
is an arbitrary precision desk calculator.
12
Ordinarily it operates on decimal integers,
13
but one may specify an input base, output base,
14
and a number of fractional digits to be maintained.
15
The overall structure of
16
.I dc
17
is
18
a stacking (reverse Polish) calculator.
19
If an argument is given,
20
input is taken from that file until its end,
21
then from the standard input.
22
The following constructions are recognized:
23
.TP
24
number
25
The value of the number is pushed on the stack.
26
A number is an unbroken string of the digits 
27
.B 0-9A-F 
28
or
29
.BR 0-9a-f .
30
A hexadecimal number beginning with a lower case
31
letter must be preceded by a zero to distinguish it
32
from the command associated with the letter.
33
It may be preceded by an underscore
34
.B _
35
to input a
36
negative number.
37
Numbers may contain decimal points.
38
.TP
39
.L
40
+  - /  *  %  ^
41
Add
42
.LR + ,
43
subtract
44
.LR - ,
45
multiply
46
.LR * ,
47
divide
48
.LR / ,
49
remainder
50
.LR % ,
51
or exponentiate
52
.L ^
53
the top two values on the stack.
54
The two entries are popped off the stack;
55
the result is pushed on the stack in their place.
56
Any fractional part of an exponent is ignored.
57
.TP
58
.BI s x
59
.br
60
.ns
61
.TP
62
.BI S x
63
Pop the top of the stack and store into
64
a register named
65
.IR x ,
66
where
67
.I x
68
may be any character.
69
Under operation
70
.B S
71
register
72
.I x
73
is treated as a stack and the value is pushed on it.
74
.TP
75
.BI l x
76
.br
77
.ns
78
.TP
79
.BI L x
80
Push the value in register
81
.I x
82
onto the stack.
83
The register
84
.I x
85
is not altered.
86
All registers start with zero value.
87
Under operation
88
.B L
89
register
90
.I x
91
is treated as a stack and its top value is popped onto the main stack.
92
.TP
93
.B  d
94
Duplicate the
95
top value on the stack.
96
.TP
97
.B  p
98
Print the top value on the stack.
99
The top value remains unchanged.
100
.B P
101
interprets the top of the stack as an
102
text
103
string,
104
removes it, and prints it.
105
.TP
106
.B  f
107
Print the values on the stack.
108
.TP
109
.B  q
110
.br
111
.ns
112
.TP
113
.B Q
114
Exit the program.
115
If executing a string, the recursion level is
116
popped by two.
117
Under operation
118
.B Q
119
the top value on the stack is popped and the string execution level is popped
120
by that value.
121
.TP
122
.B  x
123
Treat the top element of the stack as a character string
124
and execute it as a string of
125
.I dc
126
commands.
127
.TP
128
.B  X
129
Replace the number on the top of the stack with its scale factor.
130
.TP
131
.B "[ ... ]"
132
Put the bracketed
133
text
134
string on the top of the stack.
135
.TP
136
.PD0
137
.BI < x
138
.TP
139
.BI > x
140
.TP
141
.BI = x
142
.PD
143
Pop and compare the
144
top two elements of the stack.
145
Register
146
.I x
147
is executed if they obey the stated
148
relation.
149
.TP
150
.B  v
151
Replace the top element on the stack by its square root.
152
Any existing fractional part of the argument is taken
153
into account, but otherwise the scale factor is ignored.
154
.TP
155
.B  !
156
Interpret the rest of the line as a shell command.
157
.TP
158
.B  c
159
Clear the stack.
160
.TP
161
.B  i
162
The top value on the stack is popped and used as the
163
number base for further input.
164
.TP
165
.B I
166
Push the input base on the top of the stack.
167
.TP
168
.B  o
169
The top value on the stack is popped and used as the
170
number base for further output.
171
In bases larger than 10, each `digit' prints as a group of decimal digits.
172
.TP
173
.B O
174
Push the output base on the top of the stack.
175
.TP
176
.B  k
177
Pop the top of the stack, and use that value as
178
a non-negative scale factor:
179
the appropriate number of places
180
are printed on output,
181
and maintained during multiplication, division, and exponentiation.
182
The interaction of scale factor,
183
input base, and output base will be reasonable if all are changed
184
together.
185
.TP
186
.B  z
187
Push the stack level onto the stack.
188
.TP
189
.B  Z
190
Replace the number on the top of the stack with its length.
191
.TP
192
.B  ?
193
A line of input is taken from the input source (usually the terminal)
194
and executed.
195
.TP
196
.B "; :"
197
Used by 
198
.I bc
199
for array operations.
200
.PP
201
The scale factor set by
202
.B k
203
determines how many digits are kept to the right of
204
the decimal point.
205
If
206
.I s
207
is the current scale factor,
208
.I sa
209
is the scale of the first operand,
210
.I sb
211
is the scale of the second,
212
and
213
.I b
214
is the (integer) second operand,
215
results are truncated to the following scales.
216
.IP
217
.nf
218
\fL+\fR,\fL-\fR	max(\fIsa,sb\fR)
219
\fL*\fR	min(\fIsa\fR+\fIsb \fR, max\fR(\fIs,sa,sb\fR))
220
\fL/\fI	s
221
\fL%\fR	so that dividend = divisor*quotient + remainder; remainder has sign of dividend
222
\fL^\fR	min(\fIsa\fR\(mu|\fIb\fR|, max(\fIs,sa\fR))
223
\fLv\fR	max(\fIs,sa\fR)
224
.fi
225
.SH EXAMPLES
226
.LP
227
Print the first ten values of
228
.IR n !
229
.IP
230
.EX
231
[la1+dsa*pla10>y]sy
232
0sa1
233
lyx
234
.EE
235
.SH SOURCE
236
.B /sys/src/cmd/dc.c
237
.SH "SEE ALSO"
238
.IR bc (1),
239
.IR hoc (1)
240
.SH DIAGNOSTICS
241
.I x
242
.LR "is unimplemented" ,
243
where
244
.I x
245
is an octal number: an internal error.
246
.br
247
`Out of headers'
248
for too many numbers being kept around.
249
.br
250
`Nesting depth'
251
for too many levels of nested execution.
252
.SH BUGS
253
When the input base exceeds 16,
254
there is no notation for digits greater than
255
.BR F .
256
.PP
257
Past its time.