\documentstyle [11pt,titlepage]{article}
\topmargin 0in
\headheight 0in
\headsep 0in
\textheight 9in
\textwidth 6.375in
\oddsidemargin 0in
\evensidemargin 0in
\columnsep 0.125in
\columnseprule 0.5pt

\title{\bf Xspread Reference Manual}
\author{James Cornelius\\ Michael Frey\\ Dan Gruber\\ Fang Wang\\
        \\
        Manual Updated by Robert Parbs II}
\date{December 12, 1992}
%

%namelist generates a list with an item width of
% your choice; form: \begin{namelist}{widestitem}
\newcommand{\namelistlabel}[1]{\mbox{#1}\hfil}
\newenvironment{namelist}[1]{%
\begin{list}{}
  {
   \let\makelabel\namelistlabel
   \settowidth{\labelwidth}{#1}
   \setlength{\leftmargin}{1.1\labelwidth}
  }
}{%
\end{list}}

\newcommand{\twiddle}{$\tilde{ }$}  % tilde character, verbatim
\newcommand{\ctrl}{\^{ }}

\begin{document}
\maketitle
\newpage

\pagenumbering{roman}
\tableofcontents

\newpage

\section*{Introduction}
\pagenumbering{arabic}
\addcontentsline{toc}{section}{Introduction}

    Xspread is an electronic spreadsheet which runs under X Windows.
You must be using an X Windows terminal to be able to use this program.

    Xspread supports many standard spreadsheet features.  Among these are:
\begin{itemize}
\item{Cell entry and editing.}
\item{ Worksheet size:  702 columns by unlimited rows.}
\item{File reading and writing.}
\item{File encryption.}
\item{Absolute and relative cell references.}
\item{Numeric and label (i.e.character string) data in cells.}
\item{Left or right justification for labels.}
\item{Row and column insertion and deletion.}
\item{Hiding and unhiding of rows and columns.}
\item{Range names.}
\item{Manual or automatic recalculation.}
\item{Numeric operators ($+, -, *, /,$ \^{ }(exponentiation), \%(remaindering))}
\item{Relational operators ($<$, $<=$, $>$, $>=$, $=$, $!=$ (not equal))}
\item{Logical (or, Boolean) operators (\&(and), $|$ (or), \twiddle (not))}
\item{Function references.}
\item{References to external programs. These are called external functions.}
\item{Use of the mouse in pointing, and menu selecting.}
\end{itemize}

    The structure and operation of the spreadsheet is similar to but not 
identical with popular spreadsheets such as Lotus 1-2-3 and its clones.  Like 
other spreadsheets, the workspace is arranged into rows and columns of cells.  
Each cell can contain a number, a label (i.e. character string), or a formula 
which evaluates to a number or label.

    You can start the program with or without specifying a file to be read in.  
This file must be a saved worksheet.  If a file is specified on the command 
line, xspread attempts to locate and read in the file.  If it is successful, 
xspread starts with the file's contents in the workspace.  If it is 
unsuccessful or no file is specified on the command line, xspread starts with 
the workspace empty.

    For a tutorial of the spreadsheet program, type:

\verb| xspread doc/tutorial|

This directory also contains other spreadsheet templates which you may be 
interested in.

    To start xspread, type the program name, xspread, followed by any command 
qualifiers you want to use and then by the optional file name.  The full form 
of the command line is:

{\tt   xspread [-c] [-h] [-m] [-n] [-r] [-x] [-fn font] [filename]}

Here, -c, -h, -m, -n, -r, and -x represent the command line qualifiers and 
filename represents the file name of the optional worksheet file that you can 
start up with.

    Xspread accepts several qualifiers on the command line.  Here is a list of
the qualifiers and what each of them does:
\begin{description}
\item[-c]{ Recalculation is done in column order.  When xspread recalculates, it will
start at the top of the leftmost column, and recalculate the all the cells 
from top to bottom.  Then, it will recalculate the next column in the same 
order.  It will continue in this fashion until it has recalculated the 
rightmost column.\\
Xspread does NOT support natural order recalculation.\\
Default:  Row order recalculation.}

\item[-h]{  Display command line help.}

\item[-m]{  Start with manual recalculation.  With this option, the spreadsheet will
recalculate values only when the ``@'' command is used.  With automatic
recalculation, the spreadsheet recalculates values whenever a cell's 
contents change.\\
Default:  Automatic recalculation.}

\item[-n]{  Standard Data entry mode.  In this mode the user must specify if
     the data entry item is numeric or a label.  To single Xspread that the
     item is a number, the first character must be a "=".  To specify that 
     the data is a label, the first character is a quote (").}

  \begin{itemize}
  \item{If the first character is a numeral, a ``+'' sign, or a ``-'' sign,
	the cell contains a number.}
  \item{If the first character is a greater than sign ($>$), less than 
     sign ($<$), or double quote ("), the cell contains a label.}
  \item{If it is anything else, the character is a command to xspread.}
  \end{itemize}

With standard entry mode, you must use the first character to tell xspread
whether the cell is a number or a label.

  \begin{itemize}
  \item{If the cell is to be a number, the first character must be an ``=''
        sign.}
  \item{If the cell is to be a label, the first character must be a double
        quote ("), less than sign ($<$), or greater than sign ($>$).}
  \end{itemize}

Default:  Numeric entry mode.
 
\item[-r]{Recalculation is done in row order.  When xspread recalculates, 
  it will start at the left of the topmost row, and recalculate all the 
  cells from left to right.  Then, it will recalculate the next row in 
  the same order.  It will continue in this fashion until it has 
  recalculated the bottommost row.\\
  Xspread does NOT support natural order recalculation.\\
  Default:  Row order recalculation.}

\item[-x]{  Use encryption when reading and writing files.\\
    Default:  Do not use encryption.}

\item[-fn]{ Change the font size to whatever, now works!!!. ie. -fn 9x15.}
\end{description}

\newpage
\section*{Using the Worksheet}
\addcontentsline{toc}{section}{Using the Worksheet}

\subsection*{Worksheet Structure}
\addcontentsline{toc}{subsection}{Worksheet Structure}

    Xspread divides the spreadsheet window into four regions.  Xspread uses 
the top line for displaying the cell address the cursor is on, displaying cell 
values, and entering commands.  The second line displays messages from xspread 
or options for the slash (/) commands.  A third region is immediately under 
the second line and along the left edge of the window.  This region shows the 
column addresses and row addresses.  The fourth region is the worksheet work 
space which is currently displayed.

    Unlike other spreadsheets, xspread does not have a status line showing 
such information as the current time, operating mode, or amount of workspace 
left.

    The xspread electronic worksheet is organized in two dimensions:  vertical 
columns and horizontal rows.  The worksheet has 40 columns labeled alphabet
ically A through AN (A through Z and AA through AN).  There are 201 rows, 
numbered 0 through 200.

    Where a row meets a column, the intersection is called a cell.  Cells have 
addresses which consist of their column letter(s) and row number.  Examples of 
cell addresses are A1, E56, and AH187.  The upper left corner has cell address 
``A0''.  The cell address occupied by the cursor is shown on the top line.

    If a cell's numeric value is wider than the column width, the cell is 
filled with asterisks.  If the cell's label string is wider than the column 
width, the display of the label is truncated at the start of the next 
non-blank cell in the same row.

    The xspread worksheet window has two cursors.  The cell cursor highlights 
the current cell.  Xspread also displays a ``$<$'' sign at the right edge of the
current cell.  The character cursor shows up when you type a command on the 
top line.  Otherwise, it is obscured by the cell cursor.

    The user gives commands to xspread through the use of function keys and 
slash (/) commands.  Unlike other spreadsheets, xspread does NOT assume the 
existence of dedicated function keys on the terminal keyboard.  Therefore, you 
have to enter all xspread commands using either printable ASCII characters or 
control key combinations.  All commands entered using printable characters are 
case sensitive.

    This manual indicates control key combinations by showing a caret (\ctrl ) 
immediately prior to the control key's letter.  For example, control A is 
shown as \ctrl A.

\subsection*{Navigating the Worksheet}
\addcontentsline{toc}{subsection}{Navigating the Worksheet}

\subsubsection*{Moving the Cursor One Cell at a Time}

    Move the cursor around the worksheet by pressing these control keys.  The 
control key commands always are available even if the character cursor is on 
the top line.
\begin{quote}
    \ctrl B (back) and \ctrl F (forward) move the cursor left and right, respectively.\\
    \ctrl P (previous) and \ctrl N (next) move the cursor up and down, 
      respectively.\\

    The arrow keys also work.\\
    Left and right arrow keys move the cursor left and right.\\
    Up and down arrow keys move the cursor up and down.\\
    The mouse can also be used for navagation.  Pick the cell in the worksheet you
    would like to place the cursor and "click" with the left or center button.  The
    mouse cursor will go to that cell.  Please note that if you press the third
    button, you will enter the menu.\\
\end{quote}

    There are some additional cursor control commands available if the 
character cursor is not on the top line of the window.  These commands are 
intended to make xspread compatible with the vi editor commands.
\begin{quote}
    h (back) and l (forward) move the cursor left and right.\\
    k (up) and j (down) move the cursor up and down.\\
    \ctrl H and the spacebar move the cursor back and forward, respectively.\\
\end{quote}

\subsubsection*{Larger Cursor Moves}
\begin{description}
\item[ \^{ } (top) and \# (bottom)]{ move the cursor to the top row and bottom row of
the current column, respectively.}

    \item[0 (zero) (left edge) and \$ (right edge)]{ move the cursor to the left edge
(column A) and the right edge (the last column) of the worksheet, 
respectively.}

    \item[b]{ scans the cursor backwards (i.e. to the left and up) to the previous 
valid (non-blank) cell.}

    \item[w]{ scans the cursor forwards (i.e. to the right and down) to the next valid 
(non-blank) cell.}

    \item[\ctrl Ed]{ goes to the next non-blank cell in the indicated direction.  The 
character d must be replaced by one of the valid cursor direction indicators 
(i.e., \ctrl B, \ctrl F, \ctrl P, or \ctrl N).  When you execute this 
  command, if the cursor is on 
a blank cell, it goes in the indicated direction until it reaches the first 
non-blank cell.}
\end{description}

\subsubsection*{Moving to Specific Locations}

    g goes to a specific cell.  Xspread prompts for a cell address, range 
name, a string expression surrounded by quotes, of a number.  If you specify a 
cell address or a range name, xspread goes directly to that cell, or the 
starting (upper left) cell of the range.  If you specify a string expression 
surrounded by quotes, xspread will search for a cell containing that 
expression.  If you specify a number, xspread will search for a cell 
containing that number.

    Searches for either strings or numbers go forward from the current cell.  
When the search reaches the end of the worksheet, xspread starts the search at 
cell A0 and searches from there forward to the current cell.

\subsubsection*{Moving to Specific Locations via the mouse}

    The mouse can also be used for navagation.  Pick the cell in the worksheet you
would like to place the cursor and "click" with the left or center button.  The
mouse cursor will go to that cell.  Please note that if you press the third
button, you will enter the menu.

\subsection*{Cell Entry and Editing}
\addcontentsline{toc}{subsection}{Cell Entry and Editing}

    Cells can contain either numeric or string expressions or constants.

\subsubsection*{Label Entry}

    To enter a label, first enter one of these characters: >, <, or " (double
quote).  Entering a letter first does NOT start a label, since it is necessary 
to use letters to give commands to xspread.
\begin{quote}
    $<$ indicates that the label will be entered into the current cell flush 
left.\\
    $>$ and " indicate that the label will be entered into the current cell 
flush right.
\end{quote}

\subsubsection*{Numeric Entry}

    To enter a number, you have to know whether or not you are in quick 
numeric entry mode.\\
    If you are in standard mode, first use an = sign.  Xspread prompts you for 
the expression on the top line.  Enter the number or numeric expression.\\
    If you are in quick numeric entry mode, start the numeric expression with 
a digit (0-9), + sign, or - sign.  Then, finish entering the number or numeric 
expression.

\subsubsection*{Cell Editing}

\begin{description}
\item[E]{ edits the label that already exists in the current cell.  Xspread will 
display the current label on the top line with the character cursor at the end 
of the label.  You can then edit the label.}

\item[e]{ edits the numeric value associated with the current cell.  Xspread will 
display the current numeric expression on the top line with the character 
cursor at the end of the numeric expression.  You can then edit the numeric 
expression.}

\item[c]{ copies that last marked cell to the current cell.}

\item[m]{ marks a cell for later use by the copy command.}

\item[x]{ clears (erases) the current cell.  You can use any of the pull commands 
to retrieve cell contents that were previously deleted.}

\item[+]{ in standard mode, adds the value of its argument to the value of the 
current cell and stores the result in the current cell.  In quick numeric 
mode, + introduces a numeric expression or value.}

\item[-]{ in standard mode, subtracts the value of its argument from the value of 
the current cell and stores the result in the current cell.  In quick numeric 
mode, - introduces a numeric expression or value.}
\end{description}

\subsection*{Formulas, Cell Expressions, and Functions}
\addcontentsline{toc}{subsection}{Formulas, Cell Expressions, and Functions}

\subsubsection*{Formulas}

    Without formulas, an electronic spreadsheet would not be any better than 
its paper counterpart.  It is the ability to enter and recalculate formulas 
that gives an electronic spreadsheet its real power.  Formulas can link result 
cells to other cells in the spreadsheet.  These other cells can, in turn, 
reference still other cells so that a recalculation of the entire spreadsheet 
can have a cascade effect.  Through formulas, a single cell can affect cells 
throughout the entire worksheet.

    Formulas can reference cells either through the cell's address (e.g. K20) 
or through defined range names.  Both cell addresses and range names can be 
either relative, absolute, or a combination of the two.  Relative cell 
addresses and range names change when the cell's formula is copied to another 
position in the worksheet.  Absolute cell addresses and range names do not 
change when the cell's formula is copied to another position in the worksheet.

\subsubsection*{Cell References}

    The method of specifying absolute cell addresses follows the convention of 
Lotus 1-2-3.  Absolute references are preceded by a dollar sign (\$).  The
dollar sign can precede either the column reference, row reference, or both.  
Here are some examples:
\begin{namelist}{\$K\$20xx}
\item[K20]{This references cell K20.  Both the column and row references
change when the cell is copied.}

\item[\$K\$20]{This references cell K20.  Both the column reference and row
reference remain fixed when the cell is copied.}

\item[\$K20]{This references cell K20.  The column reference remains fixed but
the row reference changes when the cell is copied.}

\item[K\$20]{This references cell K20.  The column reference changes but the
row reference remains fixed when the cell is copied.}
\end{namelist}

    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.

\subsubsection*{Operators}

    Xspread supports a number of operators for use in formulas.  The numeric 
operators for formulas include:
\begin{tabbing}
XXX\=XXX\=\kill
 \> +   \> 	Addition\\
 \> -   \> 	Subtraction\\
 \> $*$ \> 	Multiplication\\
 \> /   \> 	Division\\
 \> \^{ } \>   	Exponentiation (raise to a power)\\
 \> \%   \> 	Modulus, or, Remaindering\\
 \> ()  \> 	Parentheses can be used to change the order of operations
\end{tabbing}

    You can use relational operators to compare two numeric expressions to see 
if they satisfy the specified relation.  The result is a logical value, either 
true or false.  The relational operators are:
\begin{tabbing}
XXX\=XXX\=\kill
\>    $=$   \> Equal to\\
\>   $!=$  \> Not equal to\\
\>     $>$   \> Greater than\\
\>    $>=$  \> Greater than or equal to\\
\>    $<$   \> Less than\\
\>    $<=$  \> Less than or equal to
\end{tabbing}

    You can use logical operators to affect compound logical expressions.  The 
logical operators are:
\begin{tabbing}
XXX\=XXX\=\kill
 \>   \twiddle \>  Logical NOT\\
 \>   \& \>  Logical AND\\
 \>   $|$  \> Logical OR\\
\end{tabbing}

    You can use the conditional operator to test for a condition and take 
action depending on whether that condition is true or false (i.e., perform an 
IF test).  This operator takes the place of the @IF function found in most 
other spreadsheets.  Xspread does not support an @IF function.  The 
conditional operator is:
\begin{description}
\item[e1?e2:e3]{Conditional operator.  If expression e1 is true, return the
value of expression e2, otherwise return the value of 
expression e3.}
\end{description}

\subsubsection*{Function References}

    Xspread supports a number of functions that make it easy to perform 
calculations of a specific nature.  Formulas can reference any of the 
functions defined in the Function Reference section.  You can use these 
function references just as you would any cell or range reference.  All 
functions begin with the ``@'' character.  CAUTION:  Since the ``@'' character by
itself is used as a command character (to recalculate the spreadsheet), you 
MUST precede the ``@'' character in a function reference with a ``+'' sign or ``-''
sign if a function reference is the first item in a formula.


\subsection*{Toggle Commands}
\addcontentsline{toc}{subsection}{Toggle Commands}

    Xspread has several optional settings which operate like toggle switches.  
Each switch has two settings.  The toggle commands change the settings of the 
selected switch to its opposite setting without forcing you to go through the 
slash (/) command tree to set or reset them.

    All of the toggle commands are of the form \ctrl To, where ``o'' 
represents a
letter that stands for the option that you want to toggle.  The settings of 
all toggle options are saved with the worksheet when it is written into a 
worksheet file.  The toggle options are:

\begin{description}
\item[{\bf a   Automatic / Manual Recalculation.}]{If automatic recalculation is set,
every change to the spreadsheet will cause the spreadsheet to be 
recalculated.  If manual recalculation is set, xspread does not 
recalculate the spreadsheet unless you explicitly issue a recalculation command
(@).}

\item[{\bf c   Current Cell Highlighting.}]{  If set, the current cell is highlighted.
If not set, the current cell looks just like any other cell in the 
worksheet.}

\item[{\bf e   External Function Execution.}]{If external functions are enabled,
xspread calls them whenever the screen is updated.  If external 
functions are disabled, any external functions that are referenced are 
not called during screen updates.  If external functions are 
referenced in the worksheet and they are disabled, xspread prints a 
warning each time that the screen is updated.  The result from @ext() 
is the value from the previous call, if any, or else a null string.}

\item[{\bf n   Quick Numeric Entry.}]{  If set, you can start numeric entry with any
digit, a plus sign, or a minus sign.  If not set, you must start 
numeric entry with an equals sign.}

\item[{\bf t   Top Line Display.}]{  If set, the top line of the worksheet window
displays the name and value of the current cell.  If not set, the top 
line is blank.}

\item[{\bf  x   Encryption.}]{  If set, worksheet files are encrypted when xspread saves
them using the /File Put command and xspread assumes that worksheets 
that it reads using the /File Get command are encrypted.  If not set, 
xspread does not encrypt files with /File Put nor does it decrypt 
files with /File Get.}

\item[{\bf \$   Dollar Prescale.}]{  If set, numeric amounts are automatically scaled by
.01 when you enter them into cells.  This allows users to avoid typing 
the decimal points in monetary amounts.  If not set, numeric amounts 
are not scaled.}
\end{description}

\subsection*{Miscellaneous Commands}
\addcontentsline{toc}{subsection}{Miscellaneous Commands}

    Xspread supports several miscellaneous commands.  These do such things as 
support various options, allow you to bail out of a command that you do not 
want to execute, and offer on-line help.  Here is the list:
\begin{description}
\item[{\bf \ctrl C  Exit xspread.}]{  All three of these commands exit the user from
       xspread.}

\item[{\bf  ESC, \ctrl G  Abort Command.}]{  Hitting the ESC (escape) key
    or \ctrl G are the bail out
    commands.  Either one of these will abort the current command and 
    return you to Ready mode.}

\item[{\bf ?   Help.}]{  This will bring up an index to on-line help.  The index will
display a list of topics together with the letter that allows you to 
select a particular topic.  The help facility is NOT context 
sensitive.}

\item[{\bf TAB Point Command.}]{  When the character cursor is on the top line, you can
use TAB to define a range by pointing, instead of by specifying cell 
addresses.  When you press TAB the first time, xspread enters Point 
mode.  You can then specify the range to be selected by using the 
cursor control keys.  The cell that you were in when you pressed TAB 
is one corner of the specified range.  During the point operation, the 
specified range at any time is highlighted.  Pressing TAB the second 
time exits point mode and makes the range selection final.}
\end{description}

Three commands redraw the screen:
\begin{description}
\item[{\bf \ctrl L  Simple Screen Redraw.}]{  This command redraws the screen, 
displaying the
values of expressions.}

\item[{\bf \ctrl R  Redraw Screen with Values Highlight.}]{  This redraw 
command
highlights any cells which are referenced by formulas or expressions 
but which do not contain formulas or expressions.  This screen redraw 
command is useful for showing those values which you need to provide 
or update.  With this command, xspread highlights all cells which 
contain constant numeric values.} 

\item[{\bf \ctrl X  Redraw Screen with Expressions Highlighted.}]{  This screen 
redraw
command highlights those cells which contain expressions.  Xspread 
shows all expressions as formulas, not their current values.  All 
expressions are displayed as left-justified text.  This command makes 
it easier to check expressions.}
\end{description}

Three commands display current cell information in the command line:
\begin{description}
\item[{\bf \ctrl A  Numeric Value.}]{  This command displays the numeric value of the current
cell in the command line.}

\item[{\bf \ctrl V  Cell Name.}]{  This command displays the name of the current cell in the
command line.}

\item[{\bf \ctrl W  Cell Expression.}]{  This command displays the expression attached to the
current cell, if any.  If there is no expression, this command returns 
``?''.}
\end{description}
\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section*{Alphabetical Command Reference}
\addcontentsline{toc}{section}{Alphabetical Command Reference}

\subsection*{/C \ \  Column/Row}
\addcontentsline{toc}{subsection}{Column/Row Commands}
        
\subsubsection*{What the /Column/Row commands do}
These commands perform various operations on entire columns or rows in 
the worksheet.

The Column/Row command provides the following options:
\begin{description}
\item[{\bf Insert}]{  Inserts a new row or column into the worksheet.
        Append  Insert a new row or column immediately following the source 
row or column with a copy of the contents of the source row or 
column.}
\item[{\bf Delete}]{  Deletes a row or column from the worksheet.}
\item[{\bf Pull}]{Reinsert (pull) deleted rows or columns back into the
worksheet.}
\item[{\bf Remove}]{  Remove expressions from the affected rows or columns, leaving
only the values of the expressions in the affected cells.}
\item[{\bf  Hide}]{ Hides a row or column on the worksheet.}
\item[{\bf Show }]{Unhides a row or column on the worksheet.}
\item[{\bf Format}]{  Specifies the numeric display format for a column.}
\end{description}

\subsubsection*{How to use the /Column/Row commands}
\begin{enumerate}
  \item{Place the cursor on a cell in the row or column you want to use
        the command on.}
  \item{Type /C.}
  \item{Choose one of the Column/Row commands.}
  \item{Choose whether to apply the command to a row or column.}
\end{enumerate}


\subsection*{/CA \ \  Column/Row Append}

\subsubsection*{What the command does}
This command inserts a new row or column which immediately follows the 
cursor position and copies the contents of the current row or column 
into the new inserted row or column.

\subsubsection*{How to use it}
\begin{enumerate}
\item{ Move the cursor to the cell in a row or column where you want the
new row or column to be inserted.  Rows are inserted below and 
columns to the right.}
\item{Type /CA.}
\item{Type R for Row or C for Column.}
\item{ Xspread inserts the row or column immediately below or to the
right of the cursor position.  It then copies the values of the 
cells in the current row or column into the newly inserted row or 
column.}
\end{enumerate}


\subsection*{ /CD \ \ Column/Row Delete}
        
\subsubsection*{What the command does}
This command deletes a row or column from the worksheet.  The 
remaining rows or columns are renumbered to close the space.  A new 
row or column is added at the bottom or right edge of the worksheet.

\subsubsection*{How to use the command}
\begin{enumerate}
\item{Move the cursor to the row or column you want to delete.}
\item{Type /CD.}
\item{Type R for row or C for column.}
\item{Press Enter.  The row or column at the current cursor position is
deleted.}
\end{enumerate}


\subsection*{/CF \ \ Column/Row Format}
        
\subsubsection*{What this command does}
This command sets column width and the numeric display format for a 
column.  There is no command to format a row.

\subsubsection*{How to use the command}
\begin{enumerate}
\item{Move the cursor to the column you want to format.}
\item{Type /CF.}
\item{Enter the column width.}
\item{Enter the number of digits to follow the decimal place.  Values
are rounded off to the least significant digit displayed.}
\end{enumerate}

\subsection*{/CH \ \  Column/Row Hide}

\subsubsection*{What this command does}
This command hides the current row or column.  This keeps it from 
being displayed.  However, it still remains in the worksheet.

\subsubsection*{How to use the command}
\begin{enumerate}
\item{Move the cursor to the row or column you want to format.}
\item{Type /CH.}
\item{Type R for row or C for column.}
\item{Press Enter.  The row or column at the current cursor position is
hidden.}
\end{enumerate}

\subsection*{/CI \ \ Column/Row Insert}

\subsubsection*{What this command does}
This command inserts a row or column into the worksheet at the current 
cursor position.  The new row appears immediately below the cursor and 
new columns immediately to the right.

\subsubsection*{How to use the command}
\begin{enumerate}
\item{Move the cursor to a cell in the row or column where you want the
new row or column to be inserted.  Rows are inserted below and 
columns to the right.}
\item{Type /CI.}
\item{Type R for Row or C for Column.}
\item{Xspread inserts the row or column immediately below or to the
right of the cursor position.}
\end{enumerate}


\subsection*{/CP \ \     Column/Row Pull}

\subsubsection*{What this command does}
This command reinserts (pulls) deleted information back into the 
worksheet at the current cursor location.  /CPR inserts enough rows to 
hold the last deleted set of cells.  /CPC inserts enough columns to 
hold the last deleted set of cells.  /CPM (Merge) does not insert rows 
or columns; it overwrites the cells beginning at the current cursor 
location.

\subsubsection*{How to use the command}
\begin{enumerate}
\item{Move the cursor to the position where you want the deleted
information to appear.}
\item{Type /CP.}
\item{Type R for row, C for column, or M for merge.}
\item{Press Enter.  Xspread inserts the deleted information in the
manner specified.}
\end{enumerate}


\subsection*{/CR \ \     Column/Row Remove}

\subsubsection*{What this command does}
This command removes formulas in the affected rows or columns and 
converts them to the values which were in the cells before the command 
was executed.

\subsubsection*{How to use the command}
\begin{enumerate}
\item{Move the cursor to a cell in the row or column you want to convert
	from formulas to formula values.}
\item{Type /CR.}
\item{Type R for row or C for column.}
\item{Press Enter.  Xspread converts the formulas to their values in the
	selected row or column.}
\end{enumerate}


\subsection*{/CS \ \     Column/Row Show}

\subsubsection*{What this command does}
This command shows (unhides) hidden rows or columns.  It is the 
reverse of the /CH (Column/Row Hide) command.

\subsubsection*{How to use the command}
\begin{enumerate}
\item{Type /CS.}
\item{Type R for row or C for column.}
\item{Enter a range of rows or columns to be revealed.  The default
action is the first range of rows or columns currently hidden.}
\item{Press Enter.  Xspread reveals the selected rows or columns.}
\end{enumerate}

\subsection*{/F  \ \     File}
\addcontentsline{toc}{subsection}{File Commands}
        
\subsubsection*{What the /File commands do}
These commands transfer information between the current worksheet and 
files on disk.  The /FP (Put), /FT (Table), and /FW (Write) commands 
can pipe their output to a program.  In order to use this feature, 
type ``$|$ progname'' to the prompt asking for a filename.

The File command provides the following options:
\begin{description}
\item[{\bf Get}]{Retrieves the specified files from the disk.}
\item[{\bf Put}]{Saves the current worksheet or a specified range to the disk
                in worksheet format.}
\item[{\bf Write}]{Prints the current worksheet or a specified range to a file in
                the format in which it is displayed on the screen.}
\item[{\bf Table}]{Prints the worksheet or a specified range in a format called
                table format so that table processors such as tbl, \LaTeX, or
                \TeX\  can use the data.}
\item[{\bf Merge}]{  Read in data from the named worksheet file and overwrite
                corresponding cells.}
\item[{\bf Combine}]{ Run macros or combine the data in the designated file into the
                current worksheet.}
\item[{\bf Directory}]{ Sets the current default directory for file
                operations.}
\end{description}

\subsubsection*{        How to use the /File commands}
\begin{enumerate}
\item{Type /F.}
\item{Choose one of the File commands.}
\item{Select the file you want to use.  The action you specify is
carried out on the selected file.}
\end{enumerate}
        
\subsection*{/FC \ \     File Combine}

\subsubsection*{What this command does}
This command imports the specified file.  If the file contains macros, 
it executes the macros in the file.  If the file contains numeric or 
character spreadsheet data, it overwrites the data in the current 
worksheet.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /FC.}
\item{Xspread displays this prompt:\\
\verb|>> merge [ "merge_file" ] "dir1/.../dirn/|   \\
        where /dir1.../dirn represent the directory path set using the
        File Directory command.  If no directory has been set, xspread
        displays this prompt:   \\
\verb|>> merge [ "merge_file" ] "(null)/| }

\item{Type in the name of the file that you want to combine into the
        worksheet.  If the directory is not the one that you want to use,
        or (null) is in the directory path, delete out the unwanted parts
        of the directory path and replace it with the path that you want.
        If you do not specify the path, xspread will use the current
        directory.}
\item{Xspread then reads the designated file into the worksheet.  If it
        is a macro file, xspread runs the macros.  If the file contains
        numeric or character data, this data overwrites all corresponding
        cells in the current worksheet.}
\end{enumerate}


\subsection*{/FD \ \     File Directory}

\subsubsection*{What this command does}
This command sets the default directory to use for the File Combine 
and File Merge commands.  It has no effect on any of the other /File 
commands.  Note to Lotus Users:  This is different from the behavior 
of Lotus 1-2-3 or its clones.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /FD.}
\item{Xspread displays this prompt:\\
          \verb|>> mdir [ "macro_directory" ] "| } 
\item{Enter the Unix pathname enclosed in double quotes.  Xspread
        automatically supplies the opening quote.  The pathname must be a
        valid Unix directory path expression.  After entering the path,
        press RETURN.}
\end{enumerate}
        
\subsection*{/FG \ \     File Get}

\subsubsection*{What this command does}
This command retrieves a worksheet file from the disk.  There are no 
restrictions on the file name; it can be any valid Unix file name.  
Xspread uses the current directory if no directory path is included in 
the file name.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /FG.}
\item{Xspread displays this prompt:\\
        \verb| >> get [ "source" ] "| }
\item{Enter the file name enclosed in double quotes.  Xspread
        automatically supplies the opening quote.  After specifying the
        file name, press RETURN.}
\end{enumerate}
        
\subsection*{/FM \ \     File Merge}

\subsubsection*{What this command does}
This command merges the specified file with the current worksheet.  
The specified file overwrites the data in the current worksheet.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /FM.}
\item{Xspread displays this prompt:\\
        \verb|>> merge [ "merge_file" ] "dir1/.../dirn/|\\
        where /dir1\ldots /dirn represent the directory path set using the
        File Directory command.  If no directory has been set, xspread
        displays this prompt:\\
        \verb|>> merge [ "merge_file" ] "(null)/| }
\item{Type in the name of the file that you want to merge into the
        worksheet.  If the directory is not the one that you want to use,
        or (null) is in the directory path, delete out the unwanted parts
        of the directory path and replace these parts with the path that
        you want.  If you do not specify the path, xspread will use the
        current directory. }
\item{Xspread then reads the designated file into the worksheet.  Data
        from the merged file overwrites all corresponding cells in the
        current worksheet.}
\end{enumerate}
        
\subsection*{/FP \ \     File Put}

\subsubsection*{What this command does}
This command saves the current worksheet or a specified range to the 
disk.  There are no restrictions on the file name; it can be any valid 
Unix file name.  Xspread uses the current directory if no directory 
path is included in the file name.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /FP.}
\item{Xspread displays this prompt:\\
        {\tt >> put [ "dest" range ] "} }
\item{Enter the name of the file enclosed in double quotes.  Xspread
        automatically supplies the opening quote.  Optionally, you can add
        a range specification after the closing quote.  After specifying
        the file name, press RETURN.  If you specify a range, xspread
        saves only the indicated range in the named file instead of the
        whole worksheet.}
\end{enumerate}
        
\subsection*{/FT \ \     File Table}

\subsubsection*{What this command does}
This command writes out the worksheet or a specified range into a file 
with delimiters suitable for processing by the tbl, \LaTeX, or
\TeX\  table processors.  The tblstyle option controls the delimiters used.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /FT.}
\item{Xspread displays this prompt:\\
        {\tt >> tbl [ "dest" range ] "} }
\item{Enter the name of the file enclosed in double quotes.  Xspread
        automatically supplies the opening quote.  Optionally, you can add
        a range specification after the closing quote.  After specifying
        the file name, press RETURN.  If you specify a range, xspread
        saves only the indicated range in the named file instead of the
        whole worksheet.}
\end{enumerate}
        
\subsection*{/FW \ \     File Write}

\subsubsection*{What this command does}
This command prints the worksheet or a specified range out to a file 
in the format that it appears on the screen.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /FW.}
\item{Xspread displays this prompt:\\
	{\tt >> write [ "dest" range ] "} }
\item{Enter the name of the file enclosed in double quotes.  Xspread
automatically supplies the opening quote.  Optionally, you can add 
a range specification after the closing quote.  After specifying 
the file name, press RETURN.  If you specify a range, xspread 
saves only the indicated range in the named file instead of the 
whole worksheet.}
\end{enumerate}


\subsection*{G  \ \     Graph}
\addcontentsline{toc}{subsection}{Graph Commands}

\subsubsection*{        What the /Graph commands do}
        These commands create different kinds of graphs from worksheet data.
        The Graph command provides the following options:
\begin{description}
\item[{\bf Type}]{    Selects the type of graph to create (i.e. line, bar, stacked
                bar, XY, or pie). }
\item[{\bf X}]{      Selects X axis data range.}
\item[{\bf A, B, C, D, E, F}]{Set up to six data ranges for the Y axis
                of a line, bar, stacked bar, or XY graph or for each slice of a pie
                graph.}
\item[{\bf Reset}]{   Clears (resets) all of the parameters for graphs.}
\item[{\bf View}]{    Displays the current graph on the screen.}
\item[{Options}]{ Allows you to specify legends, formats, titles, scales, and
                other special format options.}
\end{description}

\subsubsection*{How to use the /Graph commands}
\begin{enumerate}
\item{Type /G}
\item{Type T and select what type of graph you want to make.}
\item{Type X and specify the data range for the X axis.}
\item{Type A through F to specify up to 6 data ranges for the Y axis.}
\item{Type V to view the graph.}
\item{Type Q to exit the Graph menu and return to ready mode.}
\end{enumerate}

\subsection*{/G A-F  Graph A-F (Data Ranges)}

\subsubsection*{What this command does}
This allows you to designate up to 6 data ranges for plotting on the Y 
axis.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type a letter from A through F from the Graph menu.}
\item{Xspread will give you this prompt (where x represents one of the
        ranges A-F):\\
        {\tt Input column label for range x -- 2 character max.:} \\
        Respond with the column address of the range for the Y axis.}
\item{Xspread will give you this prompt (where x represents one of the
        ranges A-F):\\
        {\tt Input starting row number, 200 max., for range x:} \\
        Respond with the row number for the start of the range for the Y
        axis.}
\item{Xspread will give you this prompt (where x represents one of the
        ranges A-F):\\
        {\tt Input the ending row number >= nn for the range x:} \\
        Here, nn is the row number that you just specified in response to
        the previous prompt.\\
        Respond with the row number for the end of the range for the Y
        axis.}
\item{If you want to specify more ranges, use this command again with a
        different letter for the next range.}
\end{enumerate}

\subsection*{/GO \ \     Graph Options}

\subsubsection*{What these commands do}
These commands allow you to add enhancements to your graph.  The 
options remain in effect until you change them, exit the program, or 
load a different worksheet.

\begin{description}
\item[{\bf Legend  }]{Adds text describing each Y axis data range.}
\item[{\bf Format  }]{Defines how graph information will be presented.}
\item[{\bf Titles  }]{Adds titles at the top of the graph and
        along the X and Y axes.}
\item[{\bf Grid}]{    Adds horizontal and/or vertical lines to
        your graph.}
\item[{\bf Scale   }]{Sets the upper and lower limits for the graph and
        the number of X axis data points to skip.}
\end{description}
        
\subsubsection*{How to use these commands}
\begin{enumerate}
\item{Type O from the Graph Option menu.}
\item{Select a graph option from the menu.}
\end{enumerate}
        
\subsection*{/GOF\ \     Graph Options Format}

\subsubsection*{What these commands do}
These commands control the use of symbols and lines in a line or XY 
graph.  The default setting is for both symbols and lines.
\begin{description}
\item[{\bf Line    }]{Connects data points with a line.}
\item[{\bf Symbol  }]{Assigns a symbol for each data point in a range
        with a different symbol for each range (A-F).}
\item[{\bf Both    }]{Uses both lines and symbols.}
\item[{\bf Neither }]{Uses neither lines nor symbols but displays data
        labels if they are defined.}
\end{description}
        
\subsubsection*{How to use these commands}
\begin{enumerate}
\item{Type F from the Graph Options menu.}
\item{Select a single data range or the entire graph.  These are your
        choices:\\
        {\tt Graph \ \ A\ \  B\ \  C\ \  D\ \  E\ \  F}  }
\item{Choose a format for the specified range.  The choices are:\\
        {\tt Lines\ \  Symbols\ \  Both\ \  Neither} }
\item{Continue choosing ranges or formats as desired.}
\item{To exit the Graph Format menu, press the ESC key.}
\end{enumerate}

\subsection*{/GOG\ \     Graph Options Grid}

\subsubsection*{What this command does}
This command adds or clears grid lines from all graphs except the pie 
graph.  You can choose:

\begin{description}
\item[{\bf Horizontal  }]{Draw horizontal grid lines only.}
\item[{\bf Vertical    }]{Draw vertical grid lines only.}
\item[{\bf Both        }]{Draw both horizontal and vertical grid lines.}
\item[{\bf Clear       }]{Do not draw any grid lines.}
\end{description}

The default setting is no grid lines (clear).

\subsubsection*{How to use the commands}
\begin{enumerate}
\item{Type G from the Graph Options menu.}
\item{Set the grid option you want.}
\item{Xspread returns you to the Graph Options menu.}
\end{enumerate}

When you display the graph, it will have the grid lines that you specified.

\subsection*{/GOL\ \     Graph Options Legend}

\subsubsection*{What this command does}
This command displays descriptive text as a legend for each Y axis 
data range.

\subsubsection*{How to use the command}
\begin{enumerate}
\item{Type L from the Graph Options menu.}
\item{Specify the data range (A-F) to be identified with a legend.  This
prompt is displayed:\\
{\tt Enter the legend for x :}\\
where x is one of ``A'', ``B'', ``C'', ``D'', ``E'', or ``F''.}
\item{Type the legend you want to identify the range with and then press
RETURN.  You can use up to 39 characters.}
\item{Xspread then returns you to the Graph Options Legend menu.  To
exit the Graph Options Legend menu, press the ESC key.\\
        If you want to create more than one legend, select another menu item.
When you display the graph, it will have the legend that you 
specified.\\
CAUTION:  When you select a legend data range, xspread does NOT retain 
any previously defined legend for that data range.  Instead, xspread 
erases any previously defined legend.}
\end{enumerate}

\subsection*{/GOS\ \     Graph Options Scale}

\subsubsection*{What these commands do}
These commands automatically set the scales on the X and Y axes, or 
let you set them manually.  (Scaling does not apply to pie graphs.)  
They also let you set the ``skip factor'' for the X axis labels.

If you select automatic scaling, the graph is adjusted to include all 
points in each data range.  If you select manual scaling, you specify 
the upper and lower limits for the axis.

You can also set the skip factor for the X axis labels.  The skip 
factor directs xspread to use only every nth value in the X data range 
as labels on the X axis.

\begin{description}
\item[{\bf X Axis}]{  Selects the options for scaling data along the X axis.}
\item[{\bf Y Axis}]{  Selects the options for scaling data along the Y axis.}
\item[{\bf Skip}]  {Select the skip interval for data labels on the X axis.}
\end{description}

\subsubsection*{How to use these commands}
\begin{enumerate}
\item{Type S from the Graph Options menu.}
\item{Select the desired scaling option.}
\item{To exit from this menu or any submenu, hit the ESC key.}
\end{enumerate}

\subsection*{/GOSS\ \    Graph Options Scale Skip}

\subsubsection*{What this command does}
This command lets you set the skip factor for displaying X range 
labels or values along the X axis of the graph.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type S from the Graph Options Scale menu.}
\item{Type the desired skip factor and press RETURN.}
\end{enumerate}

\subsection*{/GOSX\ \    Graph Options Scale X-axis}
\subsection*{/GOSY\ \    Graph Options Scale Y-axis}

\subsubsection*{What these commands do}
These commands scale the X and Y axes.  You can specify whether the 
ranges which are displayed are automatic (i.e. controlled by xspread) 
or manual (i.e. you decide the low and high limits for the axis 
displays).  If you select manual scaling, you can also specify the 
lower and upper limits that you can display along the X axis (in XY 
graphs) and along the Y axis (in all graphs except pie graphs).

These commands are independent of each other.  You can have automatic 
scaling on one axis and manual scaling on the other if you so choose.

Here are the options:
\begin{description}
\item[{\bf Automatic}]{Specifies that scaling will be automatically
        controlled by xspread.  This is the default option.}
\item[{\bf Manual}]{Specifies that scaling will be controlled by the
        user.}
\item[{\bf Lower }]{Specifies the lower limit for manual scaling.}
\item[{\bf Upper }]{Specifies the upper limit for manual scaling.}
\end{description}

\subsubsection*{How to use these commands}
\begin{enumerate}
\item{Type X or Y from the Graph Options Scale menu.}
\item{Select and complete the entries for an item.}
\end{enumerate}

\subsection*{/GOSXA\ \   Graph Options Scale X-axis Automatic}
\subsection*{/GOSYA\ \   Graph Options Scale Y-axis Automatic}

\subsubsection*{What these commands do}
These options specify that xspread controls the scaling along the 
respective axis.  Automatic scaling is the default.

\subsubsection*{How to use these commands}
Type A from the /GOSX or /GOSY menus.

\subsection*{/GOSXL\ \   Graph Options Scale X-axis Lower}
\subsection*{/GOSYL\ \   Graph Options Scale Y-axis Lower}

\subsubsection*{What these commands do}
These commands set the lower limit along the X axis or Y axis when 
manual scaling is in use.

\subsubsection*{How to use these commands}
\begin{enumerate}
\item{Type L from the /GOSX or /GOSY menus.}
\item{Type the lower limit and press RETURN.}
\end{enumerate}
 
\subsection*{/GOSXM\ \   Graph Options Scale X-axis Manual}
\subsection*{/GOSYM\ \   Graph Options Scale Y-axis Manual}

\subsubsection*{What these commands do}
These options specify that you control the scaling along the 
respective axis.  Xspread will use the values in the Lower and Upper 
limit settings.

\subsubsection*{How to use these commands}
Type M from the /GOSX or /GOSY menus.

\subsection*{/GOSXU\ \   Graph Options Scale X-axis Upper}
\subsection*{/GOSYU\ \   Graph Options Scale Y-axis Upper}

\subsubsection*{What these commands do}
These commands set the upper limit along the X axis or Y axis when 
manual scaling is in use.

\subsubsection*{How to use these commands}
\begin{enumerate}
\item{Type U from the /GOSX or /GOSY menus.}
\item{Type the upper limit and press RETURN.}
\end{enumerate}
 
\subsection*{/GOT\ \     Graph Options Titles}

\subsubsection*{What this command does}
This command lets you define titles for the X and Y axes and for the 
top of the graph.
\begin{description}
\item[{\bf First   }]{Places a centered title at the top of the graph.}
\item[{\bf Second  }]{Places a centered title under the first title line.}
\item[{\bf X       }]{Places a label below the horizontal (X) axis.}
\item[{\bf Y       }]{Puts a label beside the vertical (Y) axis.}
\end{description}

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type T from the Graph Options menu.}
\item{Specify the position of the title.  This prompt is displayed:\\
        {\tt Enter xxxxx title :}\\
        where xxxxx is one of ``First'', ``Second'', ``X'', or ``Y''.}
\item{Type the title you want to use and then press RETURN.  You can use
        up to 39 characters.}
\item{Xspread returns you to the Graph Options Titles menu.  To exit the
        Graph Options Titles menu, press the ESC key.\\
        If you want to create more than one title, select another menu item.
        When you display the graph, it will have the titles that you
        specified.\\
        CAUTION:  When you select a title position, xspread does NOT retain
        any previously defined title for that position.  Instead, xspread
        erases any previously defined title.}
\end{enumerate}
            
\subsection*{/GR \ \     Graph Reset}

\subsubsection*{What this command does}
This command resets (clears) graph parameters.

\subsubsection*{How to use the command}
\begin{enumerate}
\item{Type R from the Graph menu.  Xspread displays this submenu: \\
  {\tt Graph\ \   X \ \  A \ \  B \ \  C\ \   D\ \   E\ \   F} \\
  \begin{description}
  \item[Graph]{Resets all graph parameters.}
  \item[X-F]{Resets parameters for a specified range of values.}
  \end{description} }
\item{Select an option from the submenu. Xspread removes the parameters
        without confirmation.}
\item{To exit the Graph Reset menu, press the ESC key.}
\end{enumerate}
        
\subsection*{/GT \ \     Graph Type}

\subsubsection*{What this command does}
This command selects the type of graph to be created.
\begin{description}
\item[{\bf Line}]{Shows the data for each range as coordinates connected
        by lines.  Usually this type of graph plots changes over
        time.}
\item[{\bf Bar}]{Shows the value of the data as vertical bars.
        Usually this type of graph compares relationships of different values.}
\item[{\bf XY  }]{Displays the Y values plotted versus a series of X
        values. It is usually used to plot the results of an equation.}
\item[{\bf Stacked-Bar}]{ Shows the values of data as stacked vertical bars.}
\item[{\bf Pie}]{Displays each data value as a segment of a circle. Only one
        data range can be displayed per pie graph.}
\end{description}
        
\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type T from the Graph menu.  Xspread displays this submenu:\\
        {\tt Line \ \   Bar \ \    XY \ \     Stacked-bar \ \    Pie}}
\item{Select the graph type you want to use.}
\end{enumerate}
        
\subsection*{/GV \ \     Graph View}

\subsubsection*{What this command does}
This command displays the current graph.

\subsubsection*{How to use this command}
Type V from the Graph menu.  Xspread displays the graph in a separate window on
the X Windows terminal.  Press any key or mouse button (with the mouse pointer
in the graph window) to return to the Graph menu.

\subsection*{/GX\ \      Graph X}

\subsubsection*{What this command does}
This command sets the range of cell labels for the horizontal axis for 
line, bar, and stacked bar graphs, or for each slice of a pie graph.  
Numbers and formulas can also be used as labels.

For XY graphs, it sets the data range.  Ranges comprising blocks of 
several rows and columns are plotted columnwise.

\subsubsection*{How to use it}
\begin{enumerate}
\item{Type X from the Graph menu.}
\item{Xspread will give you this prompt:\\
        {\tt Input column label for range X -- 2 character max.:} \\
        Respond with the column address of the range for the X axis.}
\item{Xspread will give you this prompt:\\
        {\tt Input starting row number, 200 max., for range X:} \\
        Respond with the row number for the start of the range for the X
        axis.}
\item{Xspread will give you this prompt:\\
        {\tt Input the ending row number >= nn for the range X:}\\
        Here, nn is the row number that you just specified in response to
        the previous prompt.\\
        Respond with the row number for the end of the range for the X
        axis.}
\end{enumerate}

\subsection*{/M \ \      Matrix}
\addcontentsline{toc}{subsection}{Matrix Commands}

\subsubsection*{What the /Matrix commands do}
Each command does a particular function with a matrix.

\begin{description}
\item[{\bf Transpose}]{Transposition of a Matrix.}
\item[{\bf Addition}]{Addition of two Matrixs.}
\item[{\bf Subtraction}]{Subtraction of two Matrixs.}
\item[{\bf Multiplication}]{Multiplication of two Matrixs.}
\item[{\bf Inversion}]{Inversion of a Matrix.}
\end{description}

\subsubsection*{How to use the /Matrix commands}
\begin{enumerate}
\item{Type /M.}
\item{Choose the desired option.}
\item{Set the option to the desired function.}
\item{Xspread performs the function and pops out of the menu.}
\end{enumerate}

\subsection*{/MT \      Matrix Transpose}

\subsubsection*{What this command does}
This function performs the Transposition of a matrix.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /MT.}
\item{Xspread asks the user for a specified cell range to transpose.  Enter in
      the distination range followed by a space and the source range.}
\end{enumerate}

\subsection*{/MA \      Matrix Addition}

\subsubsection*{What this command does}
This function performs the Addition of two matrixs.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /MA.}
\item{Xspread asks the user to specify the range of the first matrix.  Press <return>
      and then enter in the second matrix.  Xspread then asks for a destination range
      to place the result.}
\end{enumerate}

\subsection*{/MS \      Matrix Subtraction}

\subsubsection*{What this command does}
This function performs the Subtraction of two matrixs.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /MS.}
\item{Xspread asks the user to specify the range of the first matrix.  Press <return>
      and then enter in the second matrix.  Xspread then asks for a destination range
      to place the result.}
\end{enumerate}

\subsection*{/MM \      Matrix Multiplication}

\subsubsection*{What this command does}
This function performs the Multiplication of two matrixs.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /MM.}
\item{Xspread asks the user to specify the range of the first matrix.  Press <return>
      and then enter in the second matrix.  Xspread then asks for a destination range
      to place the result.}
\end{enumerate}

\subsection*{/MI \      Matrix Inversion}

\subsubsection*{What this command does}
This function performs the Inversion of a matrix.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Xspread asks the user for a specified cell range to invert.  Enter in
      the distination range followed by a space and the source range.}
\item{Xspread asks }
\end{enumerate}

\subsection*{/O \ \      Option}
\addcontentsline{toc}{subsection}{Option Commands}
        
\subsubsection*{What the /Option commands do}
These commands set various worksheet options.

\begin{description}
\item[{\bf Auto}]{Sets the recalculation mode to automatic or manual
        recalculation.}
\item[{\bf Numeric }]{Sets the cell entry mode to quick or standard numeric
input.}
\item[{\bf Top     }]{Shows or hides the top line display on the screen.}
\item[{\bf Cell    }]{Shows or hides the highlighting of the current cell.}
\item[{\bf Encrypt }]{Selects whether the writing of worksheet files and list
        files  should be encrypted.}
\item[{\bf PreScale }]{Selects whether numeric entries should be automatically
         scaled by .01 when entered.}
\item[{\bf Ext     }]{Selects whether external functions are enabled.}
\item[{\bf Set     }]{Allows the setting of other options, i.e. recalculation
        order,  the number of recalculation iterations, and the table format for the
        /FileTable command.}
\end{description}

\subsubsection*{How to use the /Option commands}
\begin{enumerate}
\item{Type /O.}
\item{Choose the desired option.}
\item{Set the option to the desired setting.}
\item{Xspread sets the option to the desired setting and returns to}
        ready mode.
\end{enumerate}
        
\subsection*{/OA\ \      Option Auto}

\subsubsection*{What this command does}
This command sets the recalculation mode to automatic or manual 
recalculation.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /OA.}
\item{Xspread toggles the recalculation mode.  If the recalculation mode
        was previously automatic recalculation, it is set to manual
        recalculation.  If the recalculation mode was previously manual
        recalculation, it is set to automatic recalculation.}
\end{enumerate}

        
\subsection*{/OC\ \      Option Cell}

\subsubsection*{What this command does}
This command shows or hides the highlighting of the current cell.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /OC.}
\item{Xspread toggles the cell highlight mode.  If the cell highlight
        mode was previously enabled, it is disabled.  If the cell
        highlight mode was previously disabled, it is enabled.}
\end{enumerate}
        
\subsection*{/OE \ \     Option Encrypt}

\subsubsection*{What this command does}
This command selects whether the reading and writing of worksheet 
files should be encrypted.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /OE.}
\item{Xspread toggles the encryption mode.  If encryption was previously
        enabled, it is disabled.  If encryption was previously disabled,
        it is enabled.}
\end{enumerate}
        
\subsection*{/O \ \      Option Ext-func}

\subsubsection*{What this command does}
This command selects whether external functions are enabled or 
disabled.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /O.  Do NOT type the E.}
\item{Use the cursor control keys to move the cursor over to the
        Ext-func command.  Then press RETURN.}
\item{Xspread toggles the external function mode.  If external functions
        were previously enabled, they are disabled.  If external functions
        were previously disabled, they are enabled.}
\end{enumerate}
        
\subsection*{/ON\ \      Option Numeric}

\subsubsection*{What this command does}
This command sets the cell entry mode to either quick or standard 
numeric input.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /ON.}
\item{Xspread toggles the cell entry numeric entry mode.  If the cell
        entry mode was previously quick numeric entry, it is set to
        standard numeric entry.  If the cell entry mode was previously
        standard numeric entry, it is set to quick numeric entry.}
\end{enumerate}
        
\subsection*{/OP \ \     Option PreScale}

\subsubsection*{What this command does}
This command selects whether numeric entries should be automatically 
scaled by .01 when entered.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /OP.}
\item{Xspread toggles the numeric prescale mode.  If the numeric
        prescale mode was previously standard, it is set to .01 prescale.
        If the numeric prescale mode was previously .01 prescale, it is
        set to standard.}
\end{enumerate}
        
\subsection*{/OS\ \      Option Set}

\subsubsection*{What these commands do}
These commands allow the user to set other options:  the  recalc
ulation order, the number of recalculation iterations, and the table 
format for the /FileTable command.

Xspread does not support natural order recalculation.

The Options Set command provides the following options:
\begin{description}
\item[{\bf byrows}]{Recalculate formulas first by row and then by column.}
\item[{\bf bycols  }]{Recalculate formulas first by column and then by row.}
\item[{\bf iterations=n}]{Set the number of times the worksheet recalculates.}
\item[{\bf tblstyle=xxx}]{Determine the type of delimiter used when the
        worksheet exports to table format.  Valid values for
        tblstyle are:
  \begin{namelist}{latex--}
  \item[{\bf 0 }]{Colons (:) are used to separate fields, with no tbl control
    lines.}
  \item[{\bf tbl }]{Colons (:) are used to separate fields, with
    tbl control lines.}
  \item[{\bf latex }]{Tables are formatted to meet \LaTeX\ 
    requirements.}
  \item[{\bf tex }]{Tables are formatted to meet \TeX\  requirements.}
  \end{namelist} }
\end{description}

\subsubsection*{How to use these commands}
\begin{enumerate}
\item{Type /OS.}
\item{Xspread displays the following prompt on the top two rows of the
        screen:\\
        \begin{verbatim}
        >> set 
        Options:  byrows, bycols, iterations=n, tblstyle=(0|tbl|latex|tex)
        \end{verbatim} }
\item{Enter the option that you want to set, then press RETURN.  Xspread
        sets the option to the specified condition.  Note that with the
        iterations and tblstyle options, there can be no intervening
        spaces.}
\end{enumerate}
        
\subsection*{/OT\ \      Option Top}

\subsubsection*{What this command does}
This command shows or hides the top line display on the screen.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /OT.}
\item{Xspread toggles the top line display mode.  If the top line
        display was previously off, it is turned on.  If the top line
        display was previously on, it is turned off.}
\end{enumerate}
        
\subsection*{/Q\ \       Quit}

\subsubsection*{What the /Quit command does}
The Quit command ends the current worksheet session and returns to 
Unix.  If changes have been made since the last time the worksheet was 
saved, xspread will ask the user whether the most recent changes 
should be saved prior to exiting.

\subsubsection*{How to use the /Quit command}
\begin{enumerate}
\item{Type /Q.}
\item{If the worksheet has been changed, xspread displays the prompt:\\
        {\tt File "filename" is modified, save before exiting?}\\
        If you type ``Y,'' xspread displays the message:\\
        {\tt  File "filename" written}\\
            If you type ``N'', xspread displays nothing.\\
            If the worksheet has not been changed, xspread displays nothing.}
\item{If the worksheet has not been changed, or you answered N in the previous
        step, xspread returns to Unix.  The command interpreter (shell) prompt
        appears at the bottom of the screen.}
\end{enumerate}

\subsection*{R \ \      Range}
\addcontentsline{toc}{subsection}{Range Commands}
        
\subsubsection*{What the /Range commands do}
The Range commands affect a single cell or rectangular group of 
adjacent cells.
\begin{description}
\item[{\bf Erase   }]{Erases cell contents.}
\item[{\bf Value   }]{Convert the values of expressions to their result.}
\item[{\bf Copy    }]{Copies the contents of the source range into the
        destination range.}
\item[{\bf Fill    }]{Fills all cells in a range with a certain value.}
\item[{\bf Define  }]{Assign and use a name for a group of cells.}
\item[{\bf Show    }]{List the currently defined range names.}
\item[{\bf Undefine }]{Delete a previously defined range name from the list of
        defined range names.}
\end{description}

\subsubsection*{How to use the /Range commands}
\begin{enumerate}
\item{Type /R.}
\item{Specify the command you want to use.}
\item{Specify the range.  You must type the cell addresses of two
        opposite corners, separated by a colon(:).}
\end{enumerate}
        
\subsection*{/RC\ \      Range Copy}

\subsubsection*{What this command does}
This command the values and formulas in the source range into the 
destination range.  Relative cell references are adjusted for the new 
position.  Absolute cell references are not.

CAUTION:  The Range Copy command overwrites the contents of the 
destination cells.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /RC.}
\item{Xspread displays this prompt:\\
        \verb|>> copy [dest_range src_range]|  }
\item{Specify the destination range first and the source range second.
        Note that this is the opposite order from Lotus 1-2-3 and other
        commercial spreadsheets.}
\end{enumerate}
        
\subsection*{/RD\ \      Range Define}

\subsubsection*{What this command does}
This command allows you to specify a name for a cell or range of 
cells.  Later, you can use this name instead of cell references in 
formulas.

Range names are case sensitive.  For example, Original and ORIGINAL 
are two different range names and can refer to two different ranges.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /RD.}
\item{Xspread displays this prompt:\\
        {\tt >> define [string range] "}   }
\item{Enter the range name enclosed in double quotes.  Follow this with
        the specification of the range that you want to name.}
\end{enumerate}
        
\subsection*{/RE\ \      Range Erase}

\subsubsection*{What this command does}
This command erases the contents of cells in a specified range.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /RE.}
\item{Xspread displays this prompt:\\
        {\tt  >> erase [range]}  }
\item{Specify the range.  Xspread erases the cells in the range.}
\end{enumerate}

\subsection*{/RF \ \     Range Fill}

\subsubsection*{What this command does}
This command fills a specified range of cells with a designated value.  
All of the cells can have the same value or each succeeding cell can 
differ from the previous one by a stated increment.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /RF.}
\item{Xspread displays this prompt:\\
        {\tt >> fill [range start inc]}  }
\item{Specify, in order, the range to be filled, the value to use in the
        first cell, and the amount by which the next cell should differ
        from the previous cell.  If all cells are to have the same value,
        the increment should be zero (0).}
\end{enumerate}
        
\subsection*{/RS\ \      Range Show}

\subsubsection*{What this command does}
This command shows the user all of the named ranges.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /RS.}
\item{Xspread displays a list of the currently defined range names and
        the ranges that are assigned to those names.  This display appears
        at the bottom of the screen.  After all of the range names are
        displayed, xspread displays this prompt: \\
        {\tt Press RETURN to continue} }
\item{When you are done looking at the list of range names, press
        RETURN.  Xspread will repaint the current worksheet display.}
\end{enumerate}
        
\subsection*{/RU\ \      Range Undefine}

\subsubsection*{What this command does}
This command deletes a range name.  It does not delete the cells in 
the range; it only removes the name of the range.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /RU.}
\item{Specify the name of the range to be deleted.  Xspread deletes the
        range name.}
\end{enumerate}
        
\subsection*{/RV\ \      Range Values}

\subsubsection*{What this command does}
This command converts the results of formulas to the values that they 
produce at the time that the command is executed.

\subsubsection*{How to use this command}
\begin{enumerate}
\item{Type /RV.}
\item{Xspread displays this prompt:\\
        {\tt >> value [range]} }
        \item{Specify the range.  Xspread then substitutes the values of the
        formulas for the formulas.  There will be no apparent change in
        the screen display.}
\end{enumerate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\section*{Function Reference}
\addcontentsline{toc}{section}{Function Reference}

    Functions are built-in formulas which can be used by themselves or as part 
of formulas in xspread.  They begin with an @ symbol which is followed by the 
function name.  Any necessary arguments are enclosed in parentheses, 
immediately following the function name.  The general form of a function 
reference is:\\
@FUNCTION(argument1,argument2,\ldots ,argumentN)

\subsection*{Argument types}
\addcontentsline{toc}{subsection}{Argument types}

\begin{namelist}{positionxx}
\item[{\bf date}]{Unix style serial day number.  This is the number of
                  seconds since midnight on January 1, 1970.}
\item[{\bf format}]{A character string containing a valid C language
                   format specification for converting character
                   expressions to numeric and vice versa.}
\item[{\bf i}]{The interest rate per period on a loan or investment,
                expressed as a decimal fraction.}
\item[{\bf n }]{Any integer.}
\item[{\bf pmt }]{The payment made at the end of each term of a loan or
                investment.}
\item[{\bf position }]{An integer value specifying the position inside a
                        character string.}
\item[{\bf pv  }]{The present value of a series of payments.  The original
                amount of a loan or investment.}
\item[{\bf range }]{A range name or cell address.}
\item[{\bf term }]{The number of payment period over the life of a loan or
                investment.}
\item[{\bf string  }]{A character string enclosed in quotes or the cell address
                of a label.}
\item[{\bf x,y}]{Double precision floating point numbers or cells containing
such numbers.}
\end{namelist}

\subsection*{Functions by type}
\addcontentsline{toc}{subsection}{Functions by type}

\begin{tabbing}
XXXXXXXXXXXXXXX\=XXXXXXXXXXXX\=XXXXXXXXXXXXX\= \kill
Date and Time Functions\\
@DATE             \>@HOUR             \>@MONTH            \>@SECOND\\
@DAY              \>@MINUTE           \>@NOW              \>@YEAR\\
\vspace{0.1in}
Financial Functions\\
@FV              \>@PMT              \>@PV\\
\vspace{0.1in}

Lookup Functions\\
  @INDEX          \>@LOOKUP           \>@STINDEX\\

\vspace{0.1in}
Mathematical Functions\\
  @CEIL           \>@HYPOT            \>@MIN              \>@RND\\
  @EXP            \>@LN              \> @NVAL             \>@SQRT\\
  @FABS           \>@LOG             \> @PI\\
  @FLOOR          \>@MAX             \> @POW\\

\vspace{0.1in}
Special Functions\\
 @EXT\\

\vspace{0.1in}
Statistical Functions\\
  @AVG           \> @MAX             \> @PROD             \>@SUM\\
  @COUNT         \> @MIN             \> @STDDEV\\

\vspace{0.1in}
String Functions\\
  @EQS            \>@STON             \>@SUBSTR\\
  @FMT            \>@SVAL\\

\vspace{0.1in}
Trigonometric Functions\\
  @ACOS           \>@ATAN2            \>@RTD\\
  @ASIN           \>@COS              \>@SIN\\
  @ATAN           \>@DTR              \>@TAN\\
\end{tabbing}

\subsection*{Alphabetical Function Reference}
\addcontentsline{toc}{subsection}{Alphabetical Function Reference}

{\bf @ACOS(x)}\\
    This function returns the arc cosine, i.e. the angle in radians whose 
cosine is $x$.  The argument $x$ must be in the range -1 to 1.  
The angle is in the range from 
0 to $\pi$.

{\bf @ASIN(x)}\\
    This function returns the arc sine, i.e. the angle in radians whose since 
is $x$.  The argument $x$ must be in the range -1 to 1.  The angle is in the range from 
$-\pi/2$ to $\pi/2$.

{\bf @ATAN(x)}\\
    This function returns the arc tangent, i.e. the angle in radians whose 
tangent is $x$.  The angle is in the range $-\pi/2$ to $\pi/2$.

{\bf @ATAN2(x,y)}\\
This function returns the arc tangent, i.e. the angle in radians whose
tangent is $y/x$.  The angle is in the range $-\pi$ to $\pi$.  This function
distinguishes between angles that lie in the first and third quadrants and
those that are in the second and fourth.

{\bf @AVG(range)}\\
    This function returns the average of the values in the given range.  If 
the range contains blank cells, they are ignored.

{\bf @CEIL(x)}\\
    This function returns the smallest integer which is not less than $x$.

{\bf @COS(x)}\\
    This function returns the cosine of $x$.  The argument $x$ must 
    be in radians.

{\bf @COUNT(range)}\\
    This function returns the number of cells in the range which are not 
empty.

{\bf @DATE(date)}\\
    This function converts the Unix style date and time serial number to a 
character string representing the date and time.  The character string is in 
the form:\\
    Nnn Mmm dd hh:mm:ss yyyy
\begin{description}
\item[where]{Nnn is the name of the day of the week\\
        Mmm is name of the month of the year\\
        dd is the day of the month\\
        hh:mm:ss is the 24-hour time giving hours, minutes, and seconds\\
        yyyy is the year}
\end{description}

{\bf @DAY(date)}\\
    This function converts the date serial number to the day of the month.

{\bf @DTR(x)}\\
    This function converts the angle measurement $x$ in degrees to radians.

{\bf @EQS(string1,string2)}\\
    This function compares the values of two string expressions.  If string1 
has the same value as string 2, then it returns 1.  Otherwise, it returns 0.

{\bf @EXP(x)}\\
    This function returns the value of $e$ (2.718281828...) raised to the power 
of $x$.  @EXP is the inverse function of @LN.

{\bf @EXT(string,x)}\\
    This function allows the user to call external functions from inside a 
spreadsheet.  The external function must be a valid program that Unix can run 
when the function is called.

    String contains the program command line that is passed to the Unix 
command interpreter.  $x$ is a numeric value which is passed to the function 
named in string.  the value of $x$ is converted to character format and 
concatenated to the end of string before the command interpreter is called.

    The result of @EXT is a character string which contains the first line 
which the external program prints to standard output.  Any additional output 
to standard output or any output at all to standard error will mess up the 
screen.  @EXT will return a null string if external functions are disabled, 
string is null, or the attempt to run the command fails.

{\bf @FABS(x)}\\
    This function returns the absolute value of the number specified by the 
argument.  The absolute value is either zero or the positive value of the 
number.

{\bf @FLOOR(x)}\\
    This function returns the largest integer which is less than or equal to 
the value of the argument.

{\bf @FMT(format,x)}\\
    This function converts the argument $x$ to a character string using the 
format specification given in format.  The argument format must be a character 
string containing a valid C language style format specification.  Valid format 
specifications are: \\
    \%ew.d  \ \     \%Ew.d   \ \    \%fw.d  \ \     \%gw.d  \ \     \%Gw.d\\
In each of these, w gives the total width of the field in characters and d 
gives the number of characters to the right of the decimal point.

{\bf @FV(pmt,i,term)}\\
    This function returns the future value of an ordinary annuity with the 
payment made at the end of each term, at a fixed interest rate.  The arguments 
are the periodic payment amount, the interest rate per term, and the number of 
terms.  The period for expressing the interest rate and number of terms must 
be the same.  For example, if the interest rate is monthly, the number of 
terms is the number of months.

{\bf @HOUR(date)}\\
    This function returns the hour from a date serial number.  The hours are 
the number of hours since midnight.  Thus, 0 represents midnight and 23 
represents 11 p.m.

{\bf @HYPOT(x,y)}\\
    This function returns the length of the hypotenuse of a right triangle, 
i.e. $\sqrt{x^2 + y^2}$.

{\bf @INDEX(n,range)}\\
    This function returns the numeric contents of a cell specified by the 
index number n and the range.  range is any single row or column in the 
worksheet.  The range cells are numbered from 1 to n, starting with the 
leftmost cell in the row or the topmost cell in the column.
 
{\bf @LN(x)}\\
    This function returns the natural logarithm (base $e$) of $x$.  
    $x$ must be a 
value greater than 0.

{\bf @LOG(x)}\\
    This function returns the common logarithm (base 10) of $x$.  $x$ must be a 
value greater than 0.

{\bf @LOOKUP(x,range)}

{\bf @LOOKUP(string,range)}\\
    These functions return the contents of a cell from a table.  The table can 
be either two rows or two columns.

    The numeric function compares the value of $x$ to the table located in the 
row or column range.  The function searches the row or column for the last 
value less than or equal to $x$.  If range is a row, the function returns the 
value in the next row and the same column.  If range is a column, the function 
returns the value in the same row and the next column.

    The string function compares the value of string to the table located in 
the row or column range.  The function searches the row or column for and 
exact string match.  If range is a row, the function returns the value in the 
next row and the same column.  If range is a column, the function returns the 
value in the same row and the next column.

{\bf @MAX(range)}

{\bf @MAX(x1,x2,...)}\\
    These functions return the largest value specified by the arguments.  The 
arguments can be either a single range or a list of numeric expressions 
separated by commas.

{\bf @MIN(range)}

{\bf @MIN(x1,x2,...)}\\
    These functions return the smallest value specified by the arguments.  The 
arguments can be either a single range or a list of numeric expressions 
separated by commas.

{\bf @MINUTE(date)}\\
    This function returns the number of minutes since the last whole hour from 
a date serial number.  The minutes are represented as 0 to 59.

{\bf @MONTH(date)}\\
    This function returns the number of the month from a date serial number.  
The months are represented as 1 (January) to 12 (December).

{\bf @NOW}\\
    This function returns the serial day number of the current date and time.

{\bf @NVAL(string,n)}\\
    This function returns the numeric value of the cell specified by the 
arguments.  The string argument specifies the column (``A'', ``B'', etc.) and the
argument n specifies the row number.  If either of the arguments are outside 
of the worksheet limits or the cell has no numeric value, the function returns 
0.
 
{\bf @PI}\\
    This function returns the value of $\pi$ (3.141592654...).

{\bf @PMT(pv,i,term)}\\
    This function returns the payment for an ordinary annuity with the payment 
made at the end of each term.  The arguments are the principal present value 
of the loan amount, the periodic interest rate, and the number of terms 
(usually months) for paying off the loan.  The period for expressing the 
interest rate and number of terms must be the same.  For example, if the 
interest rate is monthly, the number of terms is the number of months.

{\bf @POW(x,y)}\\
    This function returns the result of $x$ raised to the power $y$, 
    i.e. $x^y$.  $x$ must be nonnegative.

{\bf @PROD(range)}\\
    This function returns the product of all the nonblank cells in the given 
range.

{\bf @PV(pmt,i,term)}\\
    This function returns the present value of an ordinary annuity with the 
payment made at the end of each term, at a fixed interest rate.  The arguments 
are the periodic payment amount, the interest rate per term, and the number of 
terms.  The period for expressing the interest rate and number of terms must 
be the same.  For example, if the interest rate is monthly, the number of 
terms is the number of months.

{\bf @RND(x)}\\
    This function returns the value that round off $x$ to the nearest integer.

{\bf @RTD(x)}\\
    This function converts the angle measurement $x$ in radians to degrees.

{\bf @SECOND(date)}\\
    This function returns the number of seconds since the last full minute 
from a date serial number.

{\bf @SIN(x)}\\
    This function returns the sine of $x$ which is an angle in radians.


{\bf @SQRT(x)}\\
    This function returns the square root of $x$.  $x$ must be nonnegative.

{\bf @STDDEV(range)}\\
    This function returns the sample standard deviation of the cell values in 
range.

{\bf @STINDEX(n,range)}\\
    This function returns the character string contents of a cell specified by 
the index number n and the range.  range is any single row or column in the 
worksheet.  The range cells are numbered from 1 to n, starting with the 
leftmost cell in the row or the topmost cell in the column.

{\bf @STON(string)}\\
    This function converts string to its numeric value.  string must be a 
valid numeric expression.

{\bf @SVAL(string,n)}\\
    This function returns the string value of the cell specified by the 
arguments.  The string argument specifies the column (``A'', ``B'', etc.) and the
argument n specifies the row number.  If either of the arguments are outside 
of the worksheet limits or the cell has no string value, the function returns 
a null string.

{\bf @SUBSTR(string,position1,position2)}\\
    This function returns the characters from position1 through and including 
position2 from the designated string.  The first character in string is at 
position number 1.  If position 2 is greater than the length of the string, 
position2 is the length of the string.  If position1 is less than 1 or greater 
than position2, the function returns the null string.

{\bf @SUM(range)}\\
    This function returns the sum of all the nonblank cells in the given 
range.  The function ignores empty cells and treats labels as 0.

{\bf @TAN(x)}\\
    This function returns the tangent of $x$ which is an angle in radians.

{\bf @YEAR(date)}\\
    This function returns the year from a date serial number.  Valid years 
start with 1970.  The latest valid year is system dependent.
\end{document}
