dc.1 - 9base - revived minimalist port of Plan 9 userland to Unix | |
git clone git://git.suckless.org/9base | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
dc.1 (4834B) | |
--- | |
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 p… | |
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 .PD 0 | |
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 digit… | |
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; remainde… | |
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 \*9/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. |