Xess3 Help

Xess is an advanced spreadsheet designed specifically for the X Windows environment. By using the intuitive Xess user interface, you can easily access its powerful computational and graphical tools.

The Xess spreadsheet provides a flexible and comfortable visual environment in which to handle complex calculations and data manipulations. It calculates a full range of mathematical, statistical, matrix and string functions -- all with the ease of a familiar spreadsheet format with point- and-click screen displays and pull-down menus.

Like those in other spreadsheets, cells in an Xess spreadsheet contain constant numeric values, text strings, and formulas that calculate new values. However, with its extensive range of features and functions designed for the advanced user, Xess defines a new generation of spreadsheets.

A powerful feature of Xess is its understanding that the world does not stand still. In a world of spreadsheets that only capture a snapshot in time, Xess is a step up to live action -- capable of sending and receiving data and instructions from other X Windows programs, even on other computers, and automatically recalculating every referenced area as it goes.

This capability allows Xess to monitor and display data from multiple sources as it is calculated and to pass this information to other programs in a real-time environment.

A toolkit (API) is provided which makes it easy for C or Fortran programmers to develop customized applications or even extensions to the spreadsheet itself.

The entire spreadsheet environment can be customized to reflect specific user or site preferences. This includes short-cut accelerator keys and start-up defaults.


Calculations

Overview

Xess supports "natural order" recalculation, which is a method of ordering the computations such that each cell's value is computed only after the values for all cells on which it depends have been computed. Natural order recalculation guarantees that cells are always computed correctly, regardless of the order in which the cell formulas were entered. Iconified sheets are recalculated the same as visible sheets.

Recalculation options include:

These options are set in the Recalc Options Dialog.

Mode of Recalculation

Xess supports two modes of recalculation: Manual and Automatic. When Manual is set all cells containing formulas are recalculated in their natural order. When Automatic is set, any action which causes the contents of a cell to change automatically triggers recalculation. Automatic recalculation is further controlled by Method of Recalculation: Foreground and As Needed.

Method of Recalculation

When the mode of recalculation is set to Automatic, recalculation is defined further by the following methods: Foreground and As Needed.

When Foreground is set Xess enforces "minimal" recalculation, which means only the cells throughout the entire spreadsheet which are potentially affected by an operation which you perform (such as editing a cell, or moving a range of cell) are recalculated. This feature minimizes the work performed during recalculation and thus speeds up your computations. Minimal recalculation is in effect whenever the recalculation mode in the Recalc Options dialog is set to Automatic and the method is set to Foreground.

As Needed Method of Recalculation

When As Needed is set Xess enforces "frugal" recalculation, which means that recalculation performance is further optimized beyond what is achieved when method is set to Foreground.

The performance gain in recalculation can be significant, depending on the size and complexity of the sheet. Frugal recalculation is in effect whenever the recalculation mode in the Recalc Options dialog is set to "Automatic" and method is set to "As Needed".

Note that As Needed does not currently support Constraint Checking and Iterative Recalculation.

Cyclic Dependencies/Iterative Recalculation

Normally, a formula in a given cell should not depend on that cell itself, either directly or indirectly. Such a condition is called a "cyclic dependency." When cyclic dependencies exists, the rule for natural order recalculation as described above does not make sense. When you enter a formula which creates a cyclic dependency, the message "Cycle!" is displayed in the cell. In some cases cyclic dependencies are useful in that they can represent "iterative" calculations, which Xess supports. Iterative calculation in Xess is useful when two or more cells mutually depend on each other such that each time they are recalculated, their values become closer and closer to the desired answer.

When the "Iteration Limit" field is set to a non-zero value, iterative calculation is enabled. In this mode, Xess will make multiple recalculation passes, still preserving the natural order and minimal recalculation rules described above, until either the iteration limit has been reached or, if constraint checking is enabled, until all constraints are satisfied, whichever comes first.

Precision

Xess performs all non-integer calculations in double-precision. Calculations with logical operators -- ! (logical NOT), && (logical AND), || (logical OR), and ?: (conditional) -- consider a non-zero value to be True and a zero value to be False. Integer operators -- ~ (complement), & (bitwise AND), | (bitwise OR), ^ (bitwise EXCLUSIVE-OR), and % (modulus) convert their operands to 32-bit integers before performing the operation.

Formulas

Formulas are the backbone of the spreadsheet, establishing and calculating mathematical relationships between elements of the spreadsheet. Whereas numeric entries remain the same until you change them, cells defined by formulas are automatically changed to reflect changes in referenced cells -- even where there are complex interdependencies among cells.

Xess formulas can calculate with numbers, text, logical values, cell references, and other formulas. For example, you can easily calculate the sum of a series of cells, the total of values in a column, a minimum or maximum value within a range, the rounded result of another formula, or the absolute value of a cell entry. Formulas can express complex interdependencies among cells, and they can define constraints on the calculation, such as limits on acceptable resulting values or specific conditions under which a calculation should take place.

Once entered in a cell, formulas are hidden behind the scenes, perform their work in the background, and display only the result of their calculation. To view the formula in a cell, simply select the cell. Xess displays the formula in the Input line of the Control/Status area. You can edit the formula or values in cells at any time.

Xess also provides a wide array of functions. Functions are predefined formulas that perform certain tasks. Some functions are used alone; others are used within formulas. Xess provides many specialized functions that are not found in typical financial spreadsheets.

For more information, see:
Cell Contents
Cell Defaults
Cell Formats
Cell References
Formulas
Functions
Embedded Tools


Case/Accent Sensitivity

You may choose whether or not (and, if so, how) Xess distinguishes between upper/lower case and accented/unaccented characters by selecting the desired options described in Collating Options. These settings affect Sort, Find, Extract and strings comparisons in @IF, @REGEX, @HLOOKUP, and @VLOOKUP functions.

Cell Attributes

Cell attributes may be defined on an individual cell basis or for all cells in the sheet. Settings applied to specific cells override the default cell attributes for the entire sheet.

The following attributes are supported:

For information:
Cell Attributes - assigning per cell
Cell Attributes - global defaults

Cell Attributes - assigning per cell

There are three (3) ways to assign most of the attributes supported by Xess: To assign a cell attribute for one or more cells:
  1. Select the cells to be affected.
  2. Invoke the desired Format option via any one of the three methods described.
  3. If you are using a dialog box, you must click OK or Apply to complete the operation.
To set protection attribute, select Cell Protection under the Tools menu. You must also activate protection from the Sheet Defaults Dialog.

Cell Attributes - global defaults

Default attributes for all cells in the sheet are controlled by the Cell Defaults Dialog which is invoked from the Options menu.

Cell Color Dialog

You may assign both background and foreground color to any cell. Use one of the three methods described in Cell Attributes - assigning per cell to display the Color dialog box. You may change the color palette.
  1. Select one or both of the following:
  2. Click OK or APPLY to apply the color.

Cell Contents

Xess accepts six basic types of cell entries:

Label Entries

Label entries are useful for labeling columns and rows, for including comments about data values being calculated, and for using Xess to manage textual information, such as names, addresses or whatever your application may require. Xess accepts any characters contained in the ISO Latin 1 character set.

Numeric Values

If a cell entry begins with a digit from 0 - 9, Xess assumes that you are typing a formula and it prepends the value with an equals ("=") sign. Xess also recognizes the following symbols as indicators of numeric entries.
                + - .
You can format numeric values to be displayed in several ways, even as dates or times that are entered as numbers but displayed in the specified date or time format.

Dates and Times

Dates and times are stored in Xess as double precision floating point numbers representing the number of days since December 31, 1899. For example, 12:00 noon on January 2, 1900 is represented by the value 2.5, since it is exactly 2.5 days after midnight, December 31, 1899.

To tell Xess to interpret the entry as a date or time and not a formula, you must change the cell format to one of the date/time formats before entering the contents of the cell, or use a date function. You can also use a shorthand method for entering dates. Type a slash (/) followed by any supported date format such as: /mm/dd/yy, /dd-mmm-yy, /dd.mmm.yy. The date entered with this method is converted to the equivalent reference to @date.

Xess provides a rich set of built-in functions and formats for manipulating and displaying date and time values.

Formulas

Formulas establish and calculate mathematical relationships between elements of the spreadsheet. Xess formulas can calculate with numbers, text, logical values, cell references and other formulas. For example, you can easily calculate the sum of a series of cells, the total of values in a column or the absolute value of another cell entry.

Graphs

When a graph is inserted in the spreadsheet, the top, left anchor cell contains the string "//gx" where x is a graph number assigned when the graph was saved in the Graph Editor. You can manually insert a graph in a cell, by entering the special graph string directly into the cell.

Cell Defaults Dialog

The Cell Defaults dialog allows you to define the default appearance of cells in the spreadsheet. This includes the format and number of decimal places for displaying numeric data, and the default font, which applies to text as well as numeric data.

To set the Cell Defaults:

  1. Select Cell Defaults... from the Options menu. Xess displays the Cell Defaults dialog box to specify the characteristics. Select any of the following options as instructed:
  2. Click OK or press [Return] to confirm and apply your formatting to the whole spreadsheet. Click Apply to apply the changes and retain the dialog box. Click Cancel to dismiss the dialog box.

Cell Formats

Formats can be defined globally or on a cell-by-cell basis. Using any one of the several approaches you can tell Xess to display a date in MMM-YY, DD-MMM-YY or DD-MMM format. You can display numbers in a variety of formats such as scientific notation, hexadecimal representations, dollars, or with commas separating the thousands, millions, etc. You can request that Xess hide the contents of a cell. Individual cell formats are set as described in Cell Attributes - assigning per cell. Global cell formats are set in the Cell Defaults Dialog. Formatting selections include the following:
        Default         Restore the cell format and decimal places
                        to the values selected on the Cell Defaults
                        options dialog.

        Scientific      in scientific notation (exponentiation)

        Fixed           using a fixed number of decimal places

        General         in the same format as the Fixed format.  Data
                        values that are too long for the column are
                        displayed in Scientific format.

        Dollars         with a leading dollar sign ($), with comma
                        delimiters, and negative numbers in parentheses.

        Comma           like Fixed format, but with commas delimiting
                        the thousands, millions, etc.

        Percent         displays a value as a percentage with trailing
                        percent (%) sign.

        MM/DD/YY        as a date in the format 12/25/91

        DD-MMM-YY       as a date in the format 25-Dec-91

        MMM-YY          as a date in the format Dec-91

        DD-MMM          as a date in the format 25-Dec

        YY-MM-DD        as a date in the format 96-12-25

        DD.MM.YY        as a date in the format 25.12.96

        HH:MM:SS        as a time in the format hours:minutes:seconds,
                        in a 24-hour clock starting at midnight.

        Hex             in hexadecimal format, displayed in base 16
                        with a leading 0x indicator

        Logic           as 0 or 1 for logic levels.  Other values are
                        displayed as ? .

        Hidden          cell contents are (blank) not displayed.

        Text            as text when numeric values are entered. Also,
                        displays formula entries in the cells as text
                        as opposed to placing the resulting value of
                        the formula.

Cell Formats Dialog

To view or change Cell Format:
  1. Select the cell or cells that you want to change.
  2. Use one of the three methods described in Cell Attributes - assigning per cell to access the Cell Format list box.
  3. In the Cell Format list box, hold the left mouse button down and position the pointer on the format of choice and release. You can only choose one format; when you make a selection, Xess automatically turns off the previous selection.
  4. In the Decimal Places area, while pressing the left mouse button, move the pointer to the desired number of decimal places you wish to display - between 0 and 15 - and release.

    Note: The number of decimal places displayed does not affect the precision of Xess calculations, except for the @VSUM (visual sum) function.

  5. Click OK or press [Return] to confirm and apply your formatting to the selected cell(s) and dismiss the dialog box. Click Apply to apply the changes and retain the dialog box. Click Cancel to dismiss the dialog box.
Note: Use the Cell Defaults Dialog to set default cell characteristics that affect the entire spreadsheet.

Cell Linking Between Sheets

It is possible to make links between spreadsheets. By using the @XVALUE function, you can make one cell reference a cell in another sheet. If cell B1 in the current spreadsheet contains @XVALUE("othersheet.xs3", A1), then the value of B1 will actually be the value of A1 in the file "othersheet.xs3".

You may use the indirect cell reference technique (#) in cases where the @XVALUE function is stored in the same relative cell location as the second argument in the function. For example, if the @XVALUE function is stored in cell A1 and you wish to return the value from cell A1 in a different sheet, then use the construct, @XVALUE("othersheet.xs3",#).


Cell References

Much of the power of Xess lies in its ability to calculate relationships among different cells in the spreadsheet. Xess provides several ways within a formula to reference other cells. You can:

Absolute and Relative Cell References

Xess differentiates between relative and absolute references. Relative Cell/Range References are interpreted by Xess relative to the current position of the cell containing the formula, such as "the cell two rows down and four columns to the right." Cell references are relative by default. When you copy the cell to another location, Xess changes the cell address so that it still references the cell two rows down and four columns right.

Absolute Cell/Range References are interpreted by Xess as fixed, no matter where you move or copy the cell. To specify an absolute cell address, insert a dollar sign ($) before the address coordinate to be fixed, or before both coordinates if the row and column coordinates are both fixed.

To specify an absolute cell address, insert a dollar sign ($) before the address coordinate to remain fixed. For example:

Ranges can be made absolute just like an individual cell. Insert a dollar sign ($) in front of the coordinate to remain fixed. For example $A1..$C20 makes the column coordinates A and C absolute, while the row coordinates remain relative.

Collating Options

Collating options determine how Xess will handle upper/lower case and accented/unaccented characters with Sort, Find, Extract and string comparisons in @IF, @REGEX, @HLOOKUP, and @VLOOKUP functions. (The functions, @EXACT and @FIND, range names, and data entry are not affected by these options.)

Case Sensitivity

Case sensitivity option may be one of:

Accent Sensitivity

Accent sensitivity option may be one of: The default settings for these options are maintained in Sheet Defaults Dialog. You may override the default settings in the Find Dialog, Extract Dialog, and Sort Dialog boxes.

Color Palette

The specific colors and size of the displayed color palette are defined in the Xess resource file. The color resources are *color1...*color63 and the resource, *DialogColors, is used to determine the number of colors displayed in the palette. If a color cannot be allocated, a message will be displayed in the controlling window. The default size of the palette is 15. As you increase the size of the color palette, you may experience a corresponding delay the first time you invoke a dialog which contains the color palette. Subsequent displays of the color palette within the same Xess session will not experience this delay.

Column Width Dialog

  1. Select "Column Width" from the Format menu or mouse button 3 popup menu. Xess displays the Column Width dialog box.
  2. Choose one of the following actions:
  3. Click on the OK button or press [Return] to carry out the function. Click on Apply to apply the changes and retain the window. Click Cancel to dismiss the dialog box.

Column Width Options

There are three ways to change the column width: Note: The sheet default column width is overridden by either of the first two methods. Using the mouse:
  1. Move the pointer to the column header of the column to be resized.
  2. Using the left mouse button, click on the right column separator and drag the column bar to the desired width.

Command-Line Options

Xess start up command-line options allow you to set up a number of default options as described below. The syntax for the command-line option is:
        Xess3 [options] [file.xs3]


Options:

-rows r                         display "r" rows
-r r

-cols c                         display "c" columns
-c c

-size r c                       display "r" rows and "c" columns
-s r c

-position x y                   initialize upper left corner to "x","y"
-pos x y
-p x y

-connect a|r|l                  accept, refuse, or lock connections at
-con a|r|l                      startup

-xsname name                    name this instance of Xess
-xsn name

-nomenu                         exclude all menu choices except Help
                                from the main menu

-help                           display this text and exit
-h

Connections API

Note: The Connections API toolkit for user-written extensions is only available with the fully-licensed Xess product from AIS or an authorized distributor.

The most compelling feature of Xess is its understanding that the world does not stand still. In a world of spreadsheets that only capture a snapshot in time, Xess is a step up to live action-- capable of sending and receiving data and commands from other X windows programs, even on other computers, and automatically recalculating every referenced work as it goes. For example you can:

An Xess spreadsheet accommodates incoming and outgoing connections to 63 different remote processes at the same time, offering vast possibilities for using Xess in very sophisticated applications.

The Connection menu enables and disables receiving connection requests from other programs.

Accept Connections

        -enables Xess to accept connection requests from remote clients.

Refuse Connections

        -causes Xess to refuse connection requests from any remote client
         except the Xess Connection Manager (xsapiTOOLKIT/example22.c).

Lock Connections

        -disables all
        -enables Xess to lock out the Xess Connection manager
         (xsapiTOOLKIT/example22.c) from connecting to an Xess instance.

Connection Status

        -causes Xess to refuse all connection requests from remote clients,
         including the Xess Connection Manager (xsapiTOOLKIT/example22.c),
         thus ensuring the privacy of your data in a networked environment.
Your Xess distribution media contains several example Xess "connection" source programs written in "C" and "FORTRAN" . On the tape they are located in xsapiTOOLKIT/ directory. The file names are example1.c, example2.c, ..., example30.c. This directory also contains the toolkit library "libXess.a" and a "Makefile".

To build these example programs, just "cd" into the appropriate directory and type,

                    % make all
To run one of these Xess client programs, first select Accept Connections from the Connections menu of the menu bar. Next, from a xterm (terminal window), type a client program name(e.g. example8) and press [Return]. In a few moments, the client should connect to the spreadsheet.

PLEASE NOTE: The only prerequisites for creating a client application which utilizes the Xess API library are a C or FORTRAN compiler and the X11 (release 3 or higher) object library.


Constraint Expressions

Constraints are limitations or conditions placed on the variables in your spreadsheet. They are expressed as algebraic statements appended to formulas. You can attach a constraint expression to any formula, by typing a semicolon (;) and the constraint conditions after the formula.

Whether or not constraint expressions are evaluated at recalculation is controlled in Recalc Options dialog under the Options menu.

Constraint expressions establish conditions under which a formula operates or boundaries for valid results of the formula. Constraint expressions may be simple equality/inequality relationships, or they can be arbitrary formulas. Any valid Xess expression which returns a numeric value is also a valid constraint expression. However, unlike the expression that defines a cell value, a constraint expression can reference the cell in which it resides, using the symbol #. For example, the formula


=A1 + A2 ; #>2 && #<=B5 || #==C7
means, "the value of the current cell is the sum of cells A1 and A2, and that value must be either greater than 2 and less than or equal to the value of cell B5, or equal to the value of cell C7."

Constraint expressions are used in several other contexts within Xess, including the Search facility and Extract tool, and the conditional statistical functions. In these contexts, the symbol # always refers to the "current cell," the cell against which the constraint is being evaluated. In many cases, we may wish to include the values of a cell's neighbors in the constraint. For example, we could test whether a cell value was greater than its neighbor to the right by the following constraint expression:


                # > @CELLREF(@COL(#)+1,@ROW(#))
For convenience in referring to neighboring cells, Xess provides a shorthand way of referring to cells relative to the position of the current cell. The notation "#{1}" refers to the cell one column to the right of the current cell, so that "# > #{1}" is equivalent to the more verbose expression above. The notation "#{-2}" refers to the cell two columns to the left of the current cell. The notation "#{0,-1}" refers to the cell one row above the current cell, and #{1,1} refers to the cell one column to the right and one row down from the current cell.

Copy Options Dialog

The copy options determine which aspects of a non-empty cell are transferred to the destination cell with the Copy action. The following choices are available: For efficiency consideration, Xess only copies attributes of cells which are not empty. To change copy options:
  1. Display "Copy Options..." dialog box from the Options menu.
  2. Click on the check box to activate/deactivate one or more options.
  3. Click OK (or press Return) to accept settings and dismiss dialog. Click APPLY to accept settings while retaining dialog. Click CANCEL to dismiss the dialog box.

Copying, Moving, and Clearing Data

Xess provides considerable flexibility in copying and moving data from one part of the spreadsheet to another, and for erasing data in a cell or range of cells. The Edit menu and MB3 popup menu contain the following features for manipulating data already entered into the spreadsheet.

You may also copy data from one sheet to another. In this scenario, you may copy both values and formulas - but not formulas as values. For efficiency consideration, Xess only copies attributes of cells which are not empty in accordance with options set in Copy Options Dialog.

Copy Formulas

        Copies formulas from an active cell or cell range into
        a designated cell or range, overwriting existing data
        in the destination range.  Xess automatically translates
        relative cell references in the copied formulas to reflect
        their new locations.  For example if cell A10 contains the
        formula =@SUM(A1..A9) and is copied to cell B10, then B10
        will contain the formula =@SUM(B1..B9).  

Copy Values

        Copies values from an active cell or cell range into a
        designated cell or range, overwriting existing data in
        the destination range.  When copying cells that contain
        formulas, Xess copies the present value of the cell, not
        the formula, and enters it into the destination cell or
        range as a constant.

Copy Options

        In addition to values and/or formulas copied, any specific
        cell options that may have been defined may also copied. For
        example: color, font, justification, formats.

        The Copy Options dialog under the Options menu determined which
        of these characteristics are copied.  

Move

        Moves a selected cell or range of cells (including all data
        values, formulas, formatting and cell references) to a
        designated location, overwriting existing data in the
        destination range.  Any formulas in the spreadsheet which
        refer to the cells that have been moved are automatically
        updated to refer to the new location.

Clear

        Removes all data in the selected cell or range of cells.
Use the following sequence to perform a copy, move, or clear operation within the same sheet:
  1. Select the cell or range of cells to which you wish to apply the operation. If you do not select a range, then the operation will be applied to the current cell only (the one highlighted by the cell cursor).
  2. Select the operation to be performed from the Edit menu, MB3 popup menu, or use the appropriate keyboard accelerator (for example, "<ctrl>f" for Copy Formulas.
  3. If a Copy or Move operation was selected, you will be prompted on the Status line to select a destination for the operation. The destination for a Copy operation may a single cell, in which case it indicates the upper left corner of the range to which the data is to be copied, or a range over which the data is to be replicated. The destination for a Move operation indicates the upper left corner of the destination.
Alternatively, you may specify the cell range or address using the Select Range dialog box, instead of mouse interaction.

Pasting with the mouse PASTE button

The mouse PASTE button (usually the middle button) can be used to paste whatever data was last selected. Simply move the mouse to the beginning of the desired destination and press the PASTE button.

Note: If you accidently erase the wrong data, or accidently overwrite some cells with a copy or move, Xess allows you to easily recover from your mistake using Undo.


Copy Data Between Sheets or Other Applications

You may also copy data from one sheet to another. In this scenario, you may copy both values and formulas - but not formulas as values.

To copy data to another sheet:

  1. Select the data to be copied using the mouse or the Select Range dialog box in the first sheet.
  2. Position the mouse in the top-left cell of the destination in the second sheet and press the mouse PASTE button (usually the middle button).
Similarly, you may paste data to and from other X Windows applications that support ICCCM standard of data interchange.

Embedded Tools

Embedded tools are a powerful feature in Xess. From the user's point of view, embedded tools are very much like normal spreadsheet functions, such as "@SUM," except that they return a range of values instead of a single value. Embedded tools are entered into cells and recalculated in the same manner as other spreadsheet functions, except that they should not be part of a more complex formula; i.e., it is not acceptable to enter the formula "@MMUL(@TRANSPOSE(matrix1),matrix2)" to multiply the transpose of matrix1 by matrix2.

The cell in which the embedded tool is entered will serve as the upper left corner of the range of values which the tool returns. The values returned by the embedded tool are "tagged" with a reference to the cell containing the tool. The tag is a backslash followed by the address of the cell address containing the embedded tool. This tag not only helps you remember how the value got there, but is used by Xess to determine the natural recalculation order.

Except for the fact that they are specially tagged, the values returned by the embedded tool are just like constant values that were typed in or read in from a file. Therefore, if you erase the cell containing the embedded tool, the tagged values will not disappear, they simply become constant values that can be erased, moved, or copied just like any other constant values in the spreadsheet.

Remember, DO NOT combine embedded tools with other functions or arithmetic operations in a single formula.

Embedded Tool           Returns

@DFT(R)
        The Discrete Fourier Transform of the range R.
        R must represent a real vector (either its row or column dimension
        must be 1) or a complex vector (either its row or column dimension
        must be 2). The result is always a complex vector.
        R - a range representing the vector to be transformed.

@EIGEN(M)
        Generates the eigenvalues of the matrix M, which must be square
        and symmetric.
        M - a matrix which must be square and symmetric.

@FFT(R) Generates the Discrete Fourier Transform of the range R
        using a Fast Fourier Transform algorithm.  The length of
        the vector must be a power of 2. @FFT will produce the
        same results as @DFT, but is much faster (N*log(N)) times
        as opposed to N**2 times.
        R - a range representing the vector to be transformed.

@INVDFT(R)
        Generates the inverse of the Discrete Fourier Transform of the
        range R. R must represent a real vector (either its row or
        column dimension must be 1) or a complex vector (either its
        row or column dimension must be 2). The result is always
        a complex vector.
        R - a range representing the vector to be inverse transformed.

@INVERT(M)
        Generates the inverse of matrix M, which must be square.
        M - a square matrix.

@INVFFT(R)
        Generates the inverse of the Discrete Fourier Transform of the
        range R using a Fast Fourier Transform algorithm. The length
        of the vector must be a power of 2.  @INVFFT will produce the
        same results as @INVDFT, but is much faster (N*log(N)) time
        as opposed to N**2 time.
        R - a range representing the vector to be inverse transformed.

@LINCOEF(X,Y)
        Generates the straight line least squares fit.
        X - a range representing a column vector of independent variable
            values.
        Y - a range representing a column vector of dependent variable
            values

@LINFIT(X,Y)
        returns the straight line least squares fit.
        X - a column vector of values for the independent variable.
        Y - a column vector of values for the dependent variable.
        This function is equivalent to @POLYFIT(X,Y,1).

@LLS(A,Y)
        The linear least squares solution X to the overdetermined
        system of equations AX=Y.
        A - a range representing the coefficient matrix
        Y - a column vector of values for the dependent variable

@MMUL(M1,M2)
        Generates the product of multiplying matrix M2 by matrix M1.
        M1 and M2 can be multiplied only if number of columns in
        M1 is equal to the number of rows in M2.
        M1, M2 - matrices.

@PLS(X,Y,d)
        analyzes the least squares polynomial model. The output is
        identical to that of @LLS, with the polynomial coefficients
        listed in the order of decreasing degree.
        X - a range representing a row or column vector of independent
            variable values.
        Y - a range representing a row or column vector of dependent
            variable values.

@POLYCOEF(X,Y,d)
        Returns the least squares coefficients for the polynomial fit.
        X - a range representing a row or column vector of independent
            variable values.
        Y - a range representing a row or column vector of dependent
            variable values.

@POLYFIT(X,Y,d)
        Returns the least squares polynomial fit.
        X - a column vector of values for the independent variable.
        Y - a column vector of values for the dependent variable.
        d - the polynomial degree in the range of 1 to 10.

@TRANSPOSE(M)
        The transpose of matrix M.
        M - a matrix.

@TREND(NX, KX, KY)
                TREND fits a straight line to KX (known x's) and KY
                (known y's) using least square method, and then
                returns the y values along the line for NX (new x's)
                NX - new x values for which TREND will return the y-values
                KX - known x values
                KY - known y values

Entering Data

Labels

A label entry is usually used for descriptive information, such as a column heading, row label, or explanatory comment. You can also make text entries of names, addresses or other information your application requires. Labels may include any character included in the ISO Latin-1 character set.

Treating Number Entries as Text

Note that some apparently numeric entries, such as phone numbers, should really be treated as text. For example, if you enter the phone number 555-1212 in a cell, Xess will display the number -657, the difference of 555 and 1,212. However, if you start the character string with one of the special text-indicator characters ("555-1212, for example), Xess treats the phone number as text and not as a formula.

Repeating Characters

You can automatically repeat one or more characters to fill the cell by starting the character string with a "double-slash r" (//r). For instance, to fill a cell with hyphens, type:
        //r-
This feature can be useful for drawing lines to demark areas of your spreadsheet when printed. However, if you wish to enter a character string that begins with a slash (/), you must be sure to prepend the entry with one of the special text-indicator characters: ' " ^

Labels Wider than One Cell

Label entries can be up to 512 characters long, so it is possible to make an entry that exceeds the width of the column. If you have not selected the Wrap format option, Xess continues the text in the next empty cell to the right, left, or both, depending upon the justification, and so on until it reaches an occupied cell. Xess stores the entry in full as you entered it, but only displays the number of characters that will fit in available empty cells.

To edit an entry that occupies more than one cell, double click the cell which actually contains the label. Xess will display the full entry on the edit line in the Control/Status area. If you select the Wrap format option, Xess will automatically wrap the long label to fit within the bounds of the column width. When column width changes the contents will re-wrap accordingly.

Numeric Values

Follow these conventions for entering numeric values: To enter a positive number, use the number keys to type the number, with or without a + indicator. If you do not type a plus (+), Xess assumes the number is positive.

To enter a negative number, type a minus sign (-) and the number. Do not use parentheses to indicate negatives. However, if you change the numeric format to Dollars or Comma, Xess displays negative numbers in parentheses.

Do not use spaces or commas when entering numbers. If you wish, you can display commas by changing the format.

Be careful not to substitute a lower case L for the numeral 1 or the upper case O for the numeral 0.

You can use scientific notation to enter a number. If the calculated number fits within the cell size and format, Xess displays it in full. Otherwise, it displays the value in scientific notation or displays the special width indicator, depending on the cell format.

Numeric Values Wider than the Cell

As with text entries, you can make numeric entries that exceed the width of the cell. However, unlike text entries, Xess does not run the entry into adjacent cells. Rather, it displays the value in scientific notation or displays a thickened column separator on the left or right (depending on justification) which means that the cell is not wide enough to display the value using the selected format. You must either change the cell format or increase the width of the column to return to a normal column separator.

Changing the Numeric Format

You can choose from a variety of different formats for displaying the contents of a cell. The formats do not change the cell values themselves, the way the numbers are stored internally, or the way it is used in calculations. Formatting only changes the way Xess displays numbers in the cell.

Formulas

Formulas are the backbone of the Xess spreadsheet, defining relationships between the values in other cells. For example, formulas can be used to sum a column of numbers, compute an average, determine a minimum or maximum value, or round the results of a formula.

Whereas numeric entries remain the same until you change them, cells defined by formulas are automatically recalculated to reflect changes in referenced cells -- even where there are complex interdependencies among cells.

Once entered in a cell, formulas are hidden behind the scenes, performing their work in the background and displaying only the result of their calculation. To view the formula in a cell, simply select the cell. Xess displays the formula in the Input/Edit lines in the Control/Status area. You can edit the formula or values in cells at any time. Xess also includes a "Text" display format which causes the formula itself, not the cell value, to be displayed on the sheet.


Error Handling

When the syntax of a formula is incorrect or a calculation cannot be performed, Xess generates an error message. If you make a mistake, Xess tells you by giving you an error messages in descriptive terms that actually help you solve the problem. A complete list of Xess error messages and their solutions can be found in Appendix A, Error Messages in the User's Manual.

Calculation Errors

When Xess encounters a computational error, a descriptive message is displayed on the Message Line. In addition, the word Error followed by the message appears highlighted in the affected cells. If there are multiple errors flagged in the body of the spreadsheet, the message on the message line represents the first calculation error encountered.

Syntax Errors

If you attempt to enter an expression which is syntactically incorrect, Xess displays an informational message on the Message Line, while placing the text edit cursor in the expression where the error was detected.

Xess will not allow a syntactically incorrect expression to be entered.

Operational Errors

When you request Xess to perform an invalid operation, the condition is flagged by the Xess Message dialog box which immediately pops up with a message describing the error. You must click Cancel to dismiss the dialog box.

Explicit Dependency

There may be instances where you need to force a recalculation when certain cell values changes, when there is no implicit dependency in the formula that would trigger an automatic recalculation. This option is indicated by appending a backslash (\) to the end of the dependent formula. For example, the formula

        @SUM(A1..A20)\D50

instructs Xess to recalculate @SUM(A1..A20) whenever the contents of D50 change.

This feature is particularly important when you have a constraint expression containing a constant offset that produces a cell reference outside the cell range referenced in a dependent formula. Under these circumstances, Automatic Recalculation would not necessarily be triggered. For example,

@CCOUNT(C4..C100,# > #{0,-1}) counts all the cells in the range C4..C100 whose value is greater than the contents of the cell im- mediately above.

In order for C4 to be evaluated, it must be compared to C3 - which is not part of the explicit range, C4..C100. Without indicating an explicit dependency, C4 would never be evaluated properly. So, in this case, we would indicate the dependency as follows:


    @CCOUNT(C4..C100,# > #{0,-1})\C3..C99
which tells Xess to recalculate whenever any cell in the range C3..C99 changes.

Exporting Data

Xess provides several options for exporting data from Xess to be used by other applications: Note: You can export data (formulas and values) in WKS/WK1/WK3 and XLS formats for use by spreadsheet programs that recognize these formats. This action is supported from the Save dialog.

Xess Cells

You can export a range of cells from the spreadsheet to be later imported into another Xess spreadsheet. This operation has the same effect as cut-and-paste between Xess sheets. It uses an intermediate file so it does not require both spreadsheets to be active simultaneously. The default filename extension for Xess Export Cell file format is ".xsc".

ASCII Text Format

You can export data (string and numeric values, but not formulas) in ASCII text format. These formats are widely used to interchange data among applications. There are three options available for exporting ASCII text: TSV (Tab Separated Values) format uses tabs to separate cell values.

CSV (Comma Separated Values) format uses commas to separate cell values with text strings in double quotes.

Text format does not use a delimiter but uses the column width to determine cell (field) width. This creates a tabular representation of the spreadsheet data.

LaTeX Tabular Format

Xess spreadsheet data exported in LaTeX tabular format must be included in documents created with the LaTeX document formatting language. The data is written in a LaTeX "tabular" environment, and entities such as fonts and column justifications are preserved. The file created by Xess is not meant to be used standalone.

HyperText Markup Language

Xess spreadsheet data exported as HTML tables can be accessed directly by web browsers and other similar tools or merged into other HTML documents. Xess creates an HTML document which includes a table element comprised of the cells from the selected range. To ensure that the HTML table elements approximate their order in the spreadsheet, empty cells are treated as empty data elements in the table. Note also that if a cell element overflows into an adjacent cell, it is necessary to include the root cell into the range selected. You may also include HTML elements directly into spreadsheet cells. These elements will be passed through, as text, to the HTML file and ultimately processed by the browser.

Export Dialog

To export data in any of the formats described in Exporting Data:
  1. Select (highlight) a range of cells to be exported. By default Xess selects the entire spreadsheet for export.
  2. Select Export... from the File menu. Xess presents the Export Data dialog box for you to specify the export filename.
  3. Select the desired format from the File Format list box.
  4. Click the left mouse button inside the entry box titled "Selection" to activate the text insertion cursor. Type the name of the .xsc file you wish to use, or select a Xess spreadsheet cell file by highlighting its name in the Files list box. The Files list box displays an alphabetical list of all spreadsheets whose names meet the criteria in your File Filter. If the list is large, all the document names may not fit inside the list box.
    1. To scroll through the list of file names, click the up and down arrows along the right side of the Files list box or drag the scroll bar.
    2. To display files of specific alphabetical section of the list, type the first character(s) of the name of the file(s) you are looking for (e.g. /tes*.xsc) inside the Filter entry box. Click on Filter to display filename(s) beginning with these characters.
  5. Click OK or press [Return] to confirm. Click Cancel to cancel the operation.

Extract Dialog

The Extract Tool provides a facility for retrieving rows which match a specified criteria from a selected range. This can be thought of as a database query operation where the selected range represents the database, and each row in the range represents a data record.

To extract a set of records from a selected range:

  1. Select Extract from the Tools menu. Xess displays the Extract dialog box.
  2. To activate the text insertion cursor inside an entry box, position the cursor inside the entry box and click the left mouse button.
  3. In the Source Range entry box, enter the range of records to be considered for extraction.
  4. In the Key column entry box, enter the key column cell address (e.g., C3) on which you want to base the extraction.
  5. In the Destination Range window, enter the beginning cell address where the extracted records will be placed.
  6. In the Filter window area, enter the desired constraint expression.
  7. Click on Numeric Search if the filter is a numeric formula.
  8. If you do not want Xess to distinguish between upper and lower case, ensure that the 'Ignore case' toggle button is ON.
  9. If you do not want Xess to distinguish between accented and unaccented characters, ensure that the 'Ignore accents' toggle button is ON.
  10. Click OK or Apply to begin extraction.

File Display Dialog

All operations which require a file specification use a standard file display dialog box which includes the following common sections:

File Filter

The File Filter controls which files are presented in the dialog box Files list. For most operations, Xess automatically displays all files with the .xs3 extension, the typical extension for Xess files. Xess changes the default file filter to match the format selected in the File Format list box.

For example, if you ask Xess to open a WKS-format file, the file filter appears as *.wks and the Files list box includes all files with names ending in *.wks.

This is especially useful when you have many files on disk and the list is cumbersome to search. For example, you can change the file filter to display:

To change the File Filter:
  1. While the dialog box is displayed, click on the text of the File Filter. Xess presents a text insertion cursor in the File Filter area.
  2. Using the keyboard, type the desired file filter. You can use the asterisk (*) as a wildcard. For instance, the file filter *.xs tells Xess to display files with the .xs extension, no matter what characters precede the extension. The file filter test*.xs tells Xess to display all files whose names begin with test and end with the .xs extension.
  3. Press [Return] or click on the Filter button. Xess displays spreadsheet names that meet the criteria specified in the new file filter.

Files list box

The Files list box displays an alphabetical list of all spreadsheets whose names meet the criteria in your File Filter. If the list is large, all the document names may not fit inside the box.
  1. To scroll through the list of file names, click the up and down arrows along the right side of the Files list box or drag the scroll bar.
  2. To display files in a specific alphabetical section of the list, type the first character(s) of the name of the file(s) you are looking for (e.g. /tes*.xs3) inside the Filter window. Click on Filter to display filename(s) beginning with these characters.
  3. To view the full pathname of the current directory inside the Directories list box, first position the cursor on the horizontal scroll bar located below the Directories list box. Second, while holding down the left mouse button drag the mouse to the left. Alternatively, click on the small arrow located to the left of the scroll bar until the desired view is obtained.
Note: If you do not find the spreadsheet name you are looking for, check the File Filter in the dialog to make sure you are searching in the correct disk or disk directory.

Directories list box

The Directories list box contains a listing of all directories under the current login directory. The top of the list box contains the name (highlighted) of the current login directory with the extension "/." followed by the current directory name with the extension "/..". Existing Xess files under the current login directory are listed inside the Files list box as explained above.

To change directories

To view files of a different directory, position the cursor on the desired directory name inside the Directories list box and double-click the left mouse button or press [Return]. Alternatively, click once on the desired directory name and click the Filter button.

To move "up" directory levels, position the cursor on the current directory name with the extension "/.." and double-click the left mouse button. The files under the new directory are listed inside the Files list box.

To scroll through the list of directory names, click the up and down arrows along the right side of the Directories list box or drag the scroll bar.

To view the full pathname of the current directory inside the Directories list box, first position the cursor on the horizontal scroll bar located below the Directories list box. Second, while holding down the left mouse button drag the mouse to the left. Alternatively, click on the small arrow located to the left of the scroll bar until the desired view is obtained.

Selection

Position the mouse cursor inside the entry box labeled "Selection" and click the left mouse button. Xess displays a text insertion cursor in front of the current directory pathname. Type the name of the spreadsheet at the current cursor position and click OK or press [Return] to load the file.

Alternatively, first position the cursor on the desired filename inside the Files list box and click the left mouse button to select(highlight)the name. Next, click OK or press [Return] to load the file.

To quickly select and load a file into the spreadsheet, position the cursor on the desired filename inside the Files list box and double-click the left mouse button.


Find Dialog

The Find Dialog lets you quickly locate a specific character string or numeric value. The power of this feature lies in its ability to accept constraint expressions. Ordinary spreadsheet Search or Find operations just locate a designated string, but Xess can find numeric values that meet certain logical or calculated conditions. For example, you can search for cells whose values are greater than 100 and less than 150, or for cells whose values are less than the average of the three preceding cells. This facility is extremely useful for spotting patterns in scientific data.

When searching by text pattern, a Unix-style regular expression is entered in the "Target" box. For example, a target pattern of "[cbh]at" will match any cell containing one or more of the words "cat," "bat," or "hat." A target pattern of "^C" will match any cell whose formatted text begins with an upper-case C.

When searching by numerical constraint, a valid Xess constraint expression must be entered in the "Target" box and the "Numeric Comparison" must be selected. As an example, to look for values in range named "data" which are more than three standard deviations from the mean, the constraint expression "@ABS(#) > 3*@STDS(data)" could be used as the target.

To Find the first occurrence of an entry in a range:

  1. Display the Search menu from the menu bar.
  2. Select Find... from the list of options.
  3. Specify the range of cells in which Xess should search, by entering two corner coordinates (A1..Z55). The default range is the entire spreadsheet. If a range was selected before you initiated the Search operation, the selected range address is automatically entered inside the Range entry box.
  4. In the "Target" box, enter either a Unix-style regular expression or an Xess constraint expression depending on whether you wish to perform a text pattern search or a numeric search.
  5. As a default Xess searches column by column. Select Search by Row to start searching row by row.
  6. Select Numeric Comparison if you are searching for numeric values. The default search is for alphanumeric ASCII characters (Text Comparison).
  7. If you do not want Xess to distinguish between upper and lower case, ensure that the 'Ignore case' toggle button is ON.
  8. If you do not want Xess to distinguish between accented and unaccented characters, ensure that the 'Ignore accents' toggle button is ON.
  9. To start the search, click the OK or Apply button.
To find the next or previous target value or string, press F7 (Find Next) and F8 (Find Previous), or:
  1. Select 'Search' from menu bar.
  2. Select 'Find Next' or 'Find Previous' accordingly.

Fonts

Xess allows you to select from a variety of font families, style, and sizes. However, the font must also be available on your workstation in order to assign it. The standard set of fonts supported are: In addition, you may add up to seven (7) additional fonts of choice. These font definitions must be added to the Xess resource file. Please refer to Appendix B of the Xess User's Guide for a list of font resources which must be defined.

The following styles are supported for each font family:

The following sizes are supported for each font family:

Formulas

Formula Syntax

The general form of an Xess formula is:
=(expression) ; (constraint expression) //
where expression defines the calculations needed to generate the cell's value, and constraint expression places limits on acceptable values or the circumstances under which the calculation should take place. Text followed by the string "//" is a comment.

Xess formulas look just like algebraic formulas; they contain values and operators that define the relationships between values, known in this context as operands because they are the entities that operators act on. Follow these guidelines for entering formulas:

Formula Values

Formulas can contain any or all of the following types of values:

Formula Operators

Xess supports all the arithmetic, boolean and logical operators available in the C programming language. It does not support the C address operators or the operators that have side effects, such as ++. Xess does, however, provide an exponentiation operator (**) that is not available in the C language.

Xess Formulas can contain the following operators to define relationship between values.


        Operator     Precedence Definition

        %                 14      percent
        **                13      Exponentiation
        +                 12      Unary  plus
        -                 12      Unary  minus
        ~                 12      Bit-wise complement (integer)
        !                 12      Logical not
        *                 11      Multiplication
        /                 11      Division
        %                 11      Modulus (integer)
        +                 10      Addition
        -                 10      Subtraction
        <<                9       Shift left (integer)
        >>                9       Shift right (integer)
        <                 8       Less Than
        >                 8       Greater Than
        <=                8       Less Than or Equal
        >=                8       Greater Than or Equal
        ==                7       Equal
        !=                7       Not Equal
        &                 6       Bit-wise And (integer) or String Concatenation
        ^                 5       Bit-wise Exclusive Or (integer)
        |                 4       Bit-wise Or (integer)
        &&                3       Logical And
        ||                2       Logical Or
        ?:                1       Conditional
In formulas with more than one operators, Xess calculates operators in the order presented above. That is, AND/OR/NOT relationships are considered before equal/unequal relationships, and subtraction/addition is considered before multiplication/division.

To change the precedence of operators, enclose highest priority operations in parentheses.

Here are some special notes about Xess operators:


Functions Overview

Xess functions are predefined formulas supplied with the program. They offer a shortcut approach to accomplishing the work of long, complex formulas. Mathematical and statistical functions are often used to sum a column of numbers, compute an average, determine a minimum or maximum value, or round the results of a formula. Other functions are used for more specialized purposes such as computing the future value of an investment or the product of multiplying one cell range by another range. Some functions perform calculations that arithmetic operators cannot handle such as text-string manipulations. Xess functions fall into the following categories:

Mathematical Functions

Perform calculations with numeric values as arguments, returning numeric values.

Statistical Functions

Perform aggregation and counting operations on a group of values expressed as a list of arguments, returning numeric values.

Conditional Statistical Functions

Operate much like statistical functions, except that the last argument is a constraint expression that Xess evaluates for each cell in the argument list. Only cells that meet constraint criteria are included in the calculation. Conditional Statistical return a numeric value.

String Functions

Manipulate and evaluate character strings. For example, string functions can return the length of a string, find the first occurrence of a string in a range, change a string from upper to lower case and vice versa, or replace one string with another.

Logical Functions

Return one value if an argument meets certain criteria, another value if it does not. Logical functions are used as an adjunct to conditional statements, where the outcome is based on the validity of a statement.

Digital Logic Functions

Return the values 0, 1 or -1 (unknown) based on the value of its arguments. Digital logic functions evaluate the integer portion of a value. Any value not equal to 0 or 1 is considered unknown.

Financial Functions

Perform common financial calculations, such as calculating the future value of an annuity at a given interest rate, straight-line depreciation, depreciation, or the payment term for a given investment.

Many financial functions require specifying a Day Count Basis. A Day Count Basis indicates the way in which the days in a month and the days in a year are to be counted. Most of the financial functions in securities involve 4 different Day Count Bases: 30/360, actual/actual, actual/360 and actual/360.

30/360 Day Count Basis assumes 30-day months and 360-day years (12 months x 30 days). Xess also follows the "End-of-Month" rule which assumes that a security pays interest on the last day of the month will always make its interest on the last day of the month. Some special rules are followed when calculating the days between two dates on 30/360 Day Count Basis:

Let Start_Date = D1/M1/Y1, End_Date = D2/M2/Y2,

  1. If D1=31, change D1 to 30.
  2. D2=31, D2 will be 31 UNLESS D1=30 or D1=31.
  3. If D1 is the last day of Feburary (D1=28 or 29 in a leap year), change D1 to 30.
  4. If D2 is the last day of Feburary (D2=28 or 29 in a leap year), D2 will stay the same UNLESS D1 is also the last day of Feburary.

Date and Time Functions

Return values corresponding to the specified date, month, year, hour, minute or second. They can also return the current system time and date.

Miscellaneous Functions

Perform a variety of calculations, such as returning a reference to specific Cells or ranges or returning the Nth argument from a list of arguments.

Embedded Tools

Are a powerful feature in Xess. Their power comes from their ability to return data in a matrix, not just the resident cell. This function makes non-scalar operations such as matrix manipulation and "live" recalculation as easy to use as an ordinary spreadsheet function.

Mathematical Functions

Function        Returns


@ABS(X)         Returns the absolute value of X
                X - a numeric value

@ACOS(X)        Returns the arc cosine of X
                X - a numeric value between -1 and 1

@ACOSH(X)       Returns the hyperbolic arc cosine of X
                X - a numeric value greater than or equal to 1

@ASIN(X)        Returns the arc sine of X
                X - a numeric value between -1 and 1

@ASINH(X)       Returns the hyperbolic arc sine of X
                X - a numeric value

@ATAN(X)        Returns the 2-quadrant arc tangent of X
                X - a numeric value

@ATANH(X)       Returns the hyperbolic arc tangent of X
                X - a numeric value greater than -1 and less
                than 1.

@ATAN2(X,Y)     Returns the 4-quadrant arc tangent of Y/X
                X, Y - numeric values, one of them must be non-zero

@CEIL(X)        Returns the smallest integer greater than or equal to X
                X - a numeric value

@COS(X)         Returns the cosine of X
                X - a numeric value

@COSH(X)        Returns the hyperbolic cosine of X
                X - a numeric value

@DEGREES(X)     Returns 180/pi times X, converting radians to degrees.
                X - a numeric value

@DET(M)         Returns the determinant of the matrix range M, which
                must be a square matrix.
                M - a range, which must contain an equal number of
                rows and columns.

@DOT(R1,R2)     Returns the dot product of the vectors R1 and R2
                R1, R2 - each a range, which must contain an equal
                number of rows and columns, or must be a dimension
                1 x n (row vector) or n x 1 (column vector).

@EXP(X)         Returns e raised to the X power
                X - a numeric value representing exponentiation

@FACT(X)        Returns X * (X-1) * ... * 1 (X factorial, or X!)
                X - a numeric value

@FLOOR(X)       Returns the largest integer less than or equal to X
                X - a numeric value

@FRAC(X)        Returns the fractional portion of X
                X - a numeric value

@GAMMA(X)       Returns the value of the gamma function evaluated at X
                X - a numeric value which must be non-negative

@GRAND          Returns a 12th-degree binomial approximation to a Gaussian
                random number with zero mean and unit variance

@INT(X)         Returns the integer portion of X
                X - a numeric value

@LN(X)          Returns the log base e of X
                X - a numeric value greater than 0

@LNGAMMA(X)     Returns the log base e of the gamma function evaluated at X
                X - a numeric value greater than 0

@LOG(X)         Returns the log of X
                X - a numeric value greater than 0

@LOG10(X)       Returns the log base 10 of X
                X - a numeric value greater than 0

@LOG2(X)        Returns the log base 2 of X
                X - a numeric value greater than 0

@MOD(X,Y)       Returns the remainder of X/Y, with the same sign as X.
                This is NOT the modulus, see @MODULUS below for that.
                X, Y - numeric values

@MODULUS(X,Y)   Returns the modulus of X/Y.
                X, Y - numeric values

@PI             Returns a numeric approximation of PI.

@POLY(X,...)    Returns the value of the Nth degree polynomial
                in X, where N is the number of data in the argument
                list.  The argument list may contain numbers and
                cell references, including ranges.  Any non-numeric
                argument causes an error.
                @POLY(2,3,4,5) = (3*(2**2)+4*2+5) = 25

@PRODUCT(...)   Multiplies all the numeric elements of the argument
                list together, ignoring empty and non-numeric values,
                and returns the product.  Each argument can be a
                number, a cell or a range.

@RADIANS(D)     Returns PI/180 * D, converting degrees to radians.
                D is a numeric value.

@RAND           Returns a uniformly distributed random number on
                the interval [0,1].  The number will change every
                time the spreadsheet is recalculated.

@ROUND(X,N)     Returns the number X rounded to the number of decimal
                places specified by the integer N, for N between 15
                and -15, inclusive.
                @ROUND(@PI,2) = 3.14
                @ROUND(1234.5678,-2) = 1200

@SIGMOID(X)     Returns the value of the sigmoid function 1/(1 + exp(-X))
                X - a numeric value

@SIN(X)         Returns the sine of X
                X - a numeric value

@SINH(X)        Returns the hyperbolic sine of X
                X - a numeric value

@SQRT(X)        Returns the positive square root of X
                X - a positive numeric value

@SUMPRODUCT(R1,R2)
                Returns the dot product of the vectors R1 and R2
                R1, R2 - each a range, which must contain an equal number of
                rows and columns, or must be a dimension 1 x n (row vector) or
                n x 1 (column vector).

@TAN(X)         Returns the tangent of X
                X - a numeric value

@TANH(X)        Returns the hyperbolic tangent of X
                X - a numeric value

@TRANSPOSE(M)   Generates the transpose of matrix M.

@VECLEN(...)    Returns the square root of the sum of squares of its arguments
                argumentlist - any combination of numbers, cells or ranges

Statistical Functions

@AVG(...)       Returns the average (mean) of its arguments
                argumentlist - any combination of numbers, cells or ranges

@CORR(R1,R2)    Returns Pearson's product-moment correlation coefficient for
                the paired data in ranges R1 and R2
                R1, R2 must have the same dimensions

@COUNT(...)     A count of its non-blank arguments
                argumentlist - any combination of numbers, cells or ranges

@F(M,N,F)       Returns the integral of Snedecor's F-distribution with M and N
                degrees of freedom from minus infinity to F
                M,N,F - numeric values

@ERF(L[,U])     Returns the error function integrated between L (lower
                limit) and U (upper limit).  If U is omitted, @ERF
                integrates between 0 and L.
                L, R - a non-negative numeric value

@ERFC(L)        Returns the comlementary error function integrated
                between L and infinity.  @ERFC(L)=1-@ERF(L).
                L - a non-negative numeric value

@FORECAST(X,R1,R2)
                Returns a predicted Y value for X based on a linear
                regression of R1 and R2 where they represent the
                known x values and y values respectively.
                X - a numeric value
                R1, R2 - Ranges of numeric values.  R1 and R2 must be
                         1 dimentional ranges with same sizes.
                @FORECAST(20, A1..A5, B1..B5)=13.60349
                where A1..A5={3,10,18,20} and B1..B5={8,10,13,11}

@FREQUENCY(R, B)
                Returns a frequency distribution for a set of values R
                with a set of intervals B.
                R - a range of values on which frequencies will be counted
                B - a range of intervals used to group values in R
                @FREQUENCY(A1..A8, B1..B2)={3,2,2}
                where A1..A8 = {70,79,80,61,83,93,88,97} and
                      B1..B2 ={80,90}

@FTEST(R1,R2)   Returns the significance level (alpha) of the two-sided
                F-test on the variances of the data specified by
                ranges R1 and R2

@GMEAN(...)     Returns the geometric mean of its arguments
                argumentlist - any combination of numbers, cells,
                or ranges.

@HMEAN(...)     Returns the harmonic mean of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@LARGE(R,N)     Returns the Nth largest datum in range R.
                R - Range of data
                N - Integer specifying which datum to choose.
                @LARGE(A1..A10,3) = 45
                where A1..A10={38,3,9,45,7,90,17,2,75,12}

@MAX(...)       Returns the maximum of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@MEDIAN(...)    Returns the median (middle value) of the range R1.
                @MEDIAN(A1..A6) = 3.5
                where A1..A6 = {1,2,3,4,5,6}

@MIN(...)       Returns the minimum of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@MODE(...)      Returns the mode, or most frequently occurring datum,
                of all the arguments.  Empty cells and cells containing
                text are ignored.
                @MODE(2, 5, 12, 5) = 5;

@MSQ(...)       Returns the mean of the squares of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@PERCENTILE(R,N)
                Returns the datum from the range R which is at the Nth
                percentile in R.  Only numeric data in R are considered.
                The result will be interpolated if N is not a multiple
                of 1/(s-1), where s is the size of R.
                R - A range of data
                N - A numeric value between 0 and 1, inclusive.
                @PERCENTILE(A1..A4, 0.4) = 14.2
                where A1..A4 = {23, 4, 12, 67}

@PERCENTRANK(R,D[,S])
                Returns the percentile rank of the datum D in range R.
                If D does not match one of the values in R, the
                function interpolates to return the correct percentage rank.
                R - Range of numeric data
                D - Datum to find
                S = Number of significant digits
                @PERCENTRANK(A1..A10, 4) = 0.33
                where A1..A10 = {1,2,3,4,5,6,7,8,9,10}.

@PERMUT(S,T)    Returns "S choose T", or the number of T objects that
                can be chosen from the set S, where order is significant.
                S - Number of objects to choose from
                T - Number of objects to be chosen
                @PERMUT(100, 3) = 970200

@PTTEST(R1,R2)  Returns the significance level (alpha) of the two-sided T-test
                for the paired samples contained in ranges R1 and R2
                R1 and R2 must have the same size.

@QUARTILE(R,Q)  Finds the quartile Q of the data in range R.
                Equivalent to @PERCENTILE(R, Q/4)
                R = Range of cells
                Q = Quartile as follows:
                         0      Minimum value
                         1      First quartile (25th percentile)
                         2      Second quartile (50th percentile)
                         3      Third quartile (75th percentile)
                         4      Maximum value

                @QUARTILE(A1..B4, 2) = 7.5
                where A1..B4 = {1,2,4,7,8,9,10,12}

@RANK(E,R,[O])  Returns the rank of a numeric argument E in the
                range R.  The rank of a number is its size relative to
                other values in the list, which is equivalent to it's
                position in the list after the list is sorted.  RANK
                gives duplicate numbers the same rank. The presence of
                duplicate numbers will affect the ranks of subsequent
                numbers.  For examples, if there are two rank of 3,
                the next rank will be 5.
                E - a numeric value whose rank you want to find
                R - a reference to a range of values.  Non-numeric
                    values will be ignored.
                O - a numeric value specifying the way the numbers to
                    be ranked. RANK ranks E as if R is in descending order
                    if O is 0 or omitted. Otherwise, it ranks E as if
                    R is in ascending order.
                @RANK(5, C2..C6) = 2
                @RANK(5, C2..C6, 1) = 3
                @RANK(7, C2..C6, 1) = 5
                where C2..C6 = {2,7,5,1,5}

@RMS(...)       Returns the square root of the mean of squares of its
                arguments, which may be any combination of numbers, cells,
                and ranges.  Blank cells and cells containing strings
                are not counted.

@SMALL(R,N)     Returns the Nth smallest number in range R.
                @SMALL(A1..A10,3) = 7
                where A1..A10={38,3,9,45,7,90,17,2,75,12}

@SSE(...)       Returns the sum squared error of its arguments. This function
                equivalent to @VAR(...)/@COUNT(...)
                argumentlist - any combination of numbers, cells, or ranges

@SSQ(...)       Returns the sum of squares of its arguments
                argumentlist - any combination of numbers, cells, or ranges

@STD(...)       Returns the population standard deviation (N weighting) of its
                arguments
                argumentlist - any combination of numbers, cells, or ranges

@STDS(...)      Returns the population standard deviation (N-1 weighting) of
                its arguments
                argumentlist - any combination of numbers, cells, or ranges

@SUM(...)       Returns the sum of its arguments
                argumentlist - any combination of numbers, cells, or ranges

@T(N,T)         Returns the integral of Student's T-distribution with
                N degrees of freedom from minus infinity to T.
                N, T - numeric values

@TTEST(R,X)     Returns the significance level (alpha) of the two-sided single
                population T-test for the population samples contained
                in range R
                R - a range
                X - a numeric value

@TTEST2EV(R1,R2)
                Returns the significance level (alpha) of the two-sided dual
                population T-test for ranges R1 and R2, where their
                variances are equal

@TTEST2UV(R1,R2)
                Returns the significance level (alpha) of the two-sided single
                population T-test for ranges R1 and R2, where their
                variances are not equal

@VAR(...)       Returns the population variance (N weighting) of its arguments
                argumentlist - any combination of numbers, cells, or ranges

@VARS(...)      Returns the population variance (N-1 weighting) of its
                arguments argumentlist - any combination of numbers,
                cells, or ranges

@VSUM(...)      Returns the "visual sum" of its arguments, using precision and
                rounding of formatted cell values
                argumentlist - any combination of numbers, cells, or ranges

Conditional Statistical Functions


@CAVG(...,C)    Returns the conditional average (mean) of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CCOUNT(...,C)  Returns a conditional count of its non-blank arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CMAX(...,C)    Returns the conditional maximum of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CMIN(...,C)    Returns the conditional minimum of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CSTD(...,C)    Returns the conditional standard deviation (N weighting) of
                its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CSTDS(...,C)   Returns the conditional sample deviation (N-1 weighting)
                of its arguments.
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CSUM(...,C)    Returns the conditional sum of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CVAR(...,C)    Returns the conditional population variance (N weighting)
                of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CVARS(...,C)   Returns the conditional sample variance (N-1 weighting)
                of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

String Functions


@CHAR(N)        Returns the character represented by N in the ASCII
                character set.
                N - an integer value between 1 and 255.

@CLEAN(S)       Returns a "printable" representation of string S by
                stripping out unprintable characters.

@CODE(S)        Returns the ASCII code for the first character in string S.
                S - a string value

@EXACT(S1,S2)   Returns 1 if S1 exactly matches string S2; otherwise, 0
                S1, S2 - string values

@FIND(S1,S2,N)  Returns the index of the first occurrence of S1 in S2
                S1, S2 - String values
                N - a numeric value

@FORMAT(F,N,X)  Returns the string formed by formatting the value X using
                the Xess format code F and precision N
                F - Xess format code
                N - the precision level, from 0 to 15
                X - a numeric value

@HEXTONUM(S)    Returns the numeric value for the hexadecimal interpretation
                of S.
                S - a string value

@LEFT(S,N)      Returns the string composed of the leftmost N characters of S
                If N is greater than or equal to the length of S, then the
                entire string S is returned
                S - a string value
                N - a numeric value

@LENGTH(S)      Returns the number of characters in S
                S - a string value

@LOWER(S)       The string S is converted to lower case
                S - a string value

@MID(S,N1,N2)   Returns the string of length N2 that starts at position N1 in S.
                S - a string value

@NUMTOHEX(X)    Returns the hexadecimal representation of the integer
                portion of X, for -2147483648 <= X <= 2147483647.
                X - a numeric value

@PROPER(S)      Returns a copy of string S with the first letter of
                every word capitalized.

@REGEX(R,S)     Returns True(1) if the strings R and S match, and
                and False (0) otherwise. This function is a regular
                expression pattern matcher and is similar to @EXACT(S1,S2)
                function, except @REGEX allows "wildcard" comparisons.
                R - A string representing a regular expression
                S - A string
                @REGEX("t.*e", "table") = True
                @REGEX("F[0-9]", "F3") = True

@REPEAT(S,N)    Returns a string containing N copies of string S.

@REPLACE(S1,N1,N2,S2)
                Returns the string formed by replacing the N2
                characters starting at position N1 in string
                S1 with string S2.
                @REPLACE("Expense Report",8,3,"Log") = "Expense Logort"
                @REPLACE("Expense Report",8,6,"Log") = "Expense Log"
                @REPLACE("ABC",8,3,"XYZ") = "XYZABC"

@RIGHT(S,N)     Returns the string composed of the rightmost N
                characters of S.  If N is greater than or
                equal to the length of S, then the entire string
                S is returned.

@STRCAT(...)    Returns the concatenation of all its arguments.
                argumentlist - any combination of numbers, cells, or ranges

@STRING(X,N)    Returns the string representing the numeric value of X,
                to N decimal places
                X - a numeric value
                N - a numeric value between 0 and 15

@STRLEN(...)    Returns the total length of all strings in its arguments
                argumentlist - any combination of numbers, cells, or ranges

@TRIM(S)        Returns the string formed by removing leading, trailing,
                and consecutive embedded spaces from string S.

@UPPER(S)       Returns the string S converted to upper case.
                S - a string value

@VALUE(S)       Returns the numeric value represented by the string S
                or 0 if S does not represent a number.
                S - a string value

Logical Functions


@FALSE          Returns the logical value 0

@FILEEXISTS(S)  Returns 1 if file S can be opened to read; otherwise 0
                S - a string value

@IF(X,T,F)      Returns the value of T if X evaluates to non-zero,
                or F if X evaluates to zero
                X -  numeric value
                T,F - numeric or string values, cell or range references

@ISERROR(X)     Returns 1 if X "contains" an error, otherwise 0.
                X is an expression, which may include references to
                other cells.  X "contains" an error if the expression
                causes an error, or if it refers to any cells which
                have errors.
                @ISERROR(3/0) = 1
                @ISERROR(A1) = 1 where A1 contains an error value
                @ISERROR(@ISERROR(3/0)) = 0

@ISNUMBER(X)    Returns 1 if X is a numeric value; otherwise 0
                X - a numeric or a string value

@ISSTRING(X)    Returns 1 if X is a string value; otherwise 0
                X - a numeric or a string value

@TRUE           Returns the logical value 1 (true).

Digital Logic Functions


@AND(...)       Returns 1 if all arguments are 1; 0 if any arguments are 0;
                -1 if any arguments are neither 0 nor 1.
                argumentlist - any combination of numbers, cells or ranges

@NAND(...)      0 if all arguments are 1; 1 if any arguments are 0;
                -1 if any arguments are neither 0 nor 1.
                argumentlist - any combination of numbers, cells or ranges

@NOR(...)       0 if any arguments are 1; 1 if all arguments are 0;
                -1 if any arguments are neither 0 nor 1.
                argumentlist - any combination of numbers, cells or ranges

NOT(X)          Returns 1 if X=0; 0 if X=1; otherwise -1
                argumentlist - any combination of numbers, cells or ranges
                X - a numeric value

@OR(...)        Logical OR function.  Returns 1 if any argument in
                the list equals 1, 0 if not, and -1 if there is any
                argument in the list not equal to 0 or 1.

@XOR(...)       Returns -1 if any arguments are UNKNOWN;
                1 if the total number of arguments with the value 1 is odd;
                0 if the total number of arguments with the value 1 is even.
                argumentlist - any combination of numbers, cells or ranges

Financial Functions


@ACCRINT(I,Ft,S,R,P,F[,B])
                Returns the accrued interest for a security that pays
                periodic interest.  Accrued interest is the amount the
                buyer must compensate the seller for the portion of
                the next coupon interest payment the seller has earned
                but will not receive from the issuer.
                I - issue date
                Ft - first coupon date of the security.
                S - settlement date
                R - annual coupon rate
                P - par value of the security
                F - number of coupon payments per year
                B - day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365
                Example:
                A security has the following terms: 4/1/93 settlement date,
                6/1/93 maturity date, 10% semiannual coupon, $1000 par
                value, 30/360 bais
                @accrint(34060,34121,10%,1000,2,0) = 33.333

@ACCRINTM(I,S,R,P[,B])
                Returns the accrued interest for a security that pays
                interest at maturity
                I - the issue date
                S - the settlement date
                R - the annual coupon rate
                P - the par value of the security
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPDAYBS(S,M,F[,B])
                Returns the number of days between the beginning of the
                coupon period to the settlement date.
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPDAYS(S,M,F[,B])
                Returns the number of days in the coupon period that
                the settlement date is in.
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0   30/360
                    1   actual/actual
                    2   actual/360
                    3   actual/365

@COUPDAYSNC(S,M,F[,B])
                Returns the number of days between the settlement date
                and the next coupon date.
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPNCD(S,M,F[,B])
                Returns the next coupon date after the settlement date.
                S - the settlement date.
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPNUM(S,M,F[,B])
                Returns the number of coupon payments between the
                settlement date and munurity date.
                S - settlement date
                M - maturity date
                F - the number of coupon payments per year
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPPCD(S,M,F[,B])
                Returns the previous (most recent) coupon date before
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@CTERM(R,FV,PV) Returns the number of compounding periods for an investment
                R - Rate of return ( e.g. .07 for 7 %)
                FV - future value of the investment
                PV - present value of the investment

@CUMIPMT(R,NP,PV,S,E,T)
                Returns the cumulative interest on a a loan between S
                (start period) and E (end period).
                R - interest rate
                NP - the total number of payment periods.  Make sure
                     the units used be R and NP are consistent.  For
                     example, for a 5-year loan with 12% annual
                     interest, if you make payment monthly, use 12%/12
                     for (monthly) R and 5*12 for NP. If you mkae
                     annual payment on the same loan, use 12% for R
                     and 5 for NP.
                PV - the present value of the loan.
                S - start period.  It's the first period in the calculation.
                E - end period.  It's the last period in the calculation.
                T - timing of the payment
                    0   payment is made at the end of the period.
                    1   payment is made at the beginning of the period.

@CUMPRINC(R,NP,PV,S,E,T)
                Returns the cumulative principal paid on a a loan between S
                (start period) and E (end period).
                R - interest rate
                NP - the total number of payment periods.  Make sure
                     the units used be R and NP are consistent.  For
                     example, for a 5-year loan with 12% annual
                     interest, if you make payment monthly, use 12%/12
                     for (monthly) R and 5*12 for NP. If you mkae
                     annual payment on the same loan, use 12% for R
                     and 5 for NP.
                PV - the present value of the loan.
                S - start period.  It's the first period in the calculation.
                E - end period.  It's the last period in the calculation.
                T - timing of the payment
                    0   payment is made at the end of the period.
                    1   payment is made at the beginning of the period.

@DB(C,S,L,P[,M])
                Returns the depreciation of an asset for a specific
                period using the fixed-declining balance method.
                C - the initial cost of the asset.
                S - salvage , the value at the end of the depreciation.
                L - life, the total number of periods over which the asset
                    is being depreciated.
                P - the period the depreciation will be calculated.
                M - the number of months in the first period.  if
                    omitted, The default is 12.

@DDB(C,S,L,N)   Returns the double-declining depreciation allowance
                C - cost
                S - salvage value
                L - allowable value
                N - number of depreciation periods

@DISC(S,M,P,R[,B])
                Returns the discount rate for a security.
                S - the settlement date
                M - the maturity date
                P - the price of the security per $100 face value
                R - the security's redemption value per $100 face
                    value at maturity
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@DOLLARDE(FD,F) Coverts a dollar amount expressed as a fraction form into a
                a decimal form.
                FD - the dollar amount in fractional form.
                F - the integer to used as the denominator of the
                    fraction.
                @DOLLARDE(10.04, 16) = 10.25
                @DOLLARDE(10.2, 8) = 10.25

@DOLLARFR(DD,F) Coverts a dollar amount expressed as a dedimal form into a
                a fraction form.
                FD - the dollar amount in decimal form.
                F - the integer to used as the denominator of the
                    fraction.
                @DOLLARFR(10.25, 16) = 10.04
                @DOLLARFR(10.25, 8) = 10.2

@DURATION(S,M,R,Y,F[,B])
                Returns the Macauley duration of a security assuming
                $100 face value.  The Macauley duration is defined a sthe
                weighted average of the present value of the cash flows.
                S - the settlement date
                M - the maturity date
                R - the security's annual coupon rate
                Y - the security's annual yield
                F - the number of coupon payments per year
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@EFFECT(NR,NP)  Returns the effectve annual interest rate.
                NR - nominal annual interest rate
                NP - number of compounding periods per year.
                @EFFECT(6%, 4) = 0.061364 or 6.1364%

@FV(P,R,N)      Returns the future value of an annuity
                P - periodic payment
                R - interest rate
                N - number of periods

@FVSCHEDULE(P,S)
                Returns the future value of an initial investment
                after compounding a series of interest rates.
                P - initial investment principal
                S - a range of numeric numbers represents an interest
                @FVSCHEDULE(100, A1..A4) = 141.04
                where A1..A4 = {6%,8%,10%,12%}

@INTRATE(S,M,I,R[,B])
                Returns the interest rate for a fully invested
                security
                S - settlement date
                M - maturity date
                I - amount of investment in the security
                R - redemption at mutirity
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@IPMT(R,P,NP,PV,FV[,T])
                Returns the interest payment for a specific period for
                an investment based on periodic, constant payments and
                a constant interest rate.
                R - interest rate per period
                P - the period for which the interest will be calculated
                NP - the total number of payment periods.  Make sure
                     the units used be R and NP are consistent.  For
                     example, for a 5-year loan with 12% annual
                     interest, if you make payment monthly, use 12%/12
                     for (monthly) R and 5*12 for NP. If you mkae
                     annual payment on the same loan, use 12% for R
                     and 5 for NP.
                PV - present value of the investment.
                FV - future value or a cash balance you would like to
                     attain at the end of the last period.
                T - timing of the payment
                    0   payment is made at the end of the period.
                    1   payment is made at the beginning of the period.

@IRR(G,F)       Returns the internal rate of return on an investment
                Related functions: @XIRR and @MIRR
                G - a numeric value (an initial "guess" G)
                F - cash flow, represented by a range. It must contain
                at least two cash flow values

@MDURATION(S,M,R,Y,F[,B])
                Returns the modified Macauley duration of a security
                assuming $100 face value.
                S - the settlement date
                M - the maturity date
                R - the security's annual coupon rate
                Y - the security's annual yield
                F - the number of coupon payments per year
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@MIRR(CF,FR,RR)
                Returns the modified internal rate of return fro a
                series of periodic cash flows.
                CF - a reference to a series of cash flows.  CF must
                     contain at least one positive value (income) and
                     one negative value (payment).
                FR - finance interest rate
                RR - reinvestment interest rate.

@NOMINAL(ER, NP)
                Returns the nominal annual interest rate.
                ER - effective annual interest rate.
                NP - number of compounding periods per year.

@NPV(R,CF)      Returns the present value of a series of future cash flows at
                a given rate.  Related functions: @MNPV and @XNPV.
                R - periodic interest rate
                CF - future cash flow series (must be a range)

@ODDFPRICE(S,M,I,FC,R,Y,RD,F[,B])
                Returns the price per $100 face value of a security
                with an odd (shor or long) first period.
                S - settlement date
                M - maturity date
                I - issue date
                FC - first coupon date of the security
                R - annual coupon rate of the security
                Y - annual yield of the security
                RD - redemption value of the security at maturity per
                    $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@ODDFYIELD(S,M,I,FC,R,PR,RD,F[,B])
                Returns the yield per of a security with an odd (short
                or long) first period.
                S - settlement date
                M - maturity date
                I - issue date
                FC - first coupon date of the security
                R - annual coupon rate of the security
                PR - the price of the security per $100 face value
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@ODDLPRICE(S,M,LC,R,Y,RD,F[,B])
                Returns the price per $100 face value of a security
                with an odd (short or long) last period.
                S - settlement date
                M - maturity date
                LC - first coupon date of the security
                R - annual coupon rate of the security
                Y - annual yield of the security
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@ODDLYIELD(S,M,LC,R,PR,RD,F[,B])
                Returns the yield per of a security with an odd (short
                or long) first period.
                S - settlement date
                M - maturity date
                LC - Last coupon date of the security
                R - annual coupon rate of the security
                PR - the price of the security per $100 face value
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@PMT(P,R,N)     Returns the periodic payment for a loan, given the
                present value P and interest rate R, and the number
                of periods N.
                P,R,N - Numeric values

@PPMT(R,P,NP,PV,FV,T)
                Returns the payment on the principal for a specific
                period for an investment based on periodic, constant
                payments and a constant interest rate.
                R - interest rate per period
                P - the period for which the interest will be calculated
                NP - the total number of payment periods.  Make sure
                     the units used be R and NP are consistent.  For
                     example, for a 5-year loan with 12% annual
                     interest, if you make payment monthly, use 12%/12
                     for (monthly) R and 5*12 for NP. If you mkae
                     annual payment on the same loan, use 12% for R
                     and 5 for NP.
                PV - present value of the investment.
                FV - future value or a cash balance you would like to
                     attain at the end of the last period.
                T - timing of the payment
                    0   payment is made at the end of the period.
                    1   payment is made at the beginning of the period.

@PRICE(S,M,R,Y,RD,F[,B])
                Returns the price per $100 face value of a security
                that pays periodic interest
                S - settlement date
                M - maturity date
                R - annual coupon rate of the security
                Y - annual yield of the security
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@PRICEDISC(S,M,D,RD[,B])
                Returns the price per $100 face value of a discounted
                security.
                S - settlement date
                M - maturity date
                D - discount rate of the security
                RD - redemption value of the security at maturity per
                     $100 face value
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@PRICEMAT(S,M,I,R,Y[,B])
                Returns the price per $100 face value of a security
                that pays interest at maturity
                S - settlement date
                M - maturity date
                I - issue date
                R - annual coupon rate of the security
                Y - annual yield of the security
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@PV(P,R,N)      Returns the present value of an annuity given
                periodic payment P, interest rate R, and N
                periods.

@RATE(F,P,N)    Returns the interest rate required to go from present
                value P to future value F in N compounding periods.

@RECEIVED(S,M,I,D[,B])
                Returns the value at maturity of a fully invested
                security. Dates must be entered as a serial date value.
                S = Settlement date, date of purchase
                M = Maturity date.
                I = Investment amount
                D = Discount rate
                B = Day count basis as follows:
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@SLN(C,S,L)     Returns the straight-line depreciation allowance
                given cost C, salvage value S, and allowable life L.

@SYD(C,S,L,N)   Returns the "sum-of-years-digits" depreciation allowance
                given cost C, salvage value S, allowable life L, and
                N depreciation periods.

@TBILLEQ(S,M,D) Returns the bond-equivalent yield (BEY) for a Treasury Bill.
                If the term is one half-year or less, BEY is
                equivalent to a actural/365 simple interest rate.  If
                the term of the security is more than one-half year,
                BEY is equivalent to a semiannually compounded
                Treasury bond yield.
                S = Settlement date
                M = Maturity date
                D = Discount rate of Treasury Bill

@TBILLPRICE(S,M,D)
                Returns the price per $100 face value for a Tresury
                bill.
                S - settlement date
                M - maturity date
                D - discount rate of the Tresury bill

@TBILLYIELD(S,M,D)
                Returns the yield on a treasury bill, given settlement
                date S, maturity date M, and discount rate D.
                S = Settlement date
                M = Maturity date
                D = Discount rate of Treasury Bill

@TERM(P,R,FV)   Returns the number of payment periods for an investment
                P - amount of periodic payments
                R - interest rate
                FV - future value of the investment

@VDB(C.S,L,S,E) Returns the depreciation of an asset between two specific
                period using the fixed-declining balance method.
                C - the initial cost of the asset.
                S - salvage , the value at the end of the depreciation.
                L - life, the total number of periods over which the asset
                    is being depreciated.
                S - Starting period for the calculation
                E - Ending period for the calculation.

@XIRR(G,V,D)    Returns the internal rate of return for a series of
                cash flows with variable intervals
                G - a guessed value of the result
                V - a range, contains a series of cash flows
                D - a range, contains the schedule of cash flows in V
                V and D must be one-dimentional ranges and have the
                same size.

@XNPV(R,V,D)    Returns the net present value for a series of cahs
                flows with variable intervals.
                R - discount rate to apply to the cash flows
                V - a range, contains a series of cash flows
                D - a range, contains the schedule of cash flows in V
                V and D must be one-dimentional ranges and have the
                same size.

@YIELD(S,M,R,PR,RD,F[,B])
                Returns the yield of a security that pays periodic
                interest
                Returns the yield per of a security with an odd (short
                or long) first period.
                S - settlement date
                M - maturity date
                R - annual coupon rate of the security
                PR - the price of the security per $100 face value
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@YIELDDISC(S,M,PR,RD[,B])
                Returns the annual yield for a discounted security
                S - settlement date
                M - maturity date
                PR - the price of the security per $100 face value
                RD - redemption value of the security at maturity per
                     $100 face value
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@YIELDMAT(S,M,I,R,PR[,B])
                Returns the annual yield of a security which pays interest at
                maturity.  All dates must be expressed as serial date values.
                S = settlement date
                M = maturity date
                I = issue date
                R = interest rate at date of issue
                PR = the price of the security per $100 face value
                B = the day count basis to be used:
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

Date and Time Functions


@DATE(Y,M,D)    returns the date value for year Y, month M, and date D.
                Y - year
                M - month
                D - day

@DATEVALUE(S)   Returns the corresponding date value for a given string S.
                S - string value of a date.
                Examples:
                @DATEVALUE("September-91")
                @DATEVALUE("3/24/54")

@DAY(DT)        Returns the day number in the date/time value DT.
                DT - a date/time value

@DAYS360(S,E)   Returns the number of days between two dates, based
                on a 30/360 day count system.  A 30/360 day count
                system assumes 30-day months, except the following
                case: if E is on the 31st day of the month, and S is
                neither on the 30th or 31st day of the month, E
                remains to be the 31st day of the month.
                S - start date
                E - end date
                @DAYS360(@DATEVALUE("5/30/93"), @DATEVALUE("6/1/93")) = 1
                @DAYS360(@DATEVALUE("1/1/92"), @DATEVALUE("7/1/93")) = 180
                @DAYS360(@DATEVALUE("7/1/93"), @DATEVALUE("7/31/93) = 30

@EDATE(S,M)     Returns a date/time value representing the date M
                months after S, if M is positive, and M months before
                S, if M is negative.  The date returned will be on the
                same day of the month as S.
                S - Start date, a date/time value
                M - Months, an integer
                @EDATE(@DATEVELUE("3/2/92"), 2) = 33726 or 05/02/92
                @EDATE(@DATEVALUE("3/31/91"), -6) = 33146 or 09/30/90
                @EDATE(@DATEVALUE("3/31/91"), -1) = 33297 or 02/28/91

@EOMONTH(S,M)   Returns a date/time value representing the date M
                months after S, if M is positive, and M months before
                S, if M is negative.  The date returned will be on the
                last day of the month.
                S - Start date, a date/time value
                M - Months, an integer
                @EDATE(@DATEVALUE("3/2/92"), 2) = 34120 or 05/31/93
                @EDATE(@DATEVALUE("3/15/93"), -13) = 33663 or 02/29/93

@HOUR(DT)       Returns the hour value (0-23) of date/time value DT.
                DT - a date/time value

@MINUTE(DT)     Returns the minute value (0-59) of date/time value DT.
                DT - a date/time value

@MONTH(DT)      Returns the number of the month in date/time value DT.
                DT - a date/time value

@NETWORKDAYS(S,E[,H])
                Returns the number of whole working days, starting
                at S and going to E, excluding weekends and holidays
                in H. If a holiday happens to be on weekend, only one
                day will be excluded.
                S - Starting date, a date/time value
                E - Ending date, a date/time value
                H - A range of dates to exclude, such as holidays.
                @NETWORKDAYS(@DATEVALUE("1/1/93"),@DATEVALUE("12/31/93"),
                             A38..A40) = 258
                where A38..A40={01/01/93, 05/25/93, 07/04/93}

@NOW            Returns the date/time value of the current system date
                and time.

@SECOND(T)      Returns the seconds (0 - 59) component of the
                date/time value T.

@TIME(H,M,S)    Returns the time value represented as a fraction of a day,
                starting at midnight.  H (hours) must be between 0 and 23,
                M (minutes) and S (seconds) must be between 0 and 59.

@TIMEVALUE(S)   Returns the corresponding time value for a given string
                value S.
                Example:
                @TIMEVALUE("12:55:00 AM")
                @TIMEVALUE("0:55.00")

@TODAY          Returns the date value corresponding to the current
                system date.

@WEEKDAY(D)     Returns an integer representing the day of the week
                on which the day D falls.  1 is Sunday, 7 is Saturday.

@WORKDAY(S,D[,H]) Returns the day that is D working days after S, if D
                is positive, before S, if D is negtive, excluding
                weekends and all holidays specified as dates in range
                H.  If a holiday happens to be on weekend, only one
                day will be excluded.
                S - Starting date, a date/time value
                D - The number of non-weekend and non-holiday days
                    before and after S.
                H - A range of dates to exclude, such as holidays.
                @NETWORKDAYS(@DATEVALUE("1/1/93"),@DATEVALUE("12/31/93"),
                             A38..A40) = 258
                where A38..A40={01/01/93, 05/25/93, 07/04/93}

@YEAR(DT)       Returns the year value of date/time value DT.
                DT - a date/time value

@YEARFRAC(S,E[,B])
                Returns the portion of the year represented by
                the number of days between start date (s) and
                end date (E).
                S - start date value
                E - end date value
                B = the day count basis to be used:
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

Miscellaneous Functions


@@(R)           Reference to the cell or range R

@ALARM(X,S)     If X evaluates non-zero, then the string S is evaluated
                as an expression, and the terminal beeps. The return value
                is set to the result of evaluating the S expression. If
                X evaluates to zero, S is not evaluated and the return
                value is zero. See also @SALARM function below.
                e.g. @ALARM(pressure > 500, "@REMOTE_FN(Pressure)")

@ANNOTATE(S,X,Y[,H[,V]])
                Generates a string suitable for use as an Xess graph
                annotation, in which case it will cause the string S
                to be displayed at position (X,Y) within the graph.  The
                optional parameters H and V specify how the string S
                will be justified with respect to the point (X,Y).
                H and V represnet horizontal and vertical justication values.
                (H,V)  ->   X,Y Placement
                (0,0)       bottom left corner of S (the default).
                (0,1)       top left corner of S.
                (1,0)       bottom right corner of S.
                (1,1)       top right corner of S.

                S - a string value
                X,Y - graph coordinates
                H,V - optional text justification parameters
                Example:
                @ANNOTATE("Average",5/2,12,1,0.5) = "(2.5,12,1,0.5)Average"

@CELLREF(C,R)   Returns the value contained in cell C,R.
                C - Column, an integer value
                R - Row, an integer value

@CHOOSE(N,...)  Returns the value at the Nth place in the argument
                list.
                N - an integer.
                @CHOOSE(2,"mary","sue","beth") ==> "sue"

@COL(C)         Returns the column associated with cell C, or the
                left-most column if C is a range.  Returns the column
                of the current cell if C is omitted.

@COLS(R)        Returns the number of columns in range R.

@HLOOKUP(X,R,N) Searches the first row (known as the index row)
                in range R for the numeric or string value which "matches"
                X, and returs the value N rows below in the column
                where the match is found.  The index row is searched from
                left to right.  If X is a string value, an exact match must
                be found or an error is returned.  If X is a numeric value,
                the matching column is determined by the following rules:
                1) Strings and blank cells in the index row are ignored.
                2) If the first value in the index row is greater than X,
                   an error is returned.
                3) Searching stops when a numeric value which is greater than
                   or equal to X is found in the index row.  If the value
                   found is greater than X, the preceding column is the
                   matching column.
                4) If there are no numeric values in the index row which are
                   greater than or equal to X, the last column in R is
                   considered to be the matching column.

@INIT(X1,X2)    Returns its first argument on the first recalculation pass
                and its second argument on all subsequent recalculation
                passes when Xess is performing iterative calculations.
                X1 - initial value
                X2 - iterative or subsequent value

@INTERP2D(R1,R2,N)
                Returns interporlation value for a 2 dimensional
                vector.
                R1 - a range reference points to  x values of the vector;
                R2 - a range reference points to  y values of the
                     vector.  XR and YR have to be same size.
                N  - a numerical value or range for which the
                     interporlation value will be based on.

@INTERP3D(R,X,Y)
                Returns interporlation value for a 3 dimensional
                vector.  X and Y ranges must be the same size.
                R - a range reference points to x, y and z values of
                    the vector;
                X, Y  - numerical values or ranges for which the
                    interporlation value will be based on.

@MATCH(V,R[,T]) Returns the relative position in range R of
                value V in a specific way.
                V - the value to be matched.  V can be a string,  a
                    numeric value.  If V is a string, T must be 0.  MATCH
                    allows regular expression type "wildcard".
                T - match type
                    T > 0 means find largest value in R <= V
                    T = 0 or omitted means find first value in R = V
                    T < 0 means find smallest value in R >= V

@MESSAGE(X,S)   If X evaluates non-zero, the string S is displayed on
                the status line and the terminal beeps. The return
                value of the function is set to the value of X.
                e.g. @MESSAGE(@HOUR(@NOW) < 17, "Time to go home!")
                Tells you that it is time to go home after 5:00 PM.

@N(R)           Returns the numeric value of the top left cell in range R
                R - a range

@RANGEREF(UC,UR,LC,LR)
                Returns a reference to the range described by
                the corner co-ordinates UC, UR, LC, LR.
                UC = Upper left column of the range
                UR = Upper left row of the range
                LC = Lower right column of the range
                LR = Lower right row of the range

@ROW(C)         Returns the row index of the cell referenced by C,
                the top row of C if C is a range, or the current
                row if C is omitted.

@ROWS(R)        Returns the number of rows in the specified range R.

@S(R)           Returns the string value of the top left cell in range R.
                Returns a null string if the cell is blank or contains a
                numeric value.
                R - a range

@SALARM(X,S)    If X evaluates non-zero, then the string S is evaluated
                as an expression. The return value is set to the result
                of evaluating the S expression. If X evaluates to zero,
                S is not evaluated and the return value is zero. Does
                not beep like the @ALARM function above.
                e.g. @SALARM(pressure > 500, "@REMOTE_FN(Pressure)")

@VLOOKUP(X,R,N) Searches the first column (known as the index column)
                in range R for the numeric or string value which "matches"
                X, and returs the value N columns to the right in the row
                where the match is found.  The index column is searched from
                top to bottom.  If X is a string value, an exact match must
                be found or an error is returned.  If X is a numeric value,
                the matching row is determined by the following rules:
                1) Strings and blank cells in the index column are ignored.
                2) If the first value in the index column is greater than X,
                   an error is returned.
                3) Searching stops when a numeric value which is greater than
                   or equal to X is found in the index column.  If the value
                   found is greater than X, the preceding row is the matching
                   row.
                4) If there are no numeric values in the index column which are
                   greater than or equal to X, the last row in R is considered
                   to be the matching row.

Functions (alphabetical)


Function        Returns

@@(R)           Reference to the cell or range R

@ABS(X)         Returns the absolute value of X
                X - a numeric value

@ACCRINT(I,Ft,S,R,P,F[,B])
                Returns the accrued interest for a security that pays
                periodic interest.  Accrued interest is the amount the
                buyer must compensate the seller for the portion of
                the next coupon interest payment the seller has earned
                but will not receive from the issuer.
                I - issue date
                Ft - first coupon date of the security.
                S - settlement date
                R - annual coupon rate
                P - par value of the security
                F - number of coupon payments per year
                B - day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365
                Example:
                A security has the following terms: 4/1/93 settlement date,
                6/1/93 maturity date, 10% semiannual coupon, $1000 par
                value, 30/360 bais
                @accrint(34060,34121,10%,1000,2,0) = 33.333

@ACCRINTM(I,S,R,P,[B])
                Returns the accrued interest for a security that pays
                interest at maturity
                I - the issue date
                S - the settlement date
                R - the annual coupon rate
                P - the par value of the security
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@ACOS(X)        Returns the arc cosine of X
                X - a numeric value between -1 and 1

@ACOSH(X)       Returns the hyperbolic arc cosine of X
                X - a numeric value greater than or equal to 1

@ALARM(X,S)     If X evaluates non-zero, then the string S is evaluated
                as an expression, and the terminal beeps. The return value
                is set to the result of evaluating the S expression. If
                X evaluates to zero, S is not evaluated and the return
                value is zero. See also @SALARM function below.
                e.g. @ALARM(pressure > 500, "@REMOTE_FN(Pressure)")

@AND(...)       Returns 1 if all arguments are 1; 0 if any arguments are 0;
                -1 if any arguments are neither 0 nor 1.
                argument list - any combination of numbers, cells or ranges

@ANNOTATE(S,X,Y[,H[,V]])
                Generates a string suitable for use as an Xess graph
                annotation, in which case it will cause the string S
                to be displayed at position (X,Y) within the graph.  The
                optional parameters H and V specify how the string S
                will be justified with respect to the point (X,Y).
                H and V represnet horizontal and vertical justication values.
                (H,V)  ->   X,Y Placement
                (0,0)       bottom left corner of S (the default).
                (0,1)       top left corner of S.
                (1,0)       bottom right corner of S.
                (1,1)       top right corner of S.

                S - a string value
                X,Y - graph coordinates
                H,V - optional text justification parameters
                Example:
                @ANNOTATE("Average",5/2,12,1,0.5) = "(2.5,12,1,0.5)Average"

@ASIN(X)        Returns the arc sine of X
                X - a numeric value between -1 and 1

@ASINH(X)       Returns the hyperbolic arc sine of X
                X - a numeric value

@ATAN(X)        Returns the 2-quadrant arc tangent of X
                X - a numeric value

@ATANH(X)       Returns the hyperbolic arc tangent of X
                X - a numeric value greater than -1 and less
                than 1.

@ATAN2(X,Y)     Returns the 4-quadrant arc tangent of Y/X
                X, Y - numeric values, one of them must be non-zero

@AVG(...)       Returns the average (mean) of its arguments
                argumentlist - any combination of numbers, cells or ranges

@CAVG(...,C)    Returns the conditional average (mean) of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CCOUNT(...,C)  Returns a conditional count of its non-blank arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CEIL(X)        Returns the smallest integer greater than or equal to X
                X - a numeric value

@CELLREF(C,R)   Returns the value contained in cell C,R.
                C - Column, an integer value
                R - Row, an integer value

@CHAR(N)        Returns the character represented by N in the ASCII
                character set.
                N - an integer value between 1 and 255.

@CHOOSE(N,...)  Returns the value at the Nth place in the argument
                list.
                N - an integer.
                @CHOOSE(2,"mary","sue","beth") ==> "sue"

@CLEAN(S)       Returns a "printable" representation of string S by
                stripping out unprintable characters.

@CMAX(...,C)    Returns the conditional maximum of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CMIN(...,C)    Returns the conditional minimum of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CODE(S)        Returns the ASCII code for the first character in string S.
                S - a string value

@COL(C)         Returns the column associated with cell C, or the
                left-most column if C is a range.  Returns the column
                of the current cell if C is omitted.

@COLS(R)        Returns the number of columns in range R.

@CORR(R1,R2)    Returns Pearson's product-moment correlation coefficient for
                the paired data in ranges R1 and R2
                R1, R2 must have the same dimensions

@COS(X)         Returns the cosine of X
                X - a numeric value

@COSH(X)        Returns the hyperbolic cosine of X
                X - a numeric value

@COUNT(...)     A count of its non-blank arguments
                argumentlist - any combination of numbers, cells or ranges

@CCOUNT(...,C)  Returns a conditional count of its non-blank arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@COUPDAYBS(S,M,F,[B])
                Returns the number of days between the beginning of the
                coupon period to the settlement date.
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPDAYS(S,M,F,[B])
                Returns the number of days in the coupon period that
                the settlement date is in.
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0   30/360
                    1   actual/actual
                    2   actual/360
                    3   actual/365

@COUPDAYSNC(S,M,F,[B])
                Returns the number of days between the settlement date
                and the next coupon date.
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPNCD(S,M,F,[B])
                Returns the next coupon date after the settlement date.
                S - the settlement date.
                M - the maturity date
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPNUM(S,M,F,[B])
                Returns the number of coupon payments between the
                settlement date and munurity date.
                S - settlement date
                M - maturity date
                F - the number of coupon payments per year
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@COUPPCD(S,M,F,[B])
                Returns the previous (most recent) coupon date before
                S - the settlement date
                M - the maturity date
                F - the number of coupon payments per year
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@CSTD(...,C)    Returns the conditional standard deviation (N weighting) of
                its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CSTDS(...,C)   Returns the conditional sample deviation (N-1 weighting)
                of its arguments.
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CSUM(...,C)    Returns the conditional sum of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CTERM(R,FV,PV) Returns the number of compounding periods for an investment
                R - Rate of return ( e.g. .07 for 7 %)
                FV - future value of the investment
                PV - present value of the investment

@CUMIPMT(R,N,P,S,E,T)
                Returns the cumulative interest paid between S
                (start) and E (end) on a loan.
                R - Rate, a number
                N - Number of payments, an integer > 0
                P - Present Value
                S - Start of loan
                E - End of loan
                T - Type is the timing of the loan: 0 means payment
                at the end of each period, and 1 means payment at
                the beginning of each period.

@CUMPRINC(R,N,P,S,E,T)
                Returns the cumulative principle paid between S
                (start) and E (end) on a loan.
                R - Rate, a number
                N - Number of payments, an integer > 0
                P - Present Value
                S - Start of loan
                E - End of loan
                T - Type is the timing of the loan: 0 means payment
                at the end of each period, and 1 means payment at
                the beginning of each period.

@CVAR(...,C)    Returns the conditional population variance (N weighting)
                of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@CVARS(...,C)   Returns the conditional sample variance (N-1 weighting)
                of its arguments
                argumentlist - any combination of numbers, cells, or ranges
                C - a constraint expression

@DATE(Y,M,D)    returns the date value for year Y, month M, and date D.
                Y - year
                M - month
                D - day

@DATEVALUE(S)   Returns the corresponding date value for a given string S.
                S - string value of a date.
                Examples:
                @DATEVALUE("September-91")
                @DATEVALUE("3/24/54")

@DAY(DT)        Returns the day number in the date/time value DT.
                DT - a date/time value

@DAYS360(S,E)   Returns the number of days between two dates, based
                on a 30-month/360-day year.
                S,E - date/time values
                @DAYS360(@DATEVALUE("16-NOV-93"),@DATEVALUE("17-NOV-93"))

@DB(C,S,L,N,M)  Returns the fixed-declining real depreciation of an
                asset for a specified period.
                C - initial Cost of asset
                S - Salvage value of asset
                L - Number of periods over which the asset is
                depreciating (Life)
                N - Number of periods over which to calculate the
                depreciation.
                M - (optional) Number of Months in the first year,
                which is assumed to be 12 if omitted.

@DDB(C,S,L,N)   Returns the double-declining depreciation allowance
                C - cost
                S - salvage value
                L - allowable value
                N - number of depreciation periods

@DEGREES(X)     Returns 180/pi times X, converting radians to degrees.
                X - a numeric value

@DET(M)         Returns the determinant of the matrix range M, which
                must be a square matrix.
                M - a range, which must contain an equal number of
                rows and columns.

@DFT(R)         The Discrete Fourier Transform of the range R.
                R must represent a real vector (either its row or column
                dimension must be 1) or a complex vector (either its row
                or column dimension must be 2). The result is always a
                complex vector.
                R - a range representing the vector to be transformed.

@DISC(S,M,P,R,B)
                Returns the discount rate of a security.
                S - Settlement date
                M - Maturity
                P - Price per $100
                R - Redemption value per $100
                B - Basis is the standard day count basis

@DOLLARDE(D,F)  Returns the amount in Dollar Decimal form of an amount
                expressed in fractional form.
                D - Dollars (in decimal form)
                F - Fraction (denominator of fraction)

@DOLLARFR(D,F)  Returns the amount in Dollar Fractional form of an
                amount expressed in decimal form.
                D - Dollars (in fractional form)
                F - Fraction (denominator of fraction)

@DOT(R1,R2)     Returns the dot product of the vectors R1 and R2
                R1, R2 - each a range, which must contain an equal
                number of rows and columns, or must be a dimension
                1 x n (row vector) or n x 1 (column vector).

@DURATION(S,M,C,Y,F,B)
                Returns the Macauley duration for an assumed par
                value of $100.
                S - Settlement date, a date/time value
                M - Maturity date, a date/time value
                C - Annual Coupon rate
                Y - Annual Yield
                F - Frequency -- number of payments per year.
                B - Basis is the day count basis

@EDATE(S,M)     Returns a date/time value representing the date M
                months after S, if M is positive, and M months before
                S, if M is negative.  The date returned will be on the
                same day of the month as S.
                S - Start date, a date/time value
                M - Months, an integer

@EFFECT(R,P)    Returns the effective annual interest rate.
                R - Nominal Rate
                P - Number of compounding Periods per year

@EIGEN(M)       Generates the eigenvalues of the matrix M, which must be square
                and symmetric.
                M - a matrix which must be square and symmetric.

@EOMONTH(S,M)   Returns a date/time value representing the date M
                months after S, if M is positive, and M months before
                S, if M is negative.  The date returned will be on the
                last day of the month.
                S - Start date, a date/time value
                M - Months, an integer

@ERF(L[,U])     Returns the error function integrated between L (lower
                limit) and U (upper limit).  If U is omitted, @ERF
                integrates between 0 and L.
                L, R - a non-negative numeric value

@ERFC(L)        Returns the comlementary error function integrated
                between L and infinity.  @ERFC(L)=1-@ERF(L).
                L - a non-negative numeric value

@EXACT(S1,S2)   Returns 1 if S1 exactly matches string S2; otherwise, 0
                S1, S2 - string values

@EXP(X)         Returns e raised to the X power
                X - a numeric value representing exponentiation

@F(M,N,F)       Returns the integral of Snedecor's F-distribution with M and N
                degrees of freedom from minus infinity to F
                M,N,F - numeric values

@FACT(X)        Returns X * (X-1) * ... * 1 (X factorial, or X!)
                X is a numeric value.

@FALSE          Returns the logical value 0

@FFT(R)         Generates the Discrete Fourier Transform of the range R
                using a Fast Fourier Transform algorithm.  The length of
                the vector must be a power of 2. @FFT will produce the
                same results as @DFT, but is much faster (N*log(N)) times
                as opposed to N**2 times.
                R - a range representing the vector to be transformed.

@FIND(S1,S2,N)  Returns the index of the first occurrence of S1 in S2
                S1, S2 - String values
                N - a numeric value

@FILEEXISTS(S)  Returns 1 if file S can be opened to read; otherwise 0
                S - a string value

@FIND(I,T,N)    Returns the index of the first occurrence of string
                I in string T, starting at search position N in
                string T.  Note that the index of a string starts
                with 0.
                @FIND("bc","abcdefg",0)=1

@FLOOR(X)       Returns the largest integer less than or equal to X
                X - a numeric value

@FORECAST(X,R1,R2)
                Returns a predicted Y value for X when R1 and R2 are
                known x values and y values respectively

@FORMAT(F,N,X)  Returns the string formed by formatting the value X using
                the Xess format code F and precision N
                F - Xess format code
                N - the precision level, from 0 to 15
                X - a numeric value

@FRAC(X)        Returns the fractional portion of X
                X - a numeric value

@FREQUENCY(R, B)
                Returns a frequency distribution for a set of values R
                with a set of intervals B.
                R - a range of values on which frequencies will be counted
                B - a range of intervals used to group values in R
                @FREQUENCY(A1..A8, B1..B2)={3,2,2}
                where A1..A8 = {70,79,80,61,83,93,88,97} and
                      B1..B2 ={80,90}

@FTEST(R1,R2)   Returns the significance level (alpha) of the two-sided
                F-test on the variances of the data specified by
                ranges R1 and R2

@FV(P,R,N)      Returns the future value of an annuity
                P - periodic payment
                R - interest rate
                N - number of periods

@FVSCHEDULE(P,R)
                Returns the future value of an initial principle
                after compounding by a series of interest rates.
                P - Principal, or Present value
                R - An array of interest rates by which to compound

@GAMMA(X)       Returns the value of the gamma function evaluated at X
                X - a numeric value which must be non-negative

@GMEAN(...)     Returns the geometric mean of its arguments
                argumentlist -- any combination of numbers, cells,
                or ranges.

@GRAND          Returns a 12th-degree binomial approximation to a Gaussian
                random number with zero mean and unit variance

@HEXTONUM(S)    Returns the numeric value for the hexadecimal
                interpretation of S.
                S - a string value

@HLOOKUP(X,R,N) Searches the first row (known as the index row)
                in range R for the numeric or string value which "matches"
                X, and returs the value N rows below in the column
                where the match is found.  The index row is searched from
                left to right.  If X is a string value, an exact match must
                be found or an error is returned.  If X is a numeric value,
                the matching column is determined by the following rules:
                1) Strings and blank cells in the index row are ignored.
                2) If the first value in the index row is greater than X,
                   an error is returned.
                3) Searching stops when a numeric value which is greater than
                   or equal to X is found in the index row.  If the value
                   found is greater than X, the preceding column is the
                   matching column.
                4) If there are no numeric values in the index row which are
                   greater than or equal to X, the last column in R is
                   considered to be the matching column.

@HMEAN(...)     Returns the harmonic mean of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@HOUR(DT)       Returns the hour value (0-23) of date/time value DT.
                DT - a date/time value

@IF(X,T,F)      Returns the value of T if X evaluates to non-zero,
                or F if X evaluates to zero
                X - numeric value
                T,F - numeric or string values, cell or range references

@INIT(X1,X2)    Returns its first argument on the first recalculation pass
                and its second argument on all subsequent recalculation
                passes when Xess is performing iterative calculations.
                X1 - initial value
                X2 - iterative or subsequent value

@INT(X)         Returns the integer portion of X
                X - a numeric value

@INTERP2D(R1,R2,N)
                Returns interporlation value for a 2 dimensional
                vector.
                R1 - a range reference points to  x values of the vector;
                R2 - a range reference points to  y values of the
                     vector.  XR and YR have to be same size.
                N  - a numerical value or range for which the
                     interporlation value will be based on.

@INTERP3D(R,X,Y)
                Returns interporlation value for a 3 dimensional
                vector.  X and Y ranges must be the same size.
                R - a range reference points to x, y and z values of
                    the vector;
                X, Y  - numerical values or ranges for which the
                    interporlation value will be based on.

@INTRATE(S,M,I,R,B)
                Returns the interest rate of a fully invested security
                S - Settlement date
                M - Maturity
                I - Investment amount
                R - Redemption amount
                B - Basis

@INVDFT(R)      Generates the inverse of the Discrete Fourier Transform
                of the range R. R must represent a real vector (either
                its row or column dimension must be 1) or a complex
                vector (either its row or column dimension must be 2).
                The result is always a complex vector.
                R - a range representing the vector to be inverse transformed.

@INVERT(M)      Generates the inverse of matrix M, which must be square.
                M - a square matrix.

@INVFFT(R)      Generates the inverse of the Discrete Fourier
                Transform of the range R using a Fast Fourier
                Transform algorithm. The length of the vector
                must be a power of 2.  @INVFFT will produce the
                same results as @INVDFT, but is much faster
                (N*log(N)) time as opposed to N**2 time.
                R - a range representing the vector to be inverse
                transformed.

@IPMT(R,P,NP,PV,FV[,T])
                Returns the interest payment for a specific period for
                an investment based on periodic, constant payments and
                a constant interest rate.
                R - interest rate per period
                P - the period for which the interest will be calculated
                NP - the total number of payment periods.  Make sure
                     the units used be R and NP are consistent.  For
                     example, for a 5-year loan with 12% annual
                     interest, if you make payment monthly, use 12%/12
                     for (monthly) R and 5*12 for NP. If you mkae
                     annual payment on the same loan, use 12% for R
                     and 5 for NP.
                PV - present value of the investment.
                FV - future value or a cash balance you would like to
                     attain at the end of the last period.
                T - timing of the payment
                    0   payment is made at the end of the period.
                    1   payment is made at the beginning of the period.

@IRR(G,F)       Returns the internal rate of return on an investment
                Related functions: @MIRR and @XIRR
                G - a numeric value (an initial "guess" G)
                F - cash flow, represented by a range. It must contain
                at least two cash flow values

@ISERROR(X)     Returns 1 if X "contains" an error, otherwise 0.
                X is an expression, which may include references to
                other cells.  X "contains" an error if the expression
                causes an error, or if it refers to any cells which
                have errors.

@ISNUMBER(X)    Returns 1 if X is a numeric value; otherwise 0
                X - a numeric or a string value

@ISSTRING(X)    Returns 1 if X is a string value; otherwise 0
                X - a numeric or a string value

@LARGE(R,N)     Returns the Nth largest datum in range R.
                R - Range of data
                N - Integer specifying which datum to choose.
                @LARGE(A1..A10,3) = 7
                where A1..A10={38,3,9,45,7,90,17,2,75,12}

@LEFT(S,N)      Returns the string composed of the leftmost N characters of S
                If N is greater than or equal to the length of S, then the
                entire string S is returned
                S - a string value
                N - a numeric value

@LENGTH(S)      Returns the number of characters in S
                S - a string value

@LINCOEF(X,Y)   Generates the straight line least squares fit.
                X - a range representing a column vector of independent
                variable values
                Y - a range representing a column vector of dependent variable
                variable values

@LINFIT(X,Y)    Returns the straight line least squares fit.
                X - a column vector of values for the independent variable.
                Y - a column vector of values for the dependent variable.
                This function is equivalent to @POLYFIT(X,Y,1).

@LLS(A,Y)       The linear least squares solution X to the overdetermined
                system of equations AX=Y.
                A - a range representing the coefficient matrix
                Y - a column vector of values for the dependent variable

@LN(X)          Returns the log base e of X
                X - a numeric value greater than 0

@LNGAMMA(X)     Returns the log base e of the gamma function evaluated at X
                X - a numeric value greater than 0

@LOG(X)         Returns the log of X
                X - a numeric value greater than 0

@LOG10(X)       Returns the log base 10 of X
                X - a numeric value greater than 0

@LOG2(X)        Returns the log base 2 of X
                X - a numeric value greater than 0

@LOWER(S)       The string S is converted to lower case
                S - a string value

@MATCH(V,R[,T]) Returns the relative position in range R of
                value V in a specific way.
                V - the value to be matched.  V can be a string,  a
                    numeric value.  If V is a string, T must be 0.  MATCH
                    allows regular expression type "wildcard".
                T - match type
                    T > 0 means find largest value in R <= V
                    T = 0 or omitted means find first value in R = V
                    T < 0 means find smallest value in R >= V

@MAX(...)       Returns the maximum of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@MDURATION(S,M,R,Y,F[,B])
                Returns the modified Macauley duration of a security
                assuming $100 face value.
                S - the settlement date
                M - the maturity date
                R - the security's annual coupon rate
                Y - the security's annual yield
                F - the number of coupon payments per year
                B - day count basis
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@MEDIAN(...)    Returns the median (middle value) of the range R1.

@MESSAGE(X,S)   If X evaluates non-zero, the string S is displayed on
                the status line and the terminal beeps. The return
                value of the function is set to the value of X.
                e.g. @MESSAGE(@HOUR(@NOW) > 17, "Time to go home!")
                Tells you that it is time to go home after 5:00 PM.

@MID(S,N1,N2)   Returns the string of length N2 that starts at position N1 in S.
                S - a string value

@MIN(...)       Returns the minimum of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@MINUTE(DT)     Returns the minute value (0-59) of date/time value DT.
                DT - a date/time value

@MIRR(V,F,R)    Returns the Modified Internal Return Rate for a range
                of periodic cash flows.
                V - A range of values representing periodic income
                (positive values) and payments (negative values)
                F - Finance rate, the interest paid on the payments
                R - Reinvestment rate, the rate of return on the income

@MMUL(M1,M2)    Generates the product of multiplying matrix M2 by matrix M1.
                M1 and M2 can be multiplied only if number of columns in
                M1 is equal to the number of rows in M2.
                M1, M2 - matrices.

@MOD(X,Y)       Returns the remainder of X/Y, with the same sign as X.
                This is NOT the modulus, see @MODULUS below for that.
                X, Y - numeric values

@MODE(...)      Returns the mode, or most frequently occurring datum,
                of all the arguments.  Empty cells and cells containing
                text are ignored.

@MODULUS(X,Y)   Returns the modulus of X/Y, which is always positive.
                X, Y - numeric values

@MONTH(DT)      Returns the number of the month in date/time value DT.
                DT - a date/time value

@MSQ(...)       Returns the mean of the squares of its arguments
                argumentlist - any combination of numbers, cells, or ranges.

@N(R)           Returns the numeric value of the top left cell in range R
                R - a range

@NAND(...)      0 if all arguments are 1; 1 if any arguments are 0;
                -1 if any arguments are neither 0 nor 1.
                argumentlist - any combination of numbers, cells or ranges

@NETWORKDAYS(S,E[,H])
                Returns the number of whole working days, starting
                at S and going to E, excluding days in H.
                S - Starting date, a date/time value
                E - Ending date, a date/time value
                H - A range of dates to exclude, such as holidays.

@NOMINAL(R,C)   Returns the nominal annual interest rate for an
                effective interest rate and the number of compounding
                periods each year.
                R - Effective interest rate
                C - Compounding periods per year

@NOR(...)       0 if any arguments are 1; 1 if all arguments are 0;
                -1 if any arguments are neither 0 nor 1.
                argumentlist - any combination of numbers, cells or ranges

NOT(X)          Returns 1 if X=0; 0 if X=1; otherwise -1
                argumentlist - any combination of numbers, cells or ranges
                X - a numeric value

@NOW            Returns the date/time value of the current system date
                and time.

@NPV(R,CF)      Returns the present value of a series of future cash
                flows at a given rate. Related functions: @MNPV, @XNPV.
                R - periodic interest rate
                CF- future cash flow series (must be a range)

@NUMTOHEX(X)    Returns the hexadecimal representation of the integer
                portion of X, for -2147483648 <= X <= 2147483647.
                X - a numeric value

@ODDFPRICE(S,M,FC,R,Y,RD,F[,B])
                Returns the price per $100 face value of a security
                with an odd (shor or long) first period.
                S - settlement date
                M - maturity date
                FC - first coupon date of the security
                R - annual coupon rate of the security
                Y - annual yield of the security
                RD - redemption value of the security at maturity per
                    $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@ODDFYIELD(S,M,I,FC,R,PR,RD,F[,B])
                Returns the yield per of a security with an odd (short
                or long) first period.
                S - settlement date
                M - maturity date
                I - issue date
                FC - first coupon date of the security
                R - annual coupon rate of the security
                PR - the price of the security per $100 face value
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@ODDLPRICE(S,M,LC,R,Y,RD,F,[B])
                Returns the price per $100 face value of a security
                with an odd (short or long) last period.
                S - settlement date
                M - maturity date
                LC - first coupon date of the security
                R - annual coupon rate of the security
                Y - annual yield of the security
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@ODDLYIELD(S,M,LC,R,PR,RD,F,[B])
                Returns the yield per of a security with an odd (short
                or long) first period.
                S - settlement date
                M - maturity date
                LC - Last coupon date of the security
                R - annual coupon rate of the security
                PR - the price of the security per $100 face value
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@OR(...)        Logical OR function.  Returns 1 if any argument in
                the list equals 1, 0 if not, and -1 if there is any
                argument in the list not equal to 0 or 1.

@PERCENTILE(R,N)
                Returns the datum from the range R which is at the Nth
                percentile in R.  Only numeric data in R are considered.
                The result will be interpolated if N is not a multiple
                of 1/(s-1), where s is the size of R.
                R - A range of data
                N - A numeric value between 0 and 1, inclusive.

@PERCENTRANK(R,D[,S])
                Returns the percentile rank of the datum D in range R,
                to significance S.
                R - Range of numeric data
                D - Datum to find
                S = Number of significant digits

@PERMUT(S,T)    Returns "S choose T", or the number of T objects that
                can be chosen from the set S, where order is significant.
                S - Number of objects to choose from
                T - Number of objects to be chosen

@PI             Returns a numeric approximation of PI.

@PLS(X,Y,d)     Analyzes the least squares polynomial model. The output
                is identical to that of @LLS, with the polynomial
                coefficients listed in the order of decreasing degree.
                X - a range representing a row or column vector of
                independent variable values.
                Y - a range representing a row or column vector of
                dependent variable values.

@PMT(P,R,N)     Returns the periodic payment for a loan, given the
                present value P and interest rate R, and the number
                of periods N.
                P,R,N - Numeric values

@POLY(X,...)    Returns the value of the Nth degree polynomial
                in X, where N is the number of data in the argument
                list.  The argument list may contain numbers and
                cell references, including ranges.  Any non-numeric
                argument causes an error.
                @POLY(2,3,4,5) = (3*(2**2)+4*2+5) = 25

@POLYCOEF(X,Y,d)
                Returns the least squares coefficients for the polynomial fit.
                X - a range representing a row or column vector of independent
                variable values.
                Y - a range representing a row or column vector of dependent
                variable values.
                d - polynomial degree in the range 1 to 10.

@POLYFIT(X,Y,d) Returns the least squares polynomial fit.
                X - a column vector of values for the independent variable.
                Y - a column vector of values for the dependent variable.
                d - the polynomial degree in the range of 1 to 10.

@PPMT(R,P,NP,PV,FV,T)
                Returns the payment on the principal for a specific
                period for an investment based on periodic, constant
                payments and a constant interest rate.
                R - interest rate per period
                P - the period for which the interest will be calculated
                NP - the total number of payment periods.  Make sure
                     the units used be R and NP are consistent.  For
                     example, for a 5-year loan with 12% annual
                     interest, if you make payment monthly, use 12%/12
                     for (monthly) R and 5*12 for NP. If you mkae
                     annual payment on the same loan, use 12% for R
                     and 5 for NP.
                PV - present value of the investment.
                FV - future value or a cash balance you would like to
                     attain at the end of the last period.
                T - timing of the payment
                    0   payment is made at the end of the period.
                    1   payment is made at the beginning of the period.

@PRICE(S,M,R,Y,RD,F[,B])
                Returns the price per $100 face value of a security
                that pays periodic interest
                S - settlement date
                M - maturity date
                R - annual coupon rate of the security
                Y - annual yield of the security
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@PRICEDISC(S,M,D,RD[,B])
                Returns the price per $100 face value of a discounted
                security.
                S - settlement date
                M - maturity date
                D - discount rate of the security
                RD - redemption value of the security at maturity per
                     $100 face value
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@PRICEMAT(S,M,I,R,Y[,B])
                Returns the price per $100 face value of a security
                that pays interest at maturity
                S - settlement date
                M - maturity date
                I - issue date
                R - annual coupon rate of the security
                Y - annual yield of the security
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@PRODUCT(...)   Multiplies all the numeric elements of the argument
                list together, ignoring empty and non-numeric values,
                and returns the product.

@PROPER(S)      Returns a copy of string S with the first letter of
                every word capitalized.

@PTTEST(R1,R2)  Returns the significance level (alpha) of the two-sided T-test
                for the paired samples contained in ranges R1 and R2
                R1 and R2 must have the same size.

@PV(P,R,N)      Returns the present value of an annuity given
                periodic payment P, interest rate R, and N
                periods.

@QUARTILE(R,Q)  Finds the quartile Q of the data in range R.
                Equivalent to @PERCENTILE(R, Q/4)
                R = Range of cells
                Q = Quartile as follows:
                         0      Minimum value
                         1      First quartile (25th percentile)
                         2      Second quartile (50th percentile)
                         3      Third quartile (75th percentile)
                         4      Maximum value

                @QUARTILE(A1..B4, 2) = 7.5
                where A1..B4 = {1,2,4,7,8,9,10,12}

@RADIANS(D)     Returns PI/180 * D, converting degrees to radians.
                D is a numeric value.

@RAND           Returns a uniformly distributed random number on
                the interval [0,1].  The number will change every
                time the spreadsheet is recalculated.

@RANGEREF(UC,UR,LC,LR)
                Returns a reference to the range described by
                the corner co-ordinates UC, UR, LC, LR.
                UC = Upper left column of the range
                UR = Upper left row of the range
                LC = Lower right column of the range
                LR = Lower right row of the range

@RANK(E,R[,O])  Returns the rank of a numeric argument E in the
                range R.  The rank of a number is its size relative to
                other values in the list, which is equivalent to it's
                position in the list after the list is sorted.  RANK
                gives duplicate numbers the same rank. The presence of
                duplicate numbers will affect the ranks of subsequent
                numbers.  For examples, if there are two rank of 3,
                the next rank will be 5.
                E - a numeric value whose rank you want to find
                R - a reference to a range of values.  Non-numeric
                    values will be ignored.
                O - a numeric value specifying the way the numbers to
                    be ranked. RANK ranks E as if R is in descending order
                    if O is 0 or omitted. Otherwise, it ranks E as if
                    R is in ascending order.
                @RANK(5, C2..C6) = 2
                @RANK(5, C2..C6, 1) = 3
                @RANK(7, C2..C6, 1) = 5
                where C2..C6 = {2,7,5,1,5}

@RATE(F,P,N)    Returns the interest rate required to go from present
                value P to future value F in N compounding periods.

@RECEIVED(S,M,I,D[,B])
                Returns the value at maturity of a fully invested
                security. Dates must be entered as a serial date value.
                S = Settlement date, date of purchase
                M = Maturity date.
                I = Investment amount
                D = Discount rate
                B = Day count basis as follows:
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@REGEX(R,S)     Returns True(1) if the strings R and S match, and
                and False (0) otherwise. This function is a regular
                expression pattern matcher and is similar to @EXACT(S1,S2)
                function, except @REGEX allows "wildcard" comparisons.
                R - A string representing a regular expression
                S - A string
                @REGEX("t.*e", "table") = True
                @REGEX("F[0-9]", "F3") = True

@REPEAT(S,N)    Returns a string containing N copies of string S.

@REPLACE(S1,N1,N2,S2)
                Returns the string formed by replacing the N2
                characters starting at position N1 in string
                S1 with string S2.
                @REPLACE("Expense Report",8,3,"Log") = "Expense Logort"
                @REPLACE("Expense Report",8,6,"Log") = "Expense Log"
                @REPLACE("ABC",8,3,"XYZ") = "XYZABC"

@RIGHT(S,N)     Returns the string composed of the rightmost N
                characters of S.  If N is greater than or
                equal to the length of S, then the entire string
                S is returned.

@RMS(...)       Returns the square root of the mean of squares of its
                arguments, which may be any combination of numbers, cells,
                and ranges.  Blank cells and cells containing strings
                are not counted.

@ROUND(X,N)     Returns the number X rounded to the number of decimal
                places specified by the integer N, for N between 15
                and -15, inclusive.
                @ROUND(@PI,2) = 3.14
                @ROUND(1234.5678,-2) = 1200

@ROW(C)         Returns the row index of the cell referenced by C,
                the top row of C if C is a range, or the current
                row if C is omitted.

@ROWS(R)        Returns the number of rows in the specified range R.

@S(R)           Returns the string value of the top left cell in range R.
                Returns a null string if the cell is blank or contains a
                numeric value.
                R - a range

@SALARM(X,S)    If X evaluates non-zero, then the string S is evaluated
                as an expression. The return value is set to the result
                of evaluating the S expression. If X evaluates to zero,
                S is not evaluated and the return value is zero. Does
                not beep like the @ALARM function above.
                e.g. @SALARM(pressure > 500, "@REMOTE_FN(Pressure)")

@SECOND(T)      Returns the seconds (0 - 59) component of the
                date/time value T.

@SIGMOID(X)     Returns the value of the sigmoid function 1/(1 + exp(-X))
                X - a numeric value

@SIN(X)         Returns the sine of X
                X - a numeric value

@SINH(X)        Returns the hyperbolic sine of X
                X - a numeric value

@SLN(C,S,L)     Returns the straight-line depreciation allowance
                given cost C, salvage value S, and allowable life L.

@SMALL(R,N)     Returns the Nth smallest number in range R.

@SQRT(X)        Returns the positive square root of X
                X - a positive numeric value

@SSE(...)       Returns the sum squared error of its arguments. This function
                equivalent to @VAR(...)/@COUNT(...)
                argumentlist - any combination of numbers, cells, or ranges

@SSQ(...)       Returns the sum of squares of its arguments
                argumentlist - any combination of numbers, cells, or ranges

@STD(...)       Returns the population standard deviation (N weighting) of its
                arguments
                argumentlist - any combination of numbers, cells, or ranges

@STDS(...)      Returns the population standard deviation (N-1 weighting) of
                its arguments
                argumentlist - any combination of numbers, cells, or ranges

@STRCAT(...)    Returns the concatenation of all its arguments.
                argumentlist - any combination of numbers, cells, or ranges

@STRING(X,N)    Returns the string representing the numeric value of X,
                to N decimal places
                X - a numeric value
                N - a numeric value between 0 and 15

@STRLEN(...)    Returns the total length of all strings in its arguments
                argumentlist - any combination of numbers, cells, or ranges

@SUM(...)       Returns the sum of its arguments
                argumentlist - any combination of numbers, cells, or ranges

@SUMPRODUCT(R1,R2)
                Returns the dot product of the vectors R1 and R2
                R1, R2 - each a range, which must contain an equal number of
                rows and columns, or must be a dimension 1 x n (row vector) or
                n x 1 (column vector).

@SYD(C,S,L,N)   Returns the "sum-of-years-digits" depreciation allowance
                given cost C, salvage value S, allowable life L, and
                N depreciation periods.

@T(N,T)         Returns the integral of Student's T-distribution with
                N degrees of freedom from minus infinity to T.
                N, T - numeric values

@TAN(X)         Returns the tangent of X
                X - a numeric value

@TANH(X)        Returns the hyperbolic tangent of X
                X - a numeric value

@TBILLEQ(S,M,D) Returns the bond-equivalent yield (BEY) for a Treasury Bill.
                If the term is one half-year or less, BEY is
                equivalent to a actural/365 simple interest rate.  If
                the term of the security is more than one-half year,
                BEY is equivalent to a semiannually compounded
                Treasury bond yield.
                S = Settlement date
                M = Maturity date
                D = Discount rate of Treasury Bill

@TBILLPRICE(S,M,D)
                Returns the price per $100 face value for a Tresury
                bill.
                S - settlement date
                M - maturity date
                D - discount rate of the Tresury bill

@TBILLYIELD(S,M,D)
                Returns the yield on a treasury bill, given settlement
                date S, maturity date M, and discount rate D.
                S = Settlement date
                M = Maturity date
                D = Discount rate of Treasury Bill

@TERM(P,R,FV)   Returns the number of payment periods for an investment
                P - amount of periodic payments
                R - interest rate
                FV - future value of the investment

@TIME(H,M,S)    Returns the time value represented as a fraction of a day,
                starting at midnight.  H (hours) must be between 0 and 23,
                M (minutes) and S (seconds) must be between 0 and 59.

@TIMEVALUE(S)   Returns the corresponding time value for a given string
                value S.
                Example:
                @TIMEVALUE("12:55:00 AM")
                @TIMEVALUE("0:55.00")

@TODAY          Returns the date value corresponding to the current
                system date.

@TRANSPOSE(M)   Generates the transpose of matrix M.

@TREND(NX, KX, KY)
                TREND fits a straight line to KX (known x's) and KY
                (known y's) using least square method, and then
                returns the y values along the line for NX (new x's)
                NX - new x values for which TREND will return the y-values
                KX - known x values
                KY - known y values

@TRIM(S)        Returns the string formed by removing leading, trailing,
                and consecutive embedded spaces from string S.

@TRUE           Returns the logical value 1 (true).

@TTEST(R,X)     Returns the significance level (alpha) of the two-sided single
                population T-test for the population samples contained
                in range R
                R - a range
                X - a numeric value

@TTEST2EV(R1,R2)
                Returns the significance level (alpha) of the two-sided dual
                population T-test for ranges R1 and R2, where their
                variances are equal

@TTEST2UV(R1,R2)
                Returns the significance level (alpha) of the two-sided single
                population T-test for ranges R1 and R2, where their
                variances are not equal

@UPPER(S)       Returns the string S converted to upper case.
                S - a string value

@VALUE(S)       Returns the numeric value represented by the string S
                or 0 if S does not represent a number.
                S - a string value

@VAR(...)       Returns the population variance (N weighting) of its arguments
                argumentlist - any combination of numbers, cells, or ranges

@VARS(...)      Returns the population variance (N-1 weighting) of its arguments
                argumentlist - any combination of numbers, cells, or ranges

@VDB(C,S,L,S,E)
                Returns the depreciation of an asset between two specific
                period using the fixed-declining balance method.
                C - the initial cost of the asset.
                S - salvage , the value at the end of the depreciation.
                L - life, the total number of periods over which the asset
                    is being depreciated.
                S - Starting period for the calculation.
                E - Ending period for the calculation.

@VECLEN(...)    Returns the square root of the sum of squares of its arguments
                argumentlist - any combination of numbers, cells or ranges

@VLOOKUP(X,R,N) Searches the first column (known as the index column)
                in range R for the numeric or string value which "matches"
                X, and returs the value N columns to the right in the row
                where the match is found.  The index column is searched from
                top to bottom.  If X is a string value, an exact match must
                be found or an error is returned.  If X is a numeric value,
                the matching row is determined by the following rules:
                1) Strings and blank cells in the index column are ignored.
                2) If the first value in the index column is greater than X,
                   an error is returned.
                3) Searching stops when a numeric value which is greater than
                   or equal to X is found in the index column.  If the value
                   found is greater than X, the preceding row is the matching
                   row.
                4) If there are no numeric values in the index column which are
                   greater than or equal to X, the last row in R is considered
                   to be the matching row.

@VSUM(...)      Returns the "visual sum" of its arguments, using precision and
                rounding of formatted cell values
                argumentlist - any combination of numbers, cells, or ranges

@WEEKDAY(D)     Returns an integer representing the day of the week
                on which the day D falls.  1 is Sunday, 7 is Saturday.

@WORKDAY(S,D[,H]) Returns the day that is D working days after day S,
                excluding weekends and all holidays specified as dates
                in range H.

@XIRR(G,V,D)    Returns the internal rate of return for a series of
                cash flows with variable intervals
                G - a guessed value of the result
                V - a range, contains a series of cash flows
                D - a range, contains the schedule of cash flows in V
                V and D must be one-dimentional ranges and have the
                same size.

@XNPV(R,V,D)    Returns the net present value for a series of cahs
                flows with variable intervals.
                R - discount rate to apply to the cash flows
                V - a range, contains a series of cash flows
                D - a range, contains the schedule of cash flows in V
                V and D must be one-dimentional ranges and have the
                same size.

@XOR(...)       Returns -1 if any arguments are UNKNOWN;
                1 if the total number of arguments with the value 1 is odd;
                0 if the total number of arguments with the value 1 is even.
                argumentlist - any combination of numbers, cells or ranges

@XVALUE(N,C)    Returns the value of cell C in sheet N.
                N - a string containing the pathname of another
                spreadsheet.
                C - a valid cell reference

@YEAR(DT)       Returns the year value of date/time value DT.
                DT - a date/time value

@YEARFRAC(S,E[,B])
                Returns the year fraction representing the number of
                whole days between S (start date) and E (end date)
                S - a date value that represents the start date
                E - a date value that represents the end date
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@YIELD(S,M,R,PR,RD,F[,B])
                Returns the yield of a security that pays periodic
                interest
                Returns the yield per of a security with an odd (short
                or long) first period.
                S - settlement date
                M - maturity date
                R - annual coupon rate of the security
                PR - the price of the security per $100 face value
                RD - redemption value of the security at maturity per
                     $100 face value
                F - the number of coupon payments per year
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@YIELDDISC(S,M,PR,RD[,B])
                Returns the annual yield for a discounted security
                S - settlement date
                M - maturity date
                PR - the price of the security per $100 face value
                RD - redemption value of the security at maturity per
                     $100 face value
                B - the day count basis to be used
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

@YIELDMAT(S,M,I,R,PR[,B])
                Returns the annual yield of a security which pays interest at
                maturity.  All dates must be expressed as serial date values.
                S = settlement date
                M = maturity date
                I = issue date
                R = interest rate at date of issue
                PR = the price of the security per $100 face value
                B = the day count basis to be used:
                    0 or omitted        30/360
                    1                   actual/actual
                    2                   actual/360
                    3                   actual/365

Goal-Seeking

In many types of analysis, even simple budget preparation, you may need to vary a cell value until a chosen cell reaches a target value. In Xess this process is called goal-seeking and is accomplished using an iterative technique. Using this method, Xess usually finds the desired value in two or three iterations for linear relationships, more for higher-order dependencies.

To perform goal-seeking:

  1. Display the Tools menu from the menu bar.
  2. Select Goal Seek from the Tools menu. Xess displays the Goalseek dialog box for you to enter specifications for the goal-seeking operation.
  3. To activate the text insertion cursor inside the entry boxes, position the cursor inside the desired entry box and click the left mouse button.

    Enter the following information in the dialog box:

  4. Click Start to begin the search.
  5. Xess performs the calculation and displays the results on screen with the Goalseek dialog box still displayed (If necessary, you may move the Goalseek dialog to view the results of the goalseek operation). If the target has not been reached in five iterations the search is paused. The Continue button becomes active, and the user can click Continue to continue the search.

Goto Dialog

  1. Display the View menu from the main menu bar.
  2. Select "Go To..." from the View menu. Xess displays the Goto Cell dialog box.
  3. Position the cursor inside the entry box titled "Selection" and click the left mouse button to activate the text insertion cursor. The default entry is cell A1. Type the address of the cell to which the cursor should move.
  4. Click on the OK button or press [Return] to carry out the function. click on Apply to apply the changes and retain the window. Click Cancel to dismiss the dialog box.

    Xess changes the view so that the requested cell appears in the view.


Graphs

Relationship between graphs and sheets

The relationship between graphs and the sheet itself can be defined as follows: The first option (graph window) is the only way you can modify a graph. The second and third options reflect copies of the master which are automatically updated with each 'Save' from the Graph Editor.

New graph defaults

To make it as simple as possible to create effective graphs easily, the New Graph Options menu is provided which allows you to specify whether you want Xess to automatically cycle through predefined sets of options, defining a unique setting for each dataset. Once the initial graph is displayed, you may continue to customize it as you like using the Graph Editor.

Graph Types

Xess provides twelve (12) basic types of graphs:

Graph customization and flexibility

Using the Graph Editor, Xess offers considerable flexibility in defining graph characteristics. For instance, you can customize each axis with respect to scaling, tick marks, labels, axis and grid color. For tick marks and labels you can specify color, font, style, and size. You can define whether or not legends, title and labels are displayed. You can choose your own line and marker styles, even shading variants for surface charts. Also, you have the option to enable outward ticks, exploded axis and grid lines for each axis.

You can create and save up to hundred (100) different named graphs for a given spreadsheet. You can define up to twenty (20) different graph datasets for each graph. You can view up to twenty (20) graphs (each) at the same time in both the graph edit window and view graph window on screen while you continue to work on the spreadsheet, or save graphs as Encapsulated Postscript files to be printed later on a Postscript printer or included in other documents.

Line Graphs (Scatter Plots)

Line graphs are used to plot various types of X-Y data. In the simplest form, a line graph is nothing more than a set of data points on an X-Y grid, possibly connected by line segments. This is sometimes called a Scatter Plot.

Function data is plotted by connecting the points with line or spline segments. On a color display, each line appears in a different color and they can be modified in the Data Set Options dialog box.

You can also specify what type line connects the points (e.g. dotted, dashed), width, and color.

The data points to be graphed do not need to be spaced evenly on the X-axis. In fact, for scatter plots they do not even need to be in order. Line and spline segments will connect adjacent points in the value lists. A break in a line or spline segment is indicated by leaving an X-Y pair of data blank. This is usually done by inserting a blank line or column at the appropriate location.

The data for an X-axis or Y-axis can be either string or numeric. If the data is string, the string values become the labels for successive locations on the axis. A typical use is to show monthly values of some type in a trend plot.

Bar Graphs

Bar graphs plot data values much like in a line plot except that solid blocks are drawn between the Y value for the data and the X-axis. The points associated with different sets of data are grouped by their X-axis label to permit easy comparison between groups. Each set of data is represent by a different color or pattern.

The type of line segment or No Segment determines whether the data is outline and, if so, with what type line.

A maximum of twenty sets of data may be combined on a single bar graph.

Stacked Bar Graphs

Stacked Bar graphs (like Bar graphs) plot data values much like in a line plot except that solid blocks are drawn between the Y value for the data and the X-axis. Unlike Bar graphs, with Stacked Bar graphs, the Y values from each preceding data set are accumulated as new Y data set is plotted. The resulting graph appears as bars stacked vertically rather than side-by-side. The points associated with each set of accumulated data are grouped by their X-axis label to permit easy comparison between groups. Each set of data (or bar segment) is represent by a different color or pattern.

The type of line segment or No Segment determines whether the data is outline and, if so, with what type line.

A maximum of twenty sets of data may be combined on a single bar graph.

Area graphs

Like Line graphs, Area graphs are used to plot various types of X-Y data. Unlike Line graphs, with Area graphs, the Y values from each preceding data set are accumulated as each new Y data set is plotted. The resulting graph appears as a "stacked line graph". The area below each line can be filled by a different color to distinguish each accumulated data set.

Histograms

Histograms graph the distribution of a set of points. The range of the values specified by the X Range are divided in sub-ranges called buckets. The count of the number of items within each sub-range is displayed. You indicate the number of buckets you would like by setting the number of tick marks for the X-axis

Pie Charts

Pie charts show the percentage that each data item contributes to the total of all the data items. The cells of the X Range specify the labels for the slices of the pie while those of the Y Range indicate the value of the item. The percentages are calculated automatically.

Slices are "removed" from the pie by placing a blank pair of cells before and after the affected cells.

Surface Graphs

Surface graphs let you plot X-Y-Z data values and functions. On a surface plot, the X and Y values determine the reference coordinates for the Z values. Xess surface graphs are presented with perspective and shading. The shading can be either that of the surface when light from a single point, or it can provide a color shading based on the Z value relative to the maximum and minimum Z values.

Xess provides 3D rotation of surface graphs.

Contour Graphs

A contour graph provides a grouping of three-dimensional data with similar Z-values. This is analogous to maps showing elevation. It is an alternative to surface graphs.

Polar Graphs

This provides graphs of data with respect to a polar coordinate system rather than a cartesian or rectangular co-ordinate system. A Polar Graph plots a point at some radial distance along a ray that creates a given angle with the positive X axis. The angular measurement and radial components correspond to the X and Y coordinates in a line graph, respectively.

Hi-Lo Graphs (Error Bars)

It provides not only a Y- value for each X-value but a range of Y-values for a given X-value. The range of Y-values represent the low, standard (closing), and the high values for the given X value. Hi-Lo is typically used to display Error Bars or the trading range of a stock and its closing value for a given period.

Box Graphs

Box graphs display not only a Y-value for each X-value, but a set of six Y-values for each X-value: low y (Lo Data), y (Y Data), high y (Hi Data), low variance (Lo Var), median (Median), high variance (Hi Variance). Box graphs are typically used to display the upper and lower variances and perhaps the median point associated with each Y-value. This variance range is displayed as a rectangle; median is indicated by 'marker type'.

Control Graph

Like High-Low and Box graphs, Control graphs display multiple (in this case - two (2)) Y-values for each X-value. The two Y-values are specified in the Y Data and Lo Var sections of the Data Set Options dialog. Control graphs, however, display two different Y-values in separate plots which share the same X-axis but have different Y axes (Y Axis and Auxilliary Y Axis) in the same graph display. These graphs are typically used to display the mean and variance of the Y value over a range of X-values.

Graph - Creation

  1. (Optional). Select New Graph Options from the Options menu to instruct Xess to automatically define unique settings in each category for each X dataset.
  2. You may proceed to step 3 to invoke the Graph Editor using the Data Sets dialog box under Edit to define the graph data

    or

    you may first select the data before proceeding with step 3 as follows:

    Select a range of data to be graphed by using the mouse to highlight a range of data. For selecting remote ranges, use the Select... option from the Edit menu.

    If you select only one data set, those values are assumed to be Y-values whose X-values are automatically numbered beginning with 1. If you select more that one data set (X and Y data), the first row or column in the range is assumed to be X data. If there are more columns that rows, then the X data is defined to be the first row. Otherwise X data is defined to be the first column.

  3. Next, select New Graph... from the Graph menu. Holding down the left mouse button, move the mouse pointer to the desired type and release.

    or

    For a quick line or bar graph, simply click the corresponding graph icon button on the toolbar.

The graph is drawn inside a separate graph window named "untitled". If you wish to save the graph for subsequent use, you must invoke the Save function under the File menu in the Graph Editor. The name of this graph will appear in the Choose Graph dialog box when you select Edit Graph from the Graph menu. Xess can handle up to one hundred (100) separately named graphs.

Graph - Modification

Once a graph has been created, you can modify it as much as you want using the Graph Editor - even those graphs which have been inserted in the sheet or converted to a View Graph.
  1. If the graph is not currently displayed in a Graph Editor window, select Edit Graph... from the Graph menu to display the names of the graphs defined with the sheet. Select the graph you wish to modify. The Graph Editor window containing the graph is displayed.
  2. To modify general graph options or any of the axes (x,y,aux. y,z), select the Options menu to display the corresponding dialog boxes.

    To modify characteristics about the graph data, select Data Sets from the Edit menu.

  3. Click the OK button or press [Return] to carry out the function. Click on Apply to apply the changes and retain the dialog window. Click Cancel to cancel the changes and exit the window.
  4. To make the changes permanent, you must select Save from the File menu in the Graph Editor. When Save is invoked, all copies of the graph that may have been inserted into the sheet or converted to a View Graph are automatically updated.
Warning about changing graph types:

The above actions may not necessarily create the desired graph type since the graph range selected may be incorrect or insufficient to create such a a graph. An appropriate error message is displayed on the Control/Status area of the main window. This requires that you may have to modify the data ranges using the Graph Editorto obtain the desired results.


Graph Axis Dialog

Xess graphing capabilities allow you to select a number of options to define the characteristics of a given graph. The Axis Options allow you to define the axis (x-axis, y-axis, aux. y-axis, z-axis) characteristics for a given graph. Xess provides four separate dialog windows, named X Axis Options, Y Axis Options, Aux. Y Axis, and Z Axis Options, to define the characteristics of a given graph. The auxilliary Y Axis is used with Control graphs.

You may customize the following options:

An axis options dialog box can be invoked by selecting the appropriate (X Axis, Y Axis,Z Axis) functions from the Options menu inside a graph window.

To customize the X, Y, or Z axes:

  1. Display Options from the Graph Editor menu bar.
  2. Select the appropriate "Axis..." option which displays the corresponding X, Y, Aux. Y, or Z Axis Options dialog box.
  3. Modify any of the following options accordingly:
  4. Click OK to accept the changes and dismiss the dialog box; click Apply to accept changes and retain the dialog box. (If Defer Redraw in the general Graph Options menu is OFF, the effects are immediately reflected in the corresponding graph edit window; if Defer Redraw is ON, you must explicitly invoke Redraw from the File menu to update the graph.) Click Cancel if you wish to dismiss the dialog box.

Graph Dataset Dialog

After you have initially created a graph using the New option from the Graph menu or equivalent toolbar button, you may want to further customize how the data is represented in the graph using the Data Set Options dialog box. The initial values displayed in this dialog box are based on the type of graph you selected from the New Graph option menu, toolbar button, or in the Graph Options dialog box.

The Data Set Options dialog box lets you alter the following:

To activate:
  1. Display Edit from the Graph Editor menu bar.
  2. Select the Data Sets option which displays the Data Set Options dialog box.
  3. Modify any of the following options accordingly:
  4. Click OK to accept the changes and dismiss the dialog box; click Apply to accept changes and retain the dialog box. (If Defer Redraw in the general Graph Options menu is OFF, the effects are immediately reflected in the corresponding graph edit window; if Defer Redraw is ON, you must explicitly invoke Redraw from the File menu to update the graph.) Click Cancel if you wish to dismiss the dialog box.

Graph Editor

Inside the Graph Editor, there are three menu buttons: File, Edit and Options.

File

The File menu consists of the following options:

Redraw

Redraw function redraws the graph using the most current calculations and graph definition. By making a selection in the Graph Options dialog, you can cause Xess to automatically update the graph after recalculation.

Save(/AS)

Save/Save As functions enable you to name a given graph which is maintained with the sheet. When the Save As command is invoked, the Save Graph dialog box is displayed. Enter the name of the sheet to be saved.

Save also causes any copies of the graph which may have been inserted in the sheet or converted to a View window to be updated to match the latest version of the graph.

After graphs are saved, any one of them can be displayed instantaneously by selecting the appropriate graph name from the Choose Graph dialog box displayed by selecting Edit Graph from the Graph menu on the main menu bar.

Duplicate

Duplicate function creates a duplicate of the current graph in a separate graph editor window. The graph can be used as a template to create other graphs with same or different data ranges.

Delete

Delete function deletes the current graph window. If a copy of the graph was previously inserted into the sheet or converted to a view window, those copies will also be deleted.

Print

Print function enables you to output the graph in Encapsulated PostScript format. The output can be directed to a printer, a file or both. The option to set the print output is explained under Printer Options.

Cancel

Cancel function removes the graph editor window.

Edit

The Edit menu consists of the following options:

Data Sets

The Data Set Options dialog box allows you to customize the appearance of each dataset within the graph. Options that can be altered include the following:

Rotate 3D

Rotate Surface dialog box provides a means to change the viewing angle of a 3D surface plot. You can rotate the graph to change the horizontal and vertical angles of view. This option is disabled if the graph type is not a surface plot.

Options

The Options menu allows you to customize the general appearance of the graph and consists of the following options: The Aux. Y axis is used with Control graphs.

General

The General Options dialog box allows you to define the following:

X/Y/Aux.Y/Z Axis

The X-Axis, Y-Axis, Aux. Y, and Z-Axis Options dialog box allows you to define the following:

Graph Options

The general Graph Options dialog box allows you to define the following graph characteristics: To change general graph options:
  1. Display "Options" from the Graph Editor menu bar.
  2. Select the "General" option which displays the General Options dialog box.
  3. Modify any of the following options accordingly:
  4. Click OK to accept the changes and dismiss the dialog box; click Apply to accept changes and retain the dialog box. (If Defer Redraw in the general Graph Options menu is OFF, the effects are immediately reflected in the corresponding graph edit window; if Defer Redraw is ON, you must explicitly invoke Redraw from the File menu to update the graph.) Click Cancel if you wish to dismiss the dialog box.

Graph Save

The Save function in the Graph Editor enables you to name a given graph. When the function is invoked, a dialog box is displayed to enter the name.

To Save a graph for subsequent use:

  1. Display the File menu from the Graph window.
  2. Select Save or Save As function from the File menu to display the.
  3. At the current cursor position inside the Graph Name dialog box, type the name of the graph.
  4. Click the OK pushbutton to complete the operation. Click Cancel to cancel the operation.
As a default, all unnamed Xess graphs are named "Untitled". All named graphs are listed in the Choose Graph dialog box which is displayed when you select Edit Graph from the Graph function on the main menu bar. When selected, the graph is automatically displayed in a graph edit window.

You may save up to one hundred (100) graphs per spreadsheet.


Graph Select Dialog

Once a graph has been created and saved, the Choose Graph dialog box is displayed when any of the following actions are requested: To select a graph for the specified action:
  1. Point and click on the graph name in the "Items" list box. Its name will appear in the display box.
  2. Click OK or press [Return] to complete the action and dismiss the dialog box. Click Apply to complete the action and retain the dialog window. Click Cancel to cancel the operation and Xess ignores the selection request.

Graph Surface Rotation

The Rotate Surface Dialog box provides a means to change the viewing angle of a 3D surface plot. You can rotate the graph to change the horizontal and vertical angles of view. This option is disabled if the graph type is not a surface plot.

To rotate a surface graph that is displayed in a graph window:

  1. Display Edit from the Graph Editor menu bar.
  2. Select 'Rotate' from the option menu which displays the Rotate Surface dialog box with a 3D wire drawing to represent the surfaceplot.
  3. Rotate the wire drawing using either method:

    Position the mouse cursor on the desired axis to be rotated. While holding the mouse button down, drag the mouse in the direction of rotation. Release the mouse button when the desired rotation is achieved.

    -or-

    Set the desired Theta and Phi values inside the corresponding entry boxes according to the following:

            Theta           The angle at which the surface rotates around the
                            Z-Axis.  It ranges from 0 - 89.
    
            Phi             The angle at which you look down upon the surface.
                            It ranges from 0 - 89.
    
  4. Click OK or Apply to activate the rotation of the actual graph.

Graph Viewer

The graph viewer contains a "light-weight" copy of the graph for the primary purpose of efficient real-time updating. As this is a display window, you are limited to redrawing and printing the graph.

If you wish to modify the graph, you must select Edit from the Graph menu which invokes the Graph Editor. Once you have completed the modifications and save the graph, the View Graph is automatically updated with the modifications.


Help

Xess is designed to be easy to learn, using a familiar spreadsheet format and self-explanatory function, options, and messages. However, you may encounter situations where you need help. Accordingly, you can take advantage of:

Error Messages

Xess error messages do more than notify you of a problem; they describe the nature of the problem and provide clues to resolving it. For example:
This message . . .                              Means . . .

Error:  Goalseek - variable cell must be        The cell which changes
        a constant.                             during Goalseek must
                                                contain a constant
                                                value.
Xess displays error messages in the Message Line of the of the display and sometimes in popup dialog boxes. A full list of Xess error messages and what they mean is contained in Error Messages in the Xess User's Guide.

Using On-Line Help

To get general on-line help:
  1. Select Index... from the Help menu which displays the Xess Help dialog box.
  2. Use the Help Topics section to access a specific topic. Use the scroll bar to find the desired topic. Simply double-click on the topic and the available help text will be displayed in the top portion of the display.
  3. Use the scroll bar to move back and forth serially through the help text.
  4. Click on highlighted words or phrases of additional information on them. Then use the [Back] button to return to your main subject.
Through the Help menu, you can get information on: The Help file is a standard HTML file and can be viewed with any HTML browser and even updated with site-specific information.

Context-Sensitive Help

When you press the Help button from any dialog box, online help for the specific dailog box will be displayed.

Highlight Options Dialog

You may set background and foreground colors to distinguish any/all of the following calculation results: To set the highlight options:
  1. Display "Highlight Options..." from the Options menu. Xess displays the Highlight Options dialog box.
  2. Click the check box beside the option to activate/deactivate the desired highlight condition.
  3. Set the background and/or foreground color for each option by pointing to the designated list box and holding down the left mouse button. Position the mouse on the color of choice and release. The color palette can be changed.
  4. Click OK or press [Return] to confirm and apply your highlighting options. Click Apply to apply the settings and retain the dialog window. Click Cancel to dismiss te dialog box.

Import Options Dialog

Xess gives you additional control on importing or pasting text into the spreadsheet using the Import Options dialog window. This window is displayed by selecting "Import Options" from the Options menu. Alternatively, you may invoke this dialog window by selecting "Import Options" from the Import Data dialog window.
  1. The check button titled "One Word Per Column", when enabled, allows you to import a text file where blank spaces in the file are used as delimiters. Text strings are imported as text and numbers are imported as numeric values. A string or a value is placed in each corresponding cell.
  2. Alternatively, Whitespace Threshold option allows you to fine-tune the appearance of the imported text file and is most useful when importing text which does not necessarily have the same layout for each line, e.g. a report which includes header information at the top followed by data. This option allows you to indicate what percent of all lines must have a blank in the exact same location for that location to be recognized as a field delimiter.

    When importing a text file or pasting text into the spreadsheet, Xess looks for crossings of a "whitespace threshold" or blanks which traverse the same location in each line. The threshold can be set to any value between 0 and 100. When the threshold is crossed, Xess makes a column separation where the white space count inside the imported text file reaches a peak.

    There must be a peak, i.e., a positive threshold crossing followed by a negative threshold crossing to create a column separation. The extreme case (0 and 100) have the following properties:

                    0 - There is never a negative threshold crossing, so there
                        are no column separations.  The import creates only
                        one column; the entire text of the line goes into the
                        cell.
    
                    100 - Threshold crossings occur only where white space cuts
                          through the entire file.
    
    
  3. The button "Reset to Defaults", resets to default settings.

Import Dialog

Xess Import operations allow you to load and use external data files stored in different formats including: Use the Open Dialog operation to import other spreadsheet files: WKS, WK1, WK3, XLS.

Xess Cells

Xess Import...Cells operation allows you to import a range of cells which were previously written to a file by the Export (Cells) operation. The file is in Xess format and it maintains formats, fonts and formulas. This operation has the same effect as cut-and-paste between Xess sheets. It uses an intermediate file so it does not require both spreadsheets to be active simultaneously. The default filename extension for Xess Import Cell file format is ".xsc".

Text

Xess Import...Text operation allows you to load tabular data from text files. Blank spaces and tabs between text is treated as delimiters and spaced appropriately. The default filename extension for Xess Import Text operation is ".txt".

Tab/Comma Separated Values

Xess Import TSV/CSV (Tab Separated Values/Comma Separated Values) operations allow you to load text files containing tabs (Import TSV) and commas (Import CSV).

For the Import TSV operation, "tabs" contained in the file being imported are used as the "only" delimiters and the text is formatted appropriately inside the spreadsheet.

For the Import CSV operation, "commas" contained in the file being imported are used as the "only" delimiters and the text is formatted appropriately inside the spreadsheet.

The default filename extension for Xess Import TSV/CSV formats is ".tsv" and "csv" respectively.

To Import any of these file types into the spreadsheet:

  1. Position the cell cursor on the desired cell address inside the spreadsheet. This position becomes the top left corner of the imported file.
  2. Display the File menu from the menu bar.
  3. Select Import... from the File menu. Xess presents the Import Data dialog box to specify the file you wish to load.
  4. Select the appropriate file format from the File Format list box.
  5. Click the left mouse button inside the entry box titled "Selection" to activate the text insertion cursor. Type the name of the spreadsheet you wish to use, or select a spreadsheet by highlighting its name in the Files list box. The Files list box displays an alphabetical list of all spreadsheets whose names meet the criteria in your File Filter. If the list is large, all the document names may not fit inside the box.
    1. To scroll through the list of file names, click the up and down arrows along the right side of the Files box or drag the scroll bar.
    2. To display files of specific alphabetical section of the list, type the first character(s) of the name of the file(s) you are looking for (e.g. /tes*.tsv, /tes*.csv) inside the Filter entry box.

      Click on Filter to display filename(s) beginning with these characters.

      For more information about the File Display dialog box, please refer to help topic "File Display Dialog".

  6. Click OK or press [Return] to confirm. Click Cancel to cancel the operation.
NOTE: For more information about "Importing" data, please refer to "Interacting with other Applications" in the User's Guide.

Mouse Button 3 (MB3)Popup Menu

Many of the Edit and cell Format operations are also available from the dialog menu which can be displayed by clicking mouse button three or the equivalent. These operations include:

To use the MB3 popup menu:

  1. Select the row(s), column(s), range, or cell to be affected.
  2. Hold down MB3 and traverse to the desired operation and release.
Note that if you happen to be editing a cell when MB3 is pressed, several of the menu operations will be greyed out and not accessable.

The MB3 functionality can be disabled by defining the resource, *popupMenu, to be False, in the Xess resource file.


Moving Around the Sheet

Xess gives you several options for moving around the spreadsheet. You can use:

Moving with the Keyboard and Mouse

To move the cursor anywhere in the spreadsheet view, move the mouse until the pointer appears in the desired location, then click once. The cell will be highlighted. This is the cell that will be affected by your next action, such as editing, formatting, copying, deleting or pasting.

You can also use the arrow and tab keys on your keyboard to move the cursor. Each time you press an arrow key, the cursor moves one row or column in the direction of the arrow. Each time you press the tab key, the cursor moves to the next unprotected cell.

If you move the cursor to a position outside the current view, Xess moves the spreadsheet view over one column or row so that the current cell is always visible.

Moving with the Meta key combined with other keys

(Hardware dependent)

Meta<Key> in combination with selective keys (hardware dependent) provides a quick access to different areas of the spreadsheet. The key actions and the corresponding response is listed below:


 KEY ACTION             HARDWARE                RESULT


Meta + PgUp             Sun-4                   The Cell Cursor moves to cell
                                                A1 with the exception where the
Compose Character +     Dec                     titles are set using "Set Title"
Prev Screen.

Alt + PgUp              RS6000

Extend char + Prev      HP700/800

Meta + PgDn             Sun-4                   The Cell Cursor moves to the
                                                bottom extent of the sheet to
Compose Character +     Dec                     the left.
Next Screen.

Alt + PgDn              RS6000

Extend char + Next      HP700/800

Meta + up/down arrow    Sun-4                   The Cell Cursor moves up/down
key.                                            in the current column into the
                                                next cell that contains data
Compose Character +     Dec                     which is adjacent to a cell
up/down arrow key.                              above or below that does not
                                                contain any data.

Alt + up/down arrow     RS6000
key.

Extend char + up/down   HP700/800
arrow key.

Meta + left/right       Sun-4                  The Cell Cursor moves left/right
arrow key.                                     row in the current row into
                                               the next cell that contains data
Compose Character +     Dec                    which is adjacent to a cell to
left/right arrow                               the left or right that does not
key.                                           contain any data.

Alt + left/right        RS6000
arrow key.

Extend char +           HP700/800
left/right
arrow key.

Moving with the Scroll Bars

Because the spreadsheet display can show only part of a large spreadsheet, you may need to scroll through the spreadsheet to view other sections. Scroll bars, which appear on the right and bottom edges of the spreadsheet area, allow you to scroll through the spreadsheet just as though it was printed on a continuous roll of paper. On both scroll bars, a slider bar indicates
  1. the size of your spreadsheet view relative to the total area used by the spreadsheet, and
  2. the current position of the spreadsheet view in relation to the total area used by the spreadsheet.
If the slider fills the entire scroll bar, then the current view displays the entire spreadsheet.

To move the view left or right one column at a time:

  1. Move the mouse pointer to the arrow at the left or right of the horizontal scroll bar.
  2. Click the left mouse button.
To move the view up or down one row at a time:
  1. Move the mouse pointer to the arrow at the top or bottom of the vertical scroll bar.
  2. Click the left mouse button.
To move the view one page at a time:
  1. Move the mouse pointer to an empty area at either end of the scroll bar.
  2. Click the left mouse button.
To move the view anywhere in the spreadsheet:
  1. Move the mouse pointer into the slider.
  2. Press the left mouse button and drag the slider until the view reaches the desired location.
  3. Release the mouse button.

Moving with the GO TO Function

Xess lets you jump to a designated cell address anywhere in the spreadsheet. This feature is particularly useful in large spreadsheets that are cumbersome to scroll through. Even in moderate-sized spreadsheets, the Go To feature is often the fastest way to get to your destination.

To Go To a designated cell:

  1. Display the View menu from the main menu bar.
  2. Select Go To from the View menu. Xess displays the Goto Cell dialog box.
  3. Position the cursor inside the entry box titled "Selection" and click the left mouse button to activate the text insertion cursor. The default entry is cell A1. Type the address of the cell to which the cursor should move.
  4. Click on the OK button or press [Return] to carry out the function. click on Apply to apply the changes and retain the window. Click Cancel to cancel the action.
Xess changes the view so that the requested cell appears in the top left corner of the spreadsheet area.

Moving to the TOP/BOTTOM of the sheet

Xess provides a one-step operation to get to the top (A1) or bottom (A32767).

To use TOP/BOTTOM

  1. Display the View menu from the main menu bar.
  2. Select TOP or BOTTOM from the View menu.

Named Ranges

Using Named Ranges

Individual cells and rectangular ranges of cells may be referred to by their standard address coordinates (A5..D25, for example) or by pre-assigned names. Using names can help illuminate the logic of your spreadsheet, making it easier to share among users and easier to update long after originally designed. The Named Range dialog lets you assign a name for any cell or range. Once defined, names can be used anywhere standard cell/range references are used including cell formulas.

The following guidelines apply to named ranges:


Named Range Dialog

To name a cell or range:
  1. First select(highlight) the desired cell or a range of cells which needs to be named.
  2. Next, display the Edit menu from the menu bar.
  3. Select Named Range... from the Edit menu. Xess displays the Named Range dialog box.
  4. The selected cell(or a range) address is displayed inside the entry box titled "Selection".
  5. Position the cursor in front of the cell address and click the left mouse button to activate the text insertion cursor. At the current cursor position, type the appropriate name to be assigned to the cell or range. (e.g. first_qtr_totals = B3..D13)
  6. Click the Set button to activate the selection. If the entry is correct, the new entry is displayed inside the Named Range List box.
To Clear names from the list
  1. If you decide to erase(clear) any of the entries inside the Named Range List, first position the cursor on the entry and click the left mouse button to highlight the entry. Next, click Clear to clear the entry.

    Limitation:

    Note that cell names which "look" like a row/column address such as ACT1 cannot be used as a name. This means that names which consist of 1,2, or 3 characters less than or equal to "FAN" followed by a number cannot be used as a name.


Naming the Spreadsheet

Xess stores spreadsheets by names with extensions. The name identifies the spreadsheet for your purposes; the file extension lets Xess identify the file type for different operations. File names for Xess data files end in .xs. You should assign names that are descriptive or mnemonic, so you can easily identify the spreadsheet from a directory listing, possibly weeks or months after you have last used the file. If you have several files that are similar, you can differentiate between them by adding dates or code numbers, for example, MFG_391 or TEST91. If you share a storage device with other users, it is a good idea for all users to agree to begin file names with your initials. Since Xess sorts file names alphabetically, this ensures that your files will be displayed together in a directory listing.

Follow these conventions in assigning spreadsheet names:


Opening Spreadsheets

Both Xess (XS and XS3) and WKS/WK1/WK3 and XLS spreadsheets are loaded via the Open Dialog. Inside this dialog box is a File Format list box which is used to specify which spreadsheet type is to be opened.

When opening a spreadsheet, Xess clears the current spreadsheet, if there is one, and loads the entire spreadsheet along with its default characteristics such as column width and format. If another sheet is open, you will be prompted to Save or Discard changes before proceeding with Open.

You can also load and use spreadsheets from other spreadsheet programs or load columnar-format data from text files (for more information, see the help topic "Importing Data").

Xess Spreadsheets

Xess stores spreadsheets in ASCII format, with the default file extension .xs3 attached to the end of the spreadsheet name. The ASCII format requires more storage than binary formats, but it allows you to copy Xess files from one system to another regardless of the operating system or file structure. To load Xess version 3 spreadsheets, specify the File Format to be 'XS3'.

The extension, .xs, refers to sheets created by version 1 or 2 of Xess. These sheets can be loaded into Xess version 3 or higher by specifying the File Format of 'XS'.

WKS/WK1/WK3/XLS Spreadsheets

Xess Open operations allows you to load and use spreadsheet files stored in WKS, WK1, WK3, or XLS formats. You can also save Xess spreadsheets in WKS, WK1, WK3, or XLS(version 4) format to export to spreadsheet programs that use these formats.

Note that there are differences between spreadsheet programs, so you may have to modify certain formulas or cells to get the spreadsheet to work properly in Xess. You can load most spreadsheets without any difficulty, but those with complex interactions that use macros or certain functions will require some modification.

The default filename extension for Xess Open WK1/WKS formats is ".wk1" and ".wks" respectively. The default filename extension for WK3 is ".wk3"; the default filename extension for XLS is ".xls".

When loading WK*or XLS spreadsheets, please note:

To load an existing spreadsheet:
  1. Select Open... from the File menu which displays the Open Sheet dialog box to specify the filename you wish to load.

    or

    Click the "open folder" icon button on the toolbar.

  2. Select the appropriate file type from the File Format list box.
  3. Click the left mouse button inside the entry box titled "Selection" to activate the text insertion cursor. Type the name of the spreadsheet you wish to use, or select a spreadsheet by highlighting its name in the Files list. The Files list box displays an alphabetical list of all spreadsheets whose names meet the criteria in your File Filter. If the list is large, all the document names may not fit inside the box.
    1. To scroll through the list of file names, click the up and down arrows along the right side of the Files box list or drag the scroll bar.
    2. To display files of specific alphabetical section of the list, type the first character(s) of the name of the file(s) you are looking for (e.g. /tes*.wk1) inside the Filter entry box. Click on Filter to display filename(s) beginning with these characters.
  4. Click OK or press [Return] to confirm. Click Cancel to cancel the operation.

Overview

        Copyright 1990 - 1996 Applied Information Systems, Inc.
                         Chapel Hill, NC, USA
                         All Rights Reserved

Xess is an advanced spreadsheet designed specifically for the X Windows environment. By using the intuitive Xess user interface, you can easily access its powerful computational and graphical tools.

The Xess spreadsheet provides a flexible and comfortable visual environment in which to handle complex calculations and data manipulations. It calculates a full range of mathematical, statistical, matrix and string functions -- all with the ease of a familiar spreadsheet format with point- and-click screen displays and pull-down menus.

Like those in other spreadsheets, cells in an Xess spreadsheet contain constant numeric values, text strings, and formulas that calculate new values. However, with its extensive range of features and functions designed for the advanced user, Xess defines a new generation of spreadsheets.

A powerful feature of Xess is its understanding that the world does not stand still. In a world of spreadsheets that only capture a snapshot in time, Xess is a step up to live action -- capable of sending and receiving data and instructions from other X Windows programs, even on other computers, and automatically recalculating every referenced area as it goes.

This capability allows Xess to monitor and display data from multiple sources as it is calculated and to pass this information to other programs in a real-time environment.

A toolkit (API) is provided which makes it easy for C or Fortran programmers to develop customized applications or even extensions to the spreadsheet itself.

The entire spreadsheet environment can be customized to reflect specific user or site preferences. This includes short-cut accelerator keys and start-up defaults.


Page Break

Xess allows you to change the default pagination by setting page breaks as needed, horizontally and vertically. Page breaks are marked by thickened row or column borders below (horizontal) or to the right (vertical) of the current cell. When multiple pages are defined in one sheet, the printing order is over, then down.

To set a horizontal page break:

  1. Position the cell cursor in the row which marks the end of the page segment.
  2. Select "Insert Page Break Row" from the Edit menu.
To set a vertical page break:
  1. Position the cell cursor in the column which marks the desired vertical page boundary.
  2. Select "Insert Page Break Column" from the Edit menu.
To remove a page break:
  1. Position the cell cursor in the row above or in the column to the left of the page break indicator.
  2. Select "Delete Page Break Row/Column" from the Edit menu.

Page Options Dialog

The page definitions are grouped within the Page Options dialog box, available from the Options menu or from the Print Sheet dialog box.

To change Page options:

  1. Select the Options menu from the menu bar.
  2. Select Page Options from the Options menu. Xess displays the Page Output dialog.
  3. Change any of the following options accordingly:
  4. Click OK or press [Return] to confirm. Click Apply to apply the changes and retain the window.

Print Sheet Dialog

Xess allows you to print your spreadsheet to a printer or incorporate it in another document in either of the following formats:

Printing in PostScript Format

The primary Xess print format is PostScript, which gives you considerable flexibility in defining page size, font, colors, margin widths, and other characteristics. Many programs, such as document management programs, can incorporate encapsulated PostScript files. However, not all printers can support PostScript formatting options such as fonts and page orientation; check the manual for your printer to determine its capabilities for handling fonts, proportional spacing and other PostScript extras.

PostScript Formats are defined through four mechanisms:

Printing in ASCII Text Format

Xess can print in plain text ASCII format, a widely-compatible format that can be printed on simple printers, included as text in other documents, or used by other programs. When printing in ASCII format, Xess makes no attempt to break the text into pages, maintain margins, or print bold and italic type.

Printer Chooser

If you have selected Printer as your destination, Xess will display a list of available printer choices defined in the Xess resource file. Each printer choice includes an associated print command string which is displayed in the Print Command area. This features allows a site to define a domain of output devices with whatever PostScript device/options are supported with the associated command.

To define multiple print commands in the resource file, set the resource similar to the following:

        *printers:      tag1:command1\n\
                        tag2:command2\n\
                        tag3:command3\n\
                        .
                        .
                        .
                        tag20:command20
For example:
        *printers:      Default:lpr %s\n\
                        Preview:dxpview %s
Note that the output device need not be a printer - it could be a PostScript previewer, for example. Make sure that the last entry is not followed by the \n\ sequence.

What gets printed:

There are three ways to control what is printed when the print operation is selected:
  1. Highlight a range of cells.
  2. Specify print range in the Printer Options dialog box.
  3. Default to entire (used portion) of sheet.
Xess follows the precedence reflected in the above order when determining what to print.

To print a spreadsheet:

  1. Click the printer icon button from the toolbar

    or

    Select one of the following from the File menu:

  2. If the Print Sheet dialog box is displayed, you may access the following dialog boxes: For details on either, refer to help topics, Printer Options and Page Options respectively.
  3. When you are satisfied with the print and page options, proceed as follows according to the specified Destination:
  4. Click OK to complete the print operation. Click Cancel to cancel the print operation altogether.

Printer Options Dialog

  1. Display the Options menu from the menu bar.
  2. Select Printer Options from the Options menu. Xess displays the Printer Options dialog box.
  3. Specify any of the following printer options accordingly:
  4. Click OK or press [Return] to confirm. Click Apply to apply the changes and retain the window.

Recalculation Options

  1. Select "Recalc Options..." from the Options menu. Xess displays the Recalc Options dialog box.
  2. Recalc Mode may be set as follows:
  3. Recalc Method may be set as follows:
  4. Constraint Checking may be selected/deselected by clicking the pushbutton to control whether or not recalculations check constraint expressions attached to cell formulas.
  5. You may set the Iteration Limit can be set to value 0-100 by moving the selector on the drag bar.

    When the "Iteration Limit" field is set to a non-zero value, iterative calculation is enabled. In this mode, Xess will make multiple recalculation passes, still preserving the natural order and minimal recalculation rules, until either the iteration limit has been reached or, if constraint checking is enabled, until all constraints are satisfied, whichever comes first.

  6. Click OK or press [Return] to confirm and apply your recalculation options. Click Apply to apply the changes and retain the dialog window. Click Cancel to dismiss the dialog box.
Calculations contains more detailed information about iteration limits, recalculation methods, and constraint-checking.

Regular Expressions

Regular expressions in Xess specify patterns to be matched in textual comparisons. They are used in the Find and Extract tools, and in the @REGEX function. The syntax for Xess regular expressions is identical to that in standard Unix text utilities, such as vi and grep.

Xess regular expressions consist of a string of characters. Unless a character is "special" it must match the corresponding character in the string which is being evaluated. For example, "abc" is a regular expression which matches any string containing "abc" as a substring. The "special" characters are as follows:

.       A period matches any character.  Example: A.C matches "ABC"
        or "AXC."

^       Matches only at the beginning of a field.  Example: ^ABC matches
        "ABC" but not "AABC."

$       Matches only at the end of a field.  Example: ABC$ matches
        "AABC" but not "ABCD."

[x-y]   Matches any character between the character x and the character y.
        Example: [0-5]$ finds fields ending in the characters 0 through 5.

[xyz]   Matches any character in the list xyz.  Example: [05]$ finds fields
        ending in either a 0 or a 5.  This form and the one above can be
        combined.  [27-9]$ will find fields ending with the characters 2, 7,
        8, or 9.

*       Matches zero or more occurrences of the preceding pattern.
        Example: ^A.*B$ matches any string that begins with "A" and ends
        with "B."

+       Like *, but matches one or more occurrences of the preceding
        pattern.  Example: A.+B matches "ACB" and "A123B" but not "AB."
These methods can be combined with strings of non-special characters. Thus, the pattern [brc]at finds "bat," "rat" and "cat." String comparions will treat upper/lower case and accented/unaccented characters according to Collating Options settings.

Row Height Dialog

  1. Display Format from the menu bar.
  2. Select "Row Height" from the Format menu or MB3 popup menu. Xess displays the Row Height dialog box.
  3. Choose one of the following actions:
  4. Click on the OK button or press [Return] to carry out the function. click on Apply to apply the changes and retain the window. Click Cancel to dismiss the dialog box.

Saving Spreadsheets

The Save function is used to save the current changes made to the spreadsheet - either as an Xess spreadsheet or a WKS/WK1/WK3/XLS spreadsheet. This function saves the file along with its current characteristics, including window size, window location, and scrolling position within the file.

The Save function does not remove your spreadsheets from memory, so you can continue to make changes to them after saving. You should, in fact, save your work periodically during a session to minimize the risk of losing work if the computer system is interrupted for any reason.

If you save a spreadsheet with the same name as one already on your disk (possibly an earlier version of the same spreadsheet), one of two things happens:

  1. On systems which support multiple versions or generations of files (e.g. VAX/VMS), a new file is created with a higher version number. This allows earlier versions to be archived.
  2. On systems without version numbers (e.g. Unix), the new spreadsheet replaces the previous spreadsheet on the disk. Because of the limits of the file systems, the earlier version no longer exists on the disk.

To save a spreadsheet:

  1. Click the diskette icon button on the toolbar

    or

    Select Save/Save... from the File menu. If this is the first Save, Xess displays the Save Sheet dialog box for you to specify the spreadsheet filename. If this is not the first time, Xess will save the sheet with the current settings.

  2. If the Save Sheet dialog is displayed, select the desired spreadsheet format from the File Format list box. Click the left mouse button inside the entry box titled "Selection" to activate the text insertion cursor. Type the name of the spreadsheet file you wish to use, or select a spreadsheet cell file by highlighting its name in the Files list box. The Files list box displays an alphabetical list of all spreadsheets whose names meet the criteria in your File Filter. If the list is large, all the document names may not fit inside the list box.
    1. To scroll through the list of file names, click the up and down arrows along the right side of the Files list box or drag the scroll bar.
    2. To display files of specific alphabetical section of the list, type the first character(s) of the name of the file(s) you are looking for (e.g. /tes*.xs3) inside the Filter entry box. Click on Filter to display filename(s) beginning with these characters.
  3. Click OK or press [Return] to confirm. Click Cancel to cancel the operation.

To save a spreadsheet that has already been named:

Notes on saving spreadsheets in WKS/WK1/WK3/XLS Formats

The WKS/WK1/WK3/XLS formats allow you to share an Xess spreadsheet with users of many other common spreadsheet programs. (Note that XLS must be version 4; which can be created with the current version of Microsoft Excel and other products.) When exported to any of these files formats, Xess formulas and formats are translated to formulas and formats supported by WK* and XLS. Column widths are translated, as are cell protections and named range definitions. Colors and fonts are exported to WK3 and XLS files.

Because there are differences between spreadsheet programs, you may have to modify certain formulas or cells to get the file to work properly in the other spreadsheet. Here are some principal differences:


Select Range Dialog

Ranges can be selected using a dialog box with the mouse/keyboard.
  1. Display the Edit menu from the menu bar.
  2. Select Select... from the Edit menu. Xess displays the Select Range dialog box.
  3. Position the cursor inside the Select range entry box and click the left mouse button to activate the text insertion cursor.
  4. At the current cursor position, enter the range to be selected. Separate the two cell addresses by two periods. (e.g. A5..D32)
  5. Click OK or press [Return] to confirm. Click Apply to apply the selection and retain the window. Click Cancel to dismiss the dialog box. The selected cells are now highlighted.

Select Ranges Using the Mouse

Using the mouse, Xess provides a quick way of selecting (highlighting) a range of cells to perform a desired operation. Its operation is modeled after the Motif Style Guide.

To select a range of cells in view

First position the cell cursor at either one of the four corner cell locations of the desired range. Next, while holding down the left mouse button, drag the mouse to the desired cell range and release the left mouse button. While dragging the mouse, a box is drawn around the cells being selected. This range is displayed (e.g. selecting B5..D14) on the upper right corner of the Control/Status window. Once the mouse button is released, the selected cell range is highlighted and is displayed (e.g. B5..D14 selected) on the upper right corner of the Control/Status window.

Selecting a full(full range)row or column

To select a full row (e.g. A1..ZZ1), position the cursor on the row number located to the left of the data view area of the spreadsheet (1), and click the left mouse button. The whole row (A1.. ZZ1) is highlighted. You can use the same method to select a full column.

Selecting a block(full range) of rows or columns

To select a block of rows first position the cursor on the starting row number located just outside the spreadsheet area to the left and drag the mouse (still holding the left mouse button) over the row numbers title until the desired range is selected. Release the left mouse button when the desired range is selected. While dragging the mouse, a box is drawn is drawn around the cells being selected and this range is displayed (e.g. Selecting A1..ZZ5) on the upper right corner of the Status window. Once the mouse button is released, the selected cell range is highlighted and this range is displayed (e.g. B55..D14 Selected) on the upper right corner of the Control/Status window. You can use the same method to select a block of columns.

To select a range of cells outside the viewing area

You can also use the mouse to select ranges which are outside the current viewing area of the spreadsheet.

One option is to scroll through the spreadsheet using the horizontal and vertical scroll bars. To quickly scroll the spreadsheet to the desired viewing area, position the cursor on the slider bar (vertical or horizontal), while holding down the left mouse button, drag the slider until the desired viewing area is reached. Once the desired viewing area is reached, you can use the mouse to select a range of cells as described above.

Using the Select Range dialog box

The selection method can be tedious if your spreadsheet is very large. Another option is to use the Select Range dialogue. For more information, select "Help" from within the Select Range dialog box or choose "Select Dialog" from the Help Index.

Sheet Defaults Dialog

Default Sheet options are preset definitions that affect the entire sheet. By changing the default characteristics, you can affect all cells in the spreadsheet. The settings are viewed and changed in the Sheet Defaults dialog box. Additional cell defaults can be set in the Cell Defaults dialog box access from Cell Defaults under the Options menu.

To view or change Default Sheet Options settings:

  1. Select Sheet Defaults from the Options menu. Xess displays the Sheet Defaults Options dialog box for you to view or change default settings.
  2. Change any of the following settings accordingly:
            Default Column Width    Type the desired column width.
    
            Default Row Height      Type the desired row height.
    
            Grid Lines              Click checkbutton ON to display row/column
                                    grid lines.  Click checkbutton OFF to
                                    remove row/column grids lines.  This also
                                    determines whether to not grid lines are
                                    printed.
    
            Grid Color              Move the pointer to the color OptionButton
                                    and hold down the left mouse button.  Move to
                                    to the desired color and release.  This deter-
                                    mines the color of the grid on screen as well
                                    as printouts to color printers. The
                                    color palette can be changed.
    
            Move On Entry           This option indicates the direction the cell
                                    cursor should move after you complete a cell
                                    entry.  This option can be a time-saver in
                                    spreadsheets with a redundant pattern of data
                                    entry, for example: a long vertical column of
                                    numbers to enter.
    
                                    Click on the option button to display the list
                                    of available choices. While holding down the
                                    left mouse button, move the pointer to the
                                    desired choice and release.  The options are:
    
                                    OFF             Stays in the same cell
                                    UP              Moves up one cell
                                    DOWN            Moves down one cell
                                    RIGHT           Moving right one cell
                                    LEFT            Moves left one cell
    
            Check Protection        Determines whether or not cell protection is
                                    enforced.  Click the check button ON if you
                                    want cell protection enforced.  (Cell protection
                                    is set from the Tools menu and Cell Defaults
                                    dialog box.)  To ignore cell protection, click
                                    the check button OFF.
    
            Toolbar                 Determines whether to a set of icon buttons
                                    are displayed below the menu bar as described
                                    in the toolbar topic.
    
            Case Collating Options  Determines how Xess treats upper/lower case
                                    as described in Collating Options.
    
            Accent Collating Options Determines how Xess treats accented/
                                    unaccented characters as described in
                                    Collating Options
    
  3. Click OK or press [Return] to confirm and apply your formatting to the entire sheet. Click Apply to confirm and retain the dialog window. Click Cancel to dismiss the dialog box.

Sorting

Xess can sort the contents of a selected range into ascending or descending order by rows. Unlike most popular spreadsheets, Xess keeps track of what it moves and where -- and updates cell references throughout the spreadsheet to reflect the changes that occurred while sorting. However, Xess lets you choose not to update cell references, if you wish.

Before sorting a range of cells, consider these rules that Xess follows for sorting:

To sort a range of cells:
  1. Display the Tools menu from the menu bar.
  2. Select Sort from the Tools menu. Xess displays the Sort dialog box for you to enter the range to be sorted and up to five keys with Ascending/Descending option for each key.
  3. To activate the text insertion cursor inside the entry boxes, position the cursor inside the entry box and click the left mouse button.
  4. Make the following entries in the Sort dialog box:
                    Range           Type the addresses of opposite corners of the
                                    range to be sorted, separated by dots
                                    (for e.g: A1..D5). Alternatively, use the mouse
                                    to select a range from the spreadsheet. Then
                                    position the mouse inside the range box and
                                    press the PASTE button.  The range is automatically
                                    entered inside the Range entry box.
    
                    Key 1...Key 5   Enter any cell address of the column index of
                                    the column on which to base the sort.  For
                                    example, to sort by the contents of column B,
                                    enter B1.  If you enter a range, Xess uses the
                                    leftmost column of the range.
    
                                    Key 1 is the primary key, key 2 is the
                                    secondary, and so forth.
    
                    Descending      Click the check button ON for sorting in
                                    descending order of magnitude. By default,
                                    Xess sorts in ascending order.
    
                    Update References
                                    By default, Xess updates cell references when
                                    it moves formulas in cells during a sort.  To
                                    tell Xess not to update cell references,
                                    click this button off.
    
                    Case...         If you wish to disable case sensitivity or
                                    change collating sequence with respect to
                                    case, select the appropriate option.
    
                    Accents...      If you wish to disable accent sensitivity or
                                    change collating sequence with respect to
                                    accented characters, select the appropriate 
                                    accent option.
    
    
  5. Click OK or Apply to proceed. Xess sorts the cells and displays the result, with the Sort dialog displayed on screen.
Use Undo to reverse the effect of the Sort operation.

Toolbar

A toolbar is a set of icons which are typically displayed below the main menu and are short-cuts to frequently used operations. In Xess, you may turn this toolbar on or off via the toolbar check button in the Sheet Defaults dialog. The icons are defined as follows:

To add or remove the toolbar:

  1. Select Sheet Defaults from the Options menu to display the dialog box.
  2. Click the Toolbar check button on to add the toolbar to the display; click the button off to remove the Toolbar from the display.
  3. Click Apply or OK to complete the operation.

To use the toolbar:

  1. If appropriate, select the row(s), column(s), range, or cell to be affected.
  2. Click the toolbar icon once with the left mouse button.

Undo

This operation allows you to undo the last destructive operation performed on the spreadsheet. The Undo operation is context-sensitive. The Undo button on the Edit menu indicates which operation will be undone if Undo is activated.

For example, If the last operation was an editing operation, the button would read "Undo Edit." After the Undo has been performed, the Undo button will be grayed out until another "undoable" operation occurs.

To undo the last destructive operation:


View Options

Several options are available which make it easy to navigate through the sheet or create a whole new display. These options are found under the View menu. They are applied to the Xess window which has the focus - referred to below as the 'view sheet'. The following options are available:
        Top                     Goto the (absolute) top of the view sheet.

        Bottom                  Goto the (absolute) bottom of the view sheet.

        Go To                   Goto a specific cell address in the view sheet

        Lock View Titles        Define a group of cell from the cell cursor
                                up and to the left which will remain on screen
                                when the view sheet is scrolled. Locked view
                                titles are designated by red/darkened row
                                borders.

        Unlock View Titles      Disable the titles that are set with the
                                preceding option.

        Create New View         Displays an independent viewing window
                                of the current sheet loaded.

Note that you can apply any available functions to the view in focus such as Search, Sort, Extract.

View Windows

Xess allows you to define different views into the same sheet. All views are saved and restored when the sheet is saved and re-opened.

To define a new view:

  1. Select View from the menu bar.
  2. Select 'Create New View' from the View menu. Xess display a new window on top the main viewing area.
Once you have created a new view, all options on the main menu may be applied to the view(s) that has the active cell.

Xess Resources

The Xess executable file contains fallback resource definitions which eliminates the requirement for a separate resource file. However, you may override these fallbacks by either or both of the following: using the standard X11 and OSF/Motif resource mechanisms.

System-wide Preferences

These resources are specified by following syntax:
 "<resource name>":    "<value>"

where "resource name" is one of the Xess resources and "value" is one of the possible values for the resource.

The resource file must be named "Xess3" and placed in /usr/lib/X11/app-defaults/.

User Preferences

The resource file must be named "Xess3" and placed in the user's "home" directory or appended to their current .Xdefaults file.

If you choose the second option the resource definitions described under System-wide Preferences must be prefixed with the class name as follows:

 "<class name>"."<resource name>":    "<value>"

where "class name" in this case is "Xess3".

For an exact definition of the resources, refer to the resource file named Xess3 (or Xess3.dat on VMS) included with the distribution. You may tailor it to your specification then save it as "Xess3" (or Xess3.dat on VMS).