====== dc ====== Reverse-Polish calculator and one of the oldest Unix utilities. ===== Commands ===== ^ ^ Command ^ Use ^ ^ Printing | ^ | p | print the stack top without altering the stack | ^ | n | pops the stack top and prints it without a newline | ^ | P | pops the stack top; if a string, print it without a newline; otherwise print the integer value as a byte stream | ^ | f | print the entire stack top to bottom without altering anything | ^ Arithmetic | | | + | pops two values, adds them, and pushes the result | | | - | pops two values, subtracts the first popped from the second, and pushes the result | | | * | pops two values, multiplies them, and pushes the result | | | / | pops two values, divides the second popped by the first, and pushes the result | | | % | pops two values, calculates the remainder of the division that / would perform, and pushes that | | | ~ | pops two values, divides the second popped by the first popped, then pushes the quotient followed by the remainder | | | \^ | pops two values, raises the second popped to the power of the first popped, and pushes the result | | | \| | pops three values; the first popped is a reduction modulus, the third is the base, and the second is the exponent | | | v | pops one value and computes its square root | ^ Stack control | | | c | clears the stack | | | d | duplicates the value on top of the stack | | | r | swaps the top two values on the stack | | | R | pops the top value as an integer $n$, then rotates the top $n$ elements of the stack; if the stack has fewer than $n$ elements, the entire stack is rotated | ^ Registers | | | s__r__ | pop the stack top and store it in register __r__ | | | l__r__ | copy the value from register __r__ and push it to the stack | | | S__r__ | pop the top of the main stack and push it onto the stack of register __r__ | | | L__r__ | pop the top of register __r__'s stack and push it onto the main stack | ^ Parameters | | | i | pops a value off the stack and uses it as the input radix | | | o | pops a value off the stack and uses it as the output radix | | | k | pops a value off the stack and uses it to set the precision | | | I | pushes the current input radix onto the stack | | | O | pushes the current output radix onto the stack | | | K | pushes the current precision onto the stack | ^ Strings | | | [__text__] | pushes __text__ to the stack as a string | | | a | pops the top of stack; if it was a number, the low-order byte is converted to a string and pushed onto the stack; otherwise, the first character of the string is pushed back | | | x | pops a value off the stack and executes it as a macro; if the stack top was a number, it is simply pushed back | | | >__r__ | pops two values and compares them as numbers, then executes the contents of __r__ as a macro if the first popped is greater than the second | | | !>__r__ | similar, but invokes the macro if the first popped is not greater than the second | | | <__r__ | similar, but invokes the macro if the first popped is less than the second | | | !<__r__ | similar, but invokes the macro if the first popped is not less than the second | | | =__r__ | similar, but invokes the macro if the two numbers are equal | | | !=__r__ | similar, but invokes the macro if the two numbers are not equal | | | ? | reads a line from the terminal and executes it, allowing for user input | | | q | exits from a macro and from the macro which invoked it; if called from the top level, exits dc | | | Q | pops a value off the stack and uses it as a count of macro levels to exit; will never cause dc to exit | ^ Status inquiry | | | Z | pops a value off the stack, calculates the number of decimal digits (or number of characters if a string) it has, and pushes that number; this does not include any leading zeros | | | X | pops a value off the stack, calculates the number of fraction digits it has, and pushes that number; if a string, the value pushed is 0 | | | z | pushes the current stack depth | ^ Miscellaneous | | | ! | executes the rest of the line as a system command; if the command begins with <, =, or >, then a space must be present after the ! | | | # | interprets the rest of the line as a comment | | | :__r__ | pops the top two values off the stack, storing the second popped in the array __r__, indexed by the first popped | | | ;__r__ | pops the top of stack and uses it as an index into array __r__; the selected value is then pushed onto the stack | ===== Samples ===== Break these examples out with comments * sum the entire stack: ''0d[+z1dc|man page]] {{tag>cli}}