packages icon



  PNAME(1)
 PNAME(1)




  NAME
       pname - spreadsheet calculator

  SYNOPSIS
       pname [ -c ] [ -m ] [ -n ] [ -r ] [ -x ] [ file ]

  DESCRIPTION
       The spreadsheet calculator pname is based on rectangular tables much
       like a financial spreadsheet.  When invoked it presents you with a
       table organized as rows and columns of cells.  If invoked without a
       file argument, the table is initially empty.  Otherwise file is read
       in (see the Get command below).  Each cell may have  associated  with
 it
       a numeric value, a label string, and/or an expression (formula) which
       evaluates to a numeric value or label string, often based on other
       cell values.

       Options are:

       -c   Start the program with the recalculation being done in column
            order.

       -m   Start the program with automatic recalculation disabled.  The
            spreadsheet will be recalculated only when the ``@'' command is
            used.

       -n   Start the program in quick numeric entry mode (see below).

       -r   Start the program with the recalculation being done in row order
            (default option).

       -x   Cause the Get and  Put  commands  (see  below)  to  encrypt  and
 decrypt
            data files.

       All of these options can be changed with the ^T and S commands (see
       below) while pname is running.  Options specified when pname is
       invoked override options saved in the data file.

     General Information
       The screen is divided  into  four  regions.   The  top  line  is  for
 entering
       commands and displaying cell values.  The second line is for messages
       from pname.  The third line and  the  first  four  columns  show  the
 column
       and row numbers, from which are derived cell addresses, e.g.  A0 for
       the cell in column A, row 0.  Note that column names are case-
       insensitive: you can enter A0 or a0.

       The rest of the screen forms a window looking at a portion of the
       table.  The total number of display rows and columns available, hence
       the number of table rows and columns displayed, is set by curses(3)
       and may be overridden by setting the LINES and COLUMNS environment
       variables, respectively.



                                     - 1  -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       The screen has two cursors: a cell cursor, indicated by a highlighted
       cell and a ``<'' on the screen, and a character cursor, indicated by
       the terminal's hardware cursor.  The cell and character cursors are
       often the same.  They differ when you type a command on the top line.

       If a cell's numeric value is wider than the column width (see the f
       command), the cell is filled  with  asterisks.   If  a  cell's  label
 string
       is wider than the column width, it is truncated at the start of the
       next non-blank cell in the row, if any.

       Cursor control commands and row and column commands can  be  prefixed
 by
       a numeric argument which indicates how many times the command  is  to
 be
       executed.  You can type ^U before a repeat count if quick numeric
       entry mode is enabled or if the number is to be entered while the
       character cursor is on the top line.

       Commands which use the terminal's control key, such as ^N, work both
       when a command is being typed and when in normal mode.

     Changing Options

       ^To  Toggle options.  This command allows you to switch the state of
            one option selected by o.  A small menu lists the choices for o
            when you type ^T.  The options selected are saved when the data
            and formulas are saved so that you will have the same setup next
            time you enter the spreadsheet.

            a    Automatic Recalculation.  When set, each change in the
                 spreadsheet causes the entire spreadsheet be recalculated.
                 Normally this is not noticeable, but for very large
                 spreadsheets, it may be faster to clear automatic
                 recalculation mode and update the spreadsheet via explicit
                 ``@'' commands.  Default is automatic recalculation on.

            c    Current cell highlighting.  If enabled, the current cell is
                 highlighted (using the terminal's standout mode, if
                 available) in addition to being marked by the cell cursor.

            e    External function execution.  When disabled, external
                 functions (see @ext() below) are not called.  This saves a
                 lot of time at each screen update.  External functions are
                 disabled by default.  If disabled, and external functions
                 are used anywhere, a  warning  is  printed  each  time  the
 screen
                 is updated, and the result of @ext() is the value from the
                 previous call, if any, or a null string.

            n    Quick numeric entry.  If enabled, a typed digit is assumed
                 to be the start of a numeric value for  the  current  cell,
 not
                 a repeat count, unless preceded by ^U.





                                     - 2  -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




            t    Top line display.  If enabled, the name and value of the
                 current cell is displayed on the top line.  If there is an
                 associated label string, the first character of the string
                 value is ``<'' for a leftstring or ``>'' for a rightstring
                 (see below), followed by "string" for a constant string or
                 {expr} for a string expression.  If the cell has a numeric
                 value, it follows as [value], which may be a constant or
                 expression.

            x    Encryption.  See the -x option.

            $    Dollar prescale.  If enabled, all numeric constants (not
                 expressions) which you enter are multipled by 0.01 so you
                 don't have to keep typing the decimal point if you enter
                 lots of dollar figures.

       S    Set options.  This command allows you to set various options.  A
            small menu lists the options that cannot be changed through ^T
            above.

            byrows/bycols
                 Specify the order cell evaluation when updating.  These
                 options also affect the order in  which  cells  are  filled
 (see
                 /f) and whether a row or column is cleared by an x command.

            iterations=n
                 Set the maximum number of recalculations before the screen
                 is displayed again. Iterations is set to 10 by default.

            tblstyle=s
                 Control the output of the T command.  s can be: 0 (default)
                 to give colon delimited fields, with no tbl control lines;
                 tbl to give colon delimited fields, with tbl(1) control
                 lines; latex to give a LaTeX tabular environment;  and  tex
 to
                 give a TeX simple tabbed alignment with ampersands as
                 delimiters.

            Other Set options are normally used only in pname data files
            since they are available through ^T.  You can also use them
            interactively

            autocalc/!autocalc
                 Set/clear auto recalculation mode.

            numeric/!numeric
                 Set/clear numeric mode.

            prescale/!prescale
                 Set/clear numeric prescale mode.





                                     - 3  -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




            extfun/!extfun
                 Enable/disable external functions.

            cellcur/!cellcur
                 Set/clear current cell highlighting mode.

            toprow/!toprow
                 Set/clear top row display mode.

     Cursor Control Commands

       ^P   Move the cell cursor up to the previous row.

       ^N   Move the cell cursor down to the next row.

       ^B   Move the cell cursor backward one column.

       ^F   Move the cell cursor forward one column.

       h, j, k, l
            If the character cursor is not on the top line, these are
            alternate, vi-compatible cell cursor controls (left, down, up,
            right).

       ^H   If the character cursor is not on the top line, ^H is  the  same
 as
            ^B.

       SPACE
            If the character cursor is not on the top line, the space bar is
            the same as ^F.

       TAB  If the character cursor is on the top line, TAB starts a range
            (see below).  Otherwise, it is the same as ^F.

       Arrow Keys
            The terminal's arrow keys provide another alternate set of cell
            cursor controls if they exist and are supported in the
            appropriate termcap entry.  Some terminals have arrow keys which
            conflict with other control key codes.  For example, a terminal
            might send ^H when the back arrow key is pressed.  In these
            cases, the conflicting arrow key performs the same function as
            the key combination it mimics.

       ^    Move the cell cursor up to row 0 of the current column.

       #    Move the cell cursor down to the last valid row of the current
            column.

       0    Move the cell cursor backward to column A of the current row.
            This command must be prefixed with ^U  if  quick  numeric  entry
 mode
            is enabled.



                                     - 4 -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       $    Move the cell cursor forward to the last valid column of the
            current row.

       b    Scan the cursor backward (left and up) to the previous valid
            cell.

       w    Scan the cursor forward (right and down) to the next valid cell.

       ^Ed  Go to end of range.  Follow ^E by a direction indicator such as
            ^P or j.  If the cell cursor starts on a non-blank cell, it goes
            in the indicated direction until the last non-blank adjacent
            cell.  If the cell cursor starts on a blank cell, it goes in the
            indicated  direction  until  the  first  non-blank  cell.   This
 command
            is useful when specifying ranges of adjacent cells (see below),
            especially when the range is bigger than the visible window.

       g    Go to a cell.  pname prompts for a cell's name, a regular
            expression surrounded by quotes, or a number.  If a cell's name
            such as ae122 or a the name of a defined  range  is  given,  the
 cell
            cursor goes directly to that cell.  If a quoted regular
            expression such as " Tax Table " or " ^Jan [0-9]*$ " is given,
            pname searches for a cell containing a string matching the
            regular expression.  See regex(3) or ed(1) for more details on
            the form of regular expressions.  If a number is given, pname
            will search for a cell containing that number.  Searches for
            either strings or numbers proceed forward from the current cell,
            wrapping back to a0 at the end of the table,  and  terminate  at
 the
            current cell if the string or number is not found.  The last g
            command is saved, and can be re-issued by entering g<return>.

     Cell Entry and Editing Commands
       Cells can contain both a numeric value and a string value.  Either
       value can be the result of an expression, but not both at once, i.e.
       each cell can have only one expression associated with it.   Entering
 a
       valid numeric expression alters the cell's previous numeric value, if
       any, and replaces the cell's previous string expression, if any,
       leaving  only  the  previously  computed   constant   label   string.
 Likewise,
       entering a valid string expression alters the cell's the previous
       label string, if any, and replaces the cell's previous numeric
       expression, if any, leaving only the previously computed constant
       numeric value.

       =    Enter a numeric constant or expression into the current cell.
            pname prompts for the expression on the top line.  The usual way
            to enter a number into a cell is to type ``='', then enter the
            number in response to the prompt on the top line.  The quick
            numeric entry option, enabled through the -n option or ^T
            command, shows the prompt when you enter the first digit of a
            number (you can skip typing ``='').





                                     - 5  -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       <    Enter a label string into the current cell to be flushed left
            against the left edge of the cell.

       "
       >    Enter a label string into the current cell to be flushed right
            against the right edge of the cell.

       Strings you enter must start with ".  You can leave off the  trailing
 "
       and pname will  add  it  for  you.   You  can  also  enter  a  string
 expression
       by backspacing over the opening " in the prompt.

       e    Edit the value associated with the current cell.  This is
            identical to ``='' except that the command line starts out
            containing the old numeric value or expression associated with
            the cell.

       E    Edit the string associated with the current cell.  This is
            identical to ``<'', ``"'', or ``>'' except that the command line
            starts out containing the old string value or expression
            associated with the cell.

       To enter and edit a cell's number part, use the ``='' and e commands.
       To enter and edit a cell's string part, use the ``<'', ``"'', ``>'',
       and E commands.  See the sections below on numeric and string
       expressions for more information.

       x    Clear the  current  cell.   Deletes  the  numeric  value,  label
 string,
            and/or numeric  or  string  expression.   You  can  prefix  this
 command
            with a count of the number of cells on the current row to clear.
            The current column is used if column recalculation order is set.
            Cells cleared with this command may be recalled with any of the
            pull commands (see below).

       m    Mark a cell to be used as the source for the copy command.

       c    Copy the last marked cell to the current cell, updating row and
            column references in its numeric or string expression, if any.

       +    If not  in  numeric  mode,  add  the  current  numeric  argument
 (default
            1) to the value of the current cell.  In numeric mode, ``+''
            introduces a new numeric expression or value, the same as ``=''.

       -    If not in numeric mode, subtract the current numeric argument
            (default 1) from the value of  the  current  cell.   In  numeric
 mode,
            ``-'' introduces a new, negative, numeric expression or value,
            like ``=''.

     File Commands

       G    Get a new database from a file.  If encryption is enabled, the
            file is decrypted before it is loaded into the spreadsheet.



                                     - 6 -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       P    Put the current database into a file.  If encryption is enabled,
            the file is encrypted before it is saved.

       W    Write a listing of the current database into a file in a form
            that matches its appearance on the screen.   This  differs  from
 the
            Put command in that its files are intended to be reloaded with
            Get, while Write produces a file for people to look at.  Hidden
            rows or columns are not shown when the data is printed.

       T    Write a listing of the current database to a file, but include
            delimiters suitable for processing by the tbl, LaTeX, or TeX
            table processors.  The delimiters are controlled by the tblstyle
            option.  See Set above.  The delimters are are a colon (:) for
            style 0ortbl and an ampersand (&) for style latexortex.

       With the Put, Write, and Table commands, the optional range argument
       writes a subset of the spreadsheet to the output file.

       With the Write and Table commands, if you try to write to the last
       file used with the Get or Put commands, or the file specified on the
       command line when pname was invoked, you are asked  to  confirm  that
 the
       (potentially) dangerous operation is really what you want.

       The three output commands, Put, Write, and Table, can pipe their
       (unencrypted only) output to a program.  To use this feature, enter
       ``| program'' to the prompt asking for a filename.  For example, to
       redirect the output of the Write command to the printer, you might
       enter ``| lpr -p''.

       M    Merge  the  database  from  the  named  file  into  the  current
 database.
            Values and expressions defined in the named file are read into
            the current spreadsheet overwriting the existing entries at
            matching cell locations.

       R    Run macros.  Since pname files are saved as ASCII files, it is
            possible to use them as primitive macro definition files.  The
            Run command makes this easier.  It's like the Merge command, but
            prints a saved path name as the start of the filename to merge
            in.  The string to use is set with the Define command.  To write
            macros, you must be familiar with the file format written by the
            Put command.  This facility is still primitive and could be much
            improved.

       D    Define a path for the Run command to use.

       All file operations take a filename as the first argument to the
       prompt on the top line.  The prompt supplies a " to aid in typing in
       the filename.  The filename can also be obtained from a cell's label
       string or string expression.  In this case, delete the leading " with
       the backspace key and enter a cell name such as a22 instead.  If the
       resulting string starts with ``|'', the rest of the string is



                                     - 7 -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       interpreted as a UNIX command, as above.

     Row and Column Commands
       These commands can be used on either rows or columns.  The second
       letter of the command is either a row designator (one of the
       characters r, ^B, ^F, h, l) or a column designator (one of c, ^P, ^N,
       k, j).  A small menu lists the choices for the second letter when you
       type the first letter of one of these commands.  Commands which move
       or copy cells also modify the row and column references in affected
       cell expressions.  The references may be frozen by using the fixed
       operator or using the $ character in the reference to the cell (see
       below).

       ir, ic
            Insert a new row (column) by moving the row (column) containing
            the cell cursor, and all following rows (columns), down (right)
            one row (column).  The new row (column) is empty.

       ar, ac
            Append a new row (column) immediately following the current row
            (column).  It is initialized as a copy of the current one.

       dr, dc
            Delete the current row (column).

       pr, pc, pm
            Pull deleted rows (columns) back into the spreadsheet.  The last
            deleted set of cells is put back into the spreadsheet at the
            current location.  pr inserts enough rows to hold the data.  pc
            inserts enough columns to hold the data.  pm (merge) does not
            insert rows or columns; it overwrites the cells beginning at the
            current cell cursor location.

       vr, vc
            Remove expressions from the  affected  rows  (columns),  leaving
 only
            the values which were in the cells before the command was
            executed.

       zr, zc
            Hide (``zap'') the current row (column).  This keeps a row
            (column) from being displayed but keeps it  in  the  data  base.
 The
            status of the rows and columns is saved with the data base so
            hidden rows and columns will be still be hidden when you reload
            the spreadsheet.  Hidden rows or columns are not printed by  the
 W
            command.

       sr, sc
            Show hidden rows (columns).  Enter a range of rows (columns) to
            be revealed.  The default is the first range of rows (columns)
            currently hidden.  This command ignores  the  repeat  count,  if
 any.



                                     - 8  -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       f    Set the output format to be used for printing the numeric values
            in each cell in the current  column.   Enter  two  numbers:  the
 total
            width in characters of the column, and the number of digits to
            follow decimal points.  Values are rounded off to the least
            significant digit displayed.  The total column width affects
            displays of strings as well as numbers.  A preceding  count  can
 be
            used to affect more than one column.  This command has only a
            column version (no second letter).

     Range Commands
       Range operations affect a rectangular region on the screen defined by
       the upper left and lower right cells in the region.  All of the
       commands in this class start with a slash; the second letter of the
       command indicates which command.  A small menu lists the choices for
       the second letter when you type ``/''.  pname prompts for needed
       parameters for each command.  Phrases surrounded by  square  brackets
 in
       the prompt  are  informational  only  and  may  be  erased  with  the
 backspace
       key.

       Prompts requesting variable names may be satisfied with either an
       explicit variable name, such as A10, or with a variable name
       previously defined in a /d command (see below).  Range name prompts
       require either an explicit range such as A10:B20, or a range name
       previously defined with a /d command.  A default range shown in the
       second line is used if you omit the range from the command or press
       the TAB key (see below).  The default range can be changed by moving
       the cell cursor via the control commands (^P,  ^N,  ^B,  ^F)  or  the
 arrow
       keys.  The cells in the default range are highlighted (using the
       terminal's standout mode, if available).

       /x   Clear a range.  Cells cleared with this command may be recalled
            with any of the pull commands.

       /v   Values only.  This command removes the expressions from a range
            of cells, leaving just the values of the expressions.

       /c   Copy a source range to a destination range.  The source and
            destination may be different sizes.  The result is always one or
            more full copies of the source.  Copying a row to a row yields a
            row.  Copying a column to a column yields a column.  Copying a
            range to anything yields a range.  Copying a row to a column  or
 a
            column to a row yields a range with as many copies of the source
            as there are cells in the destination.  This command can be used
            to duplicate a cell through an arbitrary range by making the
            source a single cell range such as b20:b20.

       /f   Fill a range with constant values starting with  a  given  value
 and
            increasing by a given increment.  Each row is filled before
            moving on to the next row if row order recalculation is set.
            Column order fills each column in the range before moving on to
            the next  column.   The  start  and  increment  numbers  may  be
 positive



                                     - 9 -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




            or negative.  To fill all cells with the same value, give an
            increment of zero.

       /d   Use this command to assign a symbolic name to a single cell or a
            rectangular range of cells on the screen.   The  parameters  are
 the
            name, surrounded by "", and either a single cell  name  such  as
 A10
            or a range such as a1:b20.  Names defined in this fashion are
            used by the  program  in  future  prompts,  may  be  entered  in
 response
            to prompts requesting a cell or range name, and are saved when
            the spreadsheet is saved with the Put command.  Names defined
            must be more than two alpha  characters  long  to  differentiate
 them
            from a column names, and must not have embedded special
            characters.  Names may include the character ``_''  or  numerals
 as
            long as they occur after the first three alpha characters.

       /s   This command lists (shows) the currently  defined  range  names.
 If
            there are no defined range names, then a message is given,
            otherwise it pipes output to sort, then to less.  If the
            environment variable PAGER is set, its value is used in place of
            less.

       /u   Use this command to undefine a previously defined range name.

     Miscellaneous Commands

       Q
       q
       ^C   Exit from pname.  If you made any changes since the last Get or
            Put, pname asks about saving your data before exiting.

       ^G
       ESC  Abort entry of the current command.

       ?    Enter an interactive help facility.  Lets you look up brief
            summaries of  the  main  features  of  the  program.   The  help
 facility
            is structured like this manual page so it is easy to find more
            information on a particular topic.

       !    Shell escape.  pname prompts for a shell command  to  run.   End
 the
            command line with the RETURN key.  If the environment variable
            SHELL is defined, that shell is run.  If not, /bin/sh is used.
            Giving a null command line starts the shell in interactive mode.
            A second ``!'' repeats the previous command.

       ^L   Redraw the screen.

       ^R   Redraw the screen with  special  highlighting  of  cells  to  be
 filled
            in.  This is useful for finding values you need to provide or
            update in a form with which you aren't familiar or of which you
            have forgotten the details.



                                    - 10  -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




            It's also useful for checking a  form  you  are  creating.   All
 cells
            which contain constant numeric values (not the result of a
            numeric expression) are highlighted temporarily, until the next
            screen change, however minor.  To avoid ambiguity, the current
            range (if any) and current cell are not highlighted.

       ^X   This command is similar to ^R, but highlights cells which have
            expressions.   It  also  displays   the   expressions   in   the
 highlighted
            cells as left-flushed strings, instead of the numeric values
            and/or label strings of those cells.  This command makes it
            easier to check expressions, at least when they fit in their
            cells or the following cell(s) are blank so the expressions can
            slop over (like label strings).  In the latter case, the slop
            over is not cleared on the next screen update, so you  may  want
 to
            type ^L after the ^X in order to clean up the screen.

       @    Recalculates the spreadsheet.

       ^V   Type, in the command line, the name of the current cell (the one
            at the cell cursor).  This is useful when entering expressions
            which refer to other cells in the table.

       ^W   Type, in the  command  line,  the  expression  attached  to  the
 current
            cell.  If there is none, the result is ``?''.

       ^A   Type, in the command line, the  numeric  value  of  the  current
 cell,
            if any.

       The ^V, ^W, and ^A commands only work when the character cursor is on
       the command line and beyond the first character.

       TAB  When the character cursor is on the top line, defines a range of
            cells via the cursor control commands or the arrow keys.  The
            range is highlighted, starts at the cell where  you  typed  TAB,
 and
            continues through the current cell cursor.  Pressing TAB again
            causes the highlighted range to be entered into the command line
            and the highlighting to be turned off.  This is most useful for
            defining ranges to functions such  as  @sum().   Pressing  ``)''
 acts
            just like typing the TAB  key  the  second  time  and  adds  the
 closing
            ``)''.  Note that when you give a range command, you don't need
            to press the first TAB to begin defining a range starting with
            the current cell.

     Variable Names
       Normally, a variable name is just the name of a cell, such as K20.
       The value is the numeric or string value of the cell, according to
       context.

       When a cell's expression (formula) is copied to another location via
       copy or range-copy, variable references are by default offset by the
       amount the formula moved.  This allows the new formula to work on new



                                    - 11 -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       data.  If cell references are not to change, you can either use the
       fixed operator (see below), or one of the following variations on the
       cell name.

       K20  References cell K20; the reference changes when the formula is
            copied.

       $K$20
            Always refers to cell K20; the reference stays fixed when the
            formula is copied.

       $K20 Keeps the column fixed at column K; the row is free to vary.

       K$20 Similarly, this fixes the row and allows the column to vary.

       These conventions also hold on defined ranges.  Range references vary
       when formulas containing them are copied.  If the range is defined
       with fixed variable references, the references do not change.

       fixed
            To make a variable not change automatically when a cell moves,
            put the word fixed in front of the reference, for example: B1 *
            fixed C3.

     Numeric Expressions
       Numeric expressions used with the ``='' and e commands have a fairly
       conventional syntax.  Terms may be constants, variable names,
       parenthesized expressions, and negated terms.  Ranges may be operated
       upon with range functions such as sum (@sum()) and average (@avg()).
       Terms may be combined using binary operators.

       -e   Negation.

       e+e  Addition.

       e-e  Subtraction.

       e*e  Multiplication.

       e/e  Division.

       e1%e2
            e1 mod e2.

       e^e  Exponentiation.

       e<e
       e<=e
       e=e
       e!=e



                                    - 12  -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       e>=e
       e>e  Relationals: true (1) if and only if the indicated relation
            holds, else false (0).  Note that ``<='', ``!='', and ``>='' are
            converted to their ``~()'' equivalents.

       ~e   Boolean operator NOT.

       e&e  Boolean operator AND.

       e|e  Boolean operator OR.

       e?e:e
            Conditional: If the first expression is true then the value of
            the second is returned, otherwise the value of the third.

       Operator precedence from highest to lowest is:

            -, ~
            ^
            *, /
            +, -
            <, <=, =, !=, >=, >
            &
            |
            ?:

     Built-in Range Functions
       These functions return numeric values.

       @sum(r)           Sum all valid  (nonblank)  entries  in  the  region
 whose
                         two corners are defined by the two variable names
                         (e.g.  c5:e14) or the range name specified.

       @prod(r)          Multiply together all valid (nonblank) entries in
                         the specified region.

       @avg(r)           Average all valid (nonblank) entries in the
                         specified region.

       @max(r)           Return the maximum value in the specified region.
                         See also the multi argument version of @max below.

       @min(r)           Return the minimum value in the specified region.
                         See also the multi argument version of @min below.

       @stddev(r)        Return the sample standard deviation of  the  cells
 in
                         the specified region.

       @lookup(e,r)
       @lookup(se,r)     Evaluates the expression then searches through the
                         range r for a matching value.  The range should be



                                    - 13 -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




                         either a single row or a single column.  The
                         expression can be either a string expression or a
                         numeric expression.  If it is a numeric expression,
                         the range is searched for the the last value less
                         than or equal to e.  If the expression is a string
                         expression, the string portions of the cells in the
                         range are searched for an exact string match.  The
                         value returned is the numeric value from the next
                         row and the same column as the match, if the range
                         was a single row, or the value from the next column
                         and the same row as the match if the range was a
                         single column.

       @index(e,r)       Use the value of the expression e to index into the
                         range r.  The numeric value at that position is
                         returned. The value 1 selects the first item in the
                         range, 2 selects the second item, etc.  R should be
                         either a single row or a single column.

       @stindex(e,r)     Use the value of e to index into the range r.  The
                         string value at  that  position  is  returned.  The
 value
                         1 selects the first item in the  range,  2  selects
 the
                         second item, etc.  The range should be either a
                         single row or a single column.

     Built-in Numeric Functions
       All of these functions operate on floating  point  numbers  (doubles)
 and
       return numeric values.  Most of them are standard system functions
       more fully described in math(3).  The trig functions operate with
       angles in radians.

       @sqrt(e)          Return the square root of e.

       @exp(e)           Return the exponential function of e.

       @ln(e)            Return the natural logarithm of e.

       @log(e)           Return the base 10 logarithm of e.

       @floor(e)         Return the largest integer not greater than e.

       @ceil(e)          Return the smallest integer not less than e.

       @rnd(e)           Round e to the nearest integer.

       @fabs(e)          Return the absolute value of e.

       @pow(e1,e2)       Return e1 raised to the power of e2.

       @hypot(e1,e2)      Return   sqrt(e1*e1+e2*e2),   taking   precautions
 against
                         unwarranted overflows.



                                    - 14 -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       pi                A constant quite close to pi.

       @dtr(e)           Convert e in degrees to radians.

       @rtd(e)           Convert e in radians to degrees.

       @sin(e)
       @cos(e)
       @tan(e)           Return trigonometric functions of radian arguments.
                         The magnitude of the arguments are not checked to
                         assure meaningful results.

       @asin(e)          Return the arc sine of e  in  the  range  -pi/2  to
 pi/2.

       @acos(e)          Return the arc cosine of e in the range 0 to pi.

       @atan(e)          Return the arc tangent of e in the range -pi/2 to
                         pi/2.

       @atan2(e1,e2)     Returns the arc tangent of e1/e2 in the  range  -pi
 to
                         pi.

       @max(e1,e2,...)    Return  the  maximum  of   the   values   of   the
 expressions.
                         Two or more expressions may be specified.  See also
                         the range version of @max above.

       @min(e1,e2,...)    Return  the  minimum  of   the   values   of   the
 expressions.
                         Two or more expressions may be specified.  See also
                         the range version of @min above.

       @ston(se)         Convert string expression se to a numeric value.

       @eqs(se1,se2)     Return 1 if string  expression  se1  has  the  same
 value
                         as string expression se2, 0 otherwise.

       @nval(se,e)       Return the numeric value  of  a  cell  selected  by
 name.
                         String expression se must evaluate to a column name
                         (``A''-``AE'') and e must evaluate to a row number
                         (0-199). If se or e is out of bounds, or the cell
                         has no numeric value, the result is 0.  You can use
                         this for simple table lookups.  Be sure the table
                         doesn't move unexpectedly!  See also @sval() below.

     String Expressions
       String expressions are made up of constant strings (characters
       surrounded by double quotation marks), variables (cell names, which
       refer to the cells's label strings or expressions), and string
       functions.  Note that string expressions are only allowed when
       entering a cell's label string, not its numeric part.  Also note that
       string expression results may be left or right flushed, according to
       the type of the cell's string label.



                                    - 15 -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       #    Concatenate strings.  For example, the string expression

                 A0 # "zy dog"

            displays the string ``the lazy dog'' in the cell if the value of
            A0's string is ``the la''.

     Built-in String Functions

       @substr(se,e1,e2) Extract and return from string expression se the
                         substring indexed by character number e1 through
                         character number e2 (defaults to the size of se if
                         beyond the end of it).  If e1 is less than 1 or
                         greater than e2, the result  is  the  null  string.
 For
                         example,

                              @substr ("Nice jacket", 4, 7)

                         returns the string ``e jac''.

       @fmt(se,e)        Convert a number to a string.  The argument se must
                         be a valid printf(3) format string.  e is converted
                         according to the standard rules.  For example, the
                         expression

                              @fmt ("**%6.3f**", 10.5)

                         yields the string ``**10.500**''.  e is  a  double,
 so
                         applicable formats are e, E, f, g, and G.  Try
                         ``%g'' as a starting point.

       @sval(se,e)       Return the string value of a cell selected by name.
                         String expression se must evaluate to a column name
                         (``A''-``AE'') and e must evaluate to a row number
                         (0-199). If se or e is out of bounds, or the cell
                         has no string value, the result is the null string.
                         You can use this for simple table lookups.  Be sure
                         the table doesn't move unexpectedly!

       @ext(se,e)        Call an external function (program or script).  The
                         purpose is to allow arbitrary functions on values,
                         e.g. table lookups and interpolations.  String
                         expression se is a command or command line to call
                         with popen(3).  The value of e is converted to a
                         string and appended to the command line as an
                         argument.  The result of @ext() is a string: the
                         first line printed to standard output by the
                         command.   The  command  should  emit  exactly  one
 output
                         line.  Additional output, or output to standard
                         error, messes up the screen.  @ext() returns a null
                         string  and  prints  an  appropriate   warning   if
 external



                                    - 16 -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




                         functions are disabled, se is null, or the attempt
                         to run the command fails.

                         External functions can be slow to run, and if
                         enabled are called at each screen update, so they
                         are disabled by default.  You can enable them with
                         ^T when you really want them called.

                         A simple example:

                              @ext ("echo", a1)

                         You can use @ston() to convert the @ext() result
                         back to a number.  For example:

                              @ston (@ext ("form.sc.ext", a9 + b9))

                         Note that you can built a command line (including
                         more argument values) from a string expression with
                         concatenation.  You can also "hide" the second
                         argument  by  ending  the   command   line   (first
 argument)
                         with `` #'' (shell comment).

     Built-in Financial Functions
       Financial functions compute the mortgage (or loan) payment, future
       value,  and  the  present  value  functions.   Each   accepts   three
 arguments,
       an amount, a rate  of  interest  (per  period),  and  the  number  of
 periods.
       These functions are the same as those commonly found in other
       spreadsheets and financial calculators

       @pmt(e1,e2,e3)    @pmt(60000,.01,360) computes the monthly payments
                         for a $60000 mortgage at 12% annual interest (.01
                         per month) for 30 years (360 months).

       @fv(e1,e2,e3)     @fv(100,.005,36) computes the future value  for  of
 36
                         monthly payments of $100 at 6% interest (.005 per
                         month).  It answers the question: "How much will I
                         have in 2 years if I deposit $100 per month in a
                         savings account paying 6% interest compounded
                         monthly?"

       @pv(e1,e2,e3)     @pv(1000,.015,36) computes the present value of  an
 a
                         ordinary annuity of 36 monthly payments of $1000 at
                         18% annual interest.  It answers the question: "How
                         much can I borrow at 18% for  30  years  if  I  pay
 $1000
                         per month?"

     Built-in Date and Time Functions
       Time for pname follows the system standard: the number of seconds
       since 1970.  All date and time functions except @date() return
       numbers, not strings.



                                    - 17 -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       @now              Return the current time encoded as the number of
                         seconds since December 31, 1969, midnight, GMT.

       The following functions take the time in seconds (e.g. from @now) as
       an argument and  return  the  specified  value.   The  functions  all
 convert
       from GMT to local time.

       @date(e)          Convert the time in seconds to a date string 24
                         characters long in the following form:

                              Sun Sep 16 01:03:52 1973

                         Note that you can  extract  parts  of  this  fixed-
 format
                         string with @substr().

       @year(e)          Return the year.  Valid years begin with 1970.  The
                         last legal year is system dependent.

       @month(e)         Return the month, encoded as 1 (January) to 12
                         (December).

       @day(e)           Return the day of the month, encoded as 1 to 31.

       @hour(e)          Return the number of hours since midnight, encoded
                         as 0 to 23.

       @minute(e)        Return the number of minutes since the last full
                         hour, encoded as 0 to 59.

       @second(e)        Return the number of seconds since the last full
                         minute, encoded as 0 to 59.

     Spreadsheet Update
       Re-evaluation of spreadsheet expressions is done by row or by column
       depending on the selected calculation order.  Evaluation is repeated
       up to iterations times for each update if necessary, so forward
       references usually work as expected.  See set above.  If stability is
       not reached after ten iterations, a warning is printed.  This is
       usually due to a long series of forward references, or to unstable
       cyclic references (for example, set A0's expression to ``A0+1'').

  SEE ALSO
       bc(1), dc(1), crypt(1), ppname(1)

  BUGS
       Top-to-bottom, left-to-right evaluation of expressions is silly.  A
       proper following of the dependency graph with (perhaps) recourse to
       relaxation should be implemented.

       Supports at most 200 rows and 40 columns.



                                    - 18  -        Formatted:   January  22,
 1998






  PNAME(1)
 PNAME(1)




       Editing is crude.  All you can do is backspace over and  retype  text
 to
       be altered.  There is no easy way to switch a leftstring to a
       rightstring or vice versa.  Of course, you can always write the
       spreadsheet to a file with Put, edit it by calling an editor on the
       file with ``!'', and read it back with Get -- if you are comfortable
       editing spreadsheet files.

       Only one previous value is saved from any call of @ext().  If it is
       used more than once in a spreadsheet and external functions are
       enabled and later disabled,  the  last  returned  value  pops  up  in
 several
       places.

       On some systems, if the cell cursor is in column 0 with topline
       enabled (so the current cell is  highlighted),  or  if  any  cell  in
 column
       0 is highlighted, the corresponding row  number  gets  displayed  and
 then
       blanked during a screen refresh.  This looks like a bug in curses.

       Many commands give no indication (a message or  beep)  if  they  have
 null
       effect.  Some should give confirmation of their action, but they
       don't.


































                                    - 19  -        Formatted:   January  22,
 1998