Annotation of lucent/sys/man/1/dc, revision 1.1.1.1

1.1       root        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: .EX
                    227: [la1+dsa*pla10>y]sy
                    228: 0sa1
                    229: lyx
                    230: .EE
                    231: .ns
                    232: .IP
                    233: Print the first ten values of
                    234: .IR n !
                    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.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.