Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ dc(1) — DG/UX 4.00

Media Vault

Software Library

Restoration Projects

Artifacts Sought



                                                                    dc(1)



        _________________________________________________________________
        dc                                                        Command
        desk calculator
        _________________________________________________________________


        SYNTAX

        dc [ file ]


        DESCRIPTION

        Dc is an arbitrary precision arithmetic package.  Ordinarily it
        operates on decimal integers, but you can specify an input base,
        output base, and a number of fractional digits to be maintained.
        (See bc(1), a preprocessor for dc that provides infix notation
        and a C-like syntax that implements functions.  Bc also provides
        reasonable control structures for programs.) The overall
        structure of dc is a stacking (reverse Polish) calculator.  If an
        argument is given, input is taken from that file until its end,
        then from the standard input.  The following constructions are
        recognized:

        number
              The value of the number is pushed on the stack.  A number
              is an unbroken string of the digits 0-9.  It may be
              preceded by an underscore () to input a negative number.
              Numbers may contain decimal points.

        + - / * % ^
              The top two values on the stack are added (+), subtracted
              (-), multiplied (*), or divided (/).  The percent sign (%)
              shows the remainder when the two values are divided and the
              caret (^) shows the result when one of the two numbers is
              used as an exponent of the other.  The two entries are
              popped off the stack; the result is pushed on the stack in
              their place.  Any fractional part of an exponent is
              ignored.

        sx    The top of the stack is popped and stored into a register
              named x, where x may be any character.  If the s is
              capitalized, x is treated as a stack and the value is
              pushed on it.

        lx    The value in register x is pushed on the stack.  The
              register x is not altered.  All registers start at zero.
              If the l is capitalized, register x is treated as a stack
              and its top value is popped onto the main stack.

        d     The top value on the stack is duplicated.



        DG/UX 4.00                                                 Page 1
               Licensed material--property of copyright holder(s)





                                                                    dc(1)



        p     The top value on the stack is printed.  The top value
              remains unchanged.  P interprets the top of the stack as an
              ASCII string, removes it, and prints it.

        f     All values on the stack are printed.

        q     Exits the program.  If executing a string, the recursion
              level is popped by two.  If q is capitalized, the top value
              on the stack is popped and the string execution level is
              popped by that value.

        x     Treats the top element of the stack as a character string
              and executes it as a string of dc commands.

        X     Replaces the number on the top of the stack with its scale
              factor.

        [ ... ]
              Puts the bracketed ASCII string onto the top of the stack.

        <x   >x   =x
              The top two elements of the stack are popped and compared.
              Register x is evaluated if they obey the stated relation.

        v     Replaces the top element on the stack by its square root.
              Any existing fractional part of the argument is taken into
              account, but otherwise the scale factor is ignored.

        !     Interprets the rest of the line as a DG/UX system command.

        c     All values on the stack are popped.

        i     The top value on the stack is popped and used as the number
              radix for further input.  I pushes the input base on the
              top of the stack.

        o     The top value on the stack is popped and used as the number
              radix for further output.

        O     Pushes the output base on the top of the stack.

        k     The top of the stack is popped, and that value is used as a
              non-negative scale factor:  the appropriate number of
              places are printed on output, and maintained during
              multiplication, division, and exponentiation.  The
              interaction of scale factor, input base, and output base
              will be reasonable if all are changed together.

        z     The stack level is pushed onto the stack.

        Z     Replaces the number on the top of the stack with its



        DG/UX 4.00                                                 Page 2
               Licensed material--property of copyright holder(s)





                                                                    dc(1)



              length.

        ?     A line of input is taken from the input source (usually the
              terminal) and executed.

        ; :   Used by bc for array operations.



        _________________________________________________________________
        EXAMPLES

        $ cat dc.infile1

        10sa2sb
        lad+p
        lalb/p
        q

        $ dc dc.infile1

        20
        5
        $

        In this example, the dc command uses dc.infile1 for its input,
        and dc.outfile1 for its output.  The first line of dc.infile1
        causes the a and b registers to be loaded with the values 10 and
        2, respectively.  The next 2 lines use the a and b register
        values to perform some arithmetic.  The second line pushes the a
        register on the stack, duplicates it and then adds the two
        numbers together.  The third line pushes the b register and the a
        register on the stack and then divides b by a.  In both cases the
        result is pushed on the stack, and the p causes the result to be
        printed to the output file.  The 20 is the result of 10+10 and
        the 5 is the result of 10/2.

        $ dc
        [3 5 * p]
        x
        15
        ^d
        $

        In this example, dc.infile2 is used for the input for dc, and
        dc.outfile2 is used for the output.  The first line of the input
        pushes the strings of commands onto the stack.  The x command
        treats the top of the stack as a string of commands and executes
        them.  The p in the string of commands causes the result (15) to
        be written to the output file.




        DG/UX 4.00                                                 Page 3
               Licensed material--property of copyright holder(s)





                                                                    dc(1)



        $ cat dc.infile3

        [6 4 + p] sa
        5
        5
        =a
        q

        $ dc dc.infile3
        10
        $

        In this example, dc uses dc.infile3 for its input and dc.outfile3
        for its  output.  The first line of the input causes register "a"
        to be loaded  with the given string of commands ([6 4 + p]).  The
        next 2 lines cause 2 5's to be pushed on the stack.  The =a
        command then checks the top  2 values on the stack to see if
        they're equal.  Since they are, the commands in the "a" register
        are executed.  The result (10) is written to the screen.
        _________________________________________________________________


        SEE ALSO

        bc(1).


        DIAGNOSTICS

        x is unimplemented  X is an octal number.

        stack empty         Not enough elements on the stack to do what
                            was asked.

        Out of space        The free list is exhausted (too many digits).

        Out of headers      Too many numbers being kept around.

        Out of pushdown     Too many items on the stack.

        Nesting Depth       Too many levels of nested execution.













        DG/UX 4.00                                                 Page 4
               Licensed material--property of copyright holder(s)



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026