summaryrefslogtreecommitdiff
path: root/math/oleo
diff options
context:
space:
mode:
authorJordan K. Hubbard <jkh@FreeBSD.org>1994-10-11 18:17:01 +0000
committerJordan K. Hubbard <jkh@FreeBSD.org>1994-10-11 18:17:01 +0000
commitcb0ed085ba0bb947e31450d09eac8a66fb04e4d2 (patch)
treec4f89afff0abd0d580898a1c06d73f17eb5f2aee /math/oleo
parentUpdates from Jean-Marc Zucconi. (diff)
Michael Reifenberger's oleo port.
Submitted by: mr
Notes
Notes: svn path=/head/; revision=211
Diffstat (limited to 'math/oleo')
-rw-r--r--math/oleo/Makefile14
-rw-r--r--math/oleo/pkg-comment1
-rw-r--r--math/oleo/pkg-descr1036
-rw-r--r--math/oleo/pkg-plist2
4 files changed, 1053 insertions, 0 deletions
diff --git a/math/oleo/Makefile b/math/oleo/Makefile
new file mode 100644
index 000000000000..73c2c8c881ac
--- /dev/null
+++ b/math/oleo/Makefile
@@ -0,0 +1,14 @@
+# New ports collection makefile for: pine
+# Version required: 3.90
+# Date created: 03 September 1994
+# Whom: mr
+#
+# $Id: Makefile,v 1.5 1994/09/14 14:12:02 jkh Exp $
+#
+
+DISTNAME= oleo-1.6
+MASTER_SITES= ftp://prep.ai.mit.edu/pub/gnu
+EXTRACT_SUFX=.tar.gz
+HAS_CONFIGURE=yes
+
+.include <bsd.port.mk>
diff --git a/math/oleo/pkg-comment b/math/oleo/pkg-comment
new file mode 100644
index 000000000000..396393299779
--- /dev/null
+++ b/math/oleo/pkg-comment
@@ -0,0 +1 @@
+Oleo is a Spreadsheet Program, version 1.6
diff --git a/math/oleo/pkg-descr b/math/oleo/pkg-descr
new file mode 100644
index 000000000000..4d59cb1dcae6
--- /dev/null
+++ b/math/oleo/pkg-descr
@@ -0,0 +1,1036 @@
+
+ How to Use Oleo
+
+This is a brief description of Oleo. It is not a good introduction to
+spreadsheets in general. We hope to provide more complete
+documentation in the future.
+
+
+ Cell references:
+
+The case of cell and range letters is ignored. Lowercase letters in
+cell and range letters are silently turned into their uppercase
+equivelents.
+
+ Absolute vs Relative references:
+
+A reference to a cell may be either absolute or relative. The only
+difference between them (besides how they are printed) is how they are
+adjusted when a cell is moved or copied.
+
+When an expression containing an absolute reference is moved or copied, the
+reference will still point to the same cell.
+
+When an expression containing a relative reference is moved or copied, the
+reference is changed to point to the cell at the same offset from the
+reference's new position.
+
+So if the expression 'R[+1]C[+1]' is in cell R8C9 it refers to cell R9C10.
+If the same expression is copied into cell R1C1 it will refer to R2C2.
+
+
+ Address Syntax:
+
+Oleo supports two syntaxes for cell address, called `a0' and `noa0'.
+To switch between these syntaxes, use the set-option command.
+
+ M-x set-option a0
+ M-x set-option no a0
+
+
+ In 'noa0' mode: (the default)
+
+Absolute cell references have the form R{row_num}C{col_num}, as in R1C1 (the
+topleft cell in the sheet).
+
+Relative ones have the form R[{offset}]C[{offset}], as in R[-1]C[+1] (The
+cell above and to the right of the current cell). An offset of zero, can be
+deleted, along with its square-brackets, as in RC[+1] (the cell to the right
+of the current cell.)
+
+Mixed-mode references also work about the same as you'd
+expect, as in R4C[-1] (the cell in row four that's one left
+of the current cell.)
+
+Ranges are of the form R{row1}:{row2}C{col1}:{col2}, where the row and
+column references may be either absolute or relative. If
+{row2}=={row1} or {col2}=={col1}, the colon and the redundant number
+may be omitted, as in R1:10c2 (Rows one through ten in column two).
+
+Mixed-mode rangers work, and have the syntax you'd expect, as in R2:[-1]c3.
+
+
+ In 'a0' mode:
+
+Relative cell reference have the form {col_let}{row_num}, as in A1 (the
+topleft cell in the sheet).
+
+Absolute ones have the form ${col_let}${row_num}, as in $A$1 (The topleft
+cell in the sheet).
+
+Mixed-mode ones work about the way you'd expect, with $A1 having an absolute
+column, but a relative row. . .
+
+Ranges are either {cell_ref}:{cell_ref} or {cell_ref}.{cell_ref}, where the
+cell_refs describe opposite corners of the range. So A1:B2 is the topmost,
+leftmost four cells in the spreadsheet.
+
+Mixed mode rangers work, and have the syntax you'd expect, as in '$A3.$F9.
+
+
+
+ Keymaps:
+
+Keymaps may have a 'default map'. If a key is pressed which does not have an
+assigned meaning in that map, the map's default map is checked, and that
+map's default map, until a command is found or there are no more default maps
+to scan.
+
+Here is a list of keymaps, and the keymaps to which they default:
+Oleo normally has five keymaps. They are:
+
+ KEYMAP (DEFAULT) USE
+ universal The root of all keymaps.
+ help (universal) Help commands.
+ mouse (universal) Bindings for mouse buttons.
+ navigate (universal) Commands that move the cursor.
+ trolx-navigate (universal) Navigate commands prefixed by ^X.
+ meta-navigate (universal) Navigate commands prefixed by ESC.
+ main (navigate) The default keymap.
+ trolx (trolx-navigate) Default ^X commands.
+ meta (meta-navigate) Default ESC commands.
+ digit (main) The numeric prefix keymap.
+ edit (universal) The keymap for edditting in the input area.
+ meta-edit (universal) Edit commands prefixed by ESC.
+ trolx-edit (universal) Edit commands prefixed by ^X.
+ ansi (universal) A keymap for ANSI arrows keys.
+
+
+The command write-keys can be used to produce a listing of
+keybindings. Also, the source file init.c lists the default bindings.
+
+
+ Input Editing:
+
+When the spreadsheet is reading text input, you can use a few
+text-editing commands. Note that there in no history mechanism and no
+yank command. If you accidentally ^U your text, it is *gone*.
+This will be improved in the future.
+
+While the input area is active, the commands that move the cell cursor
+are disabled. If you want to move the cell cursor, use the
+other-window command (^X-o) to leave and later reenter the input area.
+
+The following editing commands are defined:
+
+Name: Key: What it does:
+
+M-A insert-abs-ref Insert/over-write an absolute reference to the
+ current cell/region.
+M-R insert-rel-ref Insert/over-write a relative reference to the
+ current cell/region.
+M-E insert-cell-expression Insert/over-write the expression in the
+ current cell.
+M-V insert-cell-value Insert/over-write the value of the current
+ cell.
+^A cursor-begin-line Move the cursor to the beginning of the text.
+^B cursor-back-char Move the cursor back a character.
+M-B cursor-back-word Move back a word.
+^D delete-next-char Delete the character under the cursor.
+M-D delete-next-word Delete from the cursor to the end of
+ the current word.
+^E cursor-end-line Move to the end of the text.
+^F cursor-fwd-charF Move forward a character.
+M-F cursor-fwd-word Move forward a word.
+^H ^? delete-prev-char Delete the character to the left of the cursor.
+^J ^M finish-line Finish editing the text, and execute the
+ command you've been typing the text in for.
+^K delete-to-end Delete from the cursor to the end of the text.
+M-O toggle-over-write Toggle between overwrite and insert mode.
+^U ^X delete-to-start (BEWARE!) Deletes from the cursor to the
+ beginning of the line.
+^W delete-prev-word Delete the word to the left of the cursor.
+' ' to ~ self-insert These characters are either inserted or
+ over-written into the text.
+^X-O other-window Move the cursor into the cell area.
+
+ Input Defaults:
+
+Almost all editing commands remember what you typed the last time you used
+that command, and start you up editing a copy of that text. If you want to
+type in something completely new, just type ^X (or ^U) and type in your new
+text.
+
+
+ Error Messages:
+
+Error messages are displayed on the input line. If oleo needs to display
+more than one error message at a time, it will display [MORE] at the end of
+the first msg, and will wait for you to type a key before displaying the next
+one. Oleo will also display the [MORE] message if you are entering text in
+the input line, so that you will be able to see the error message.
+
+ Info Messages:
+
+Some commands (like format-cell) occasionally display non-error information.
+If the status line is enabled, the message is displayed there, and subsequent
+non-error messages will over-write them without [MORE] prompting. This in
+quite useful if the msg in question concerns how far oleo has gotten through
+some task (like reading a file). If the status line is disabled, the
+messages are displayed in the input line.
+
+ The Main Commands:
+
+Key Command Name What it does
+h ^B go-left These commands move the cell-cursor one cell
+j ^N go-down in the appropriate direction.
+k ^P go-up
+l ^F go-right
+y go-upleft
+u go-upright
+b go-downleft
+n go-downright
+
+H ^X-< scroll-left These scroll the current window one screenful
+J M-v scroll-down in the appropriate direction. They try to
+K ^V scroll-up leave the cell cursor in (roughly the same
+L ^X-> scroll-right place in the window, so that an L followed by
+Y scroll-upleft an H will leave the cell cursor back in the
+U scroll-upright original cell, however, since the number of
+B scroll-downleft rows and columns in each screenful varies,
+N scroll-downright this will not always work.
+
+M-H M-b scan-left These commands move to the first/last nonempty cell in
+M-J M-n scan-down the current row/column. If given a repeat count, they
+M-K M-p scan-up go to the N-th most nonempty cell. If there are no
+M-L M-f scan-right cells, the cursor is moved to the leftmost/top cell.
+
+^G break This will abort a partially completed command. If you are
+ typing text on the top line, the text you typed will be saved
+ and presented as the default the next time you start that
+ command.
+
+^L recenter-window This redraws the screen. If the page option
+ is not set in this window, it will try to move the current
+ cell to the center of the window. If the page option is set,
+ this will just redraw the screen.
+
+o set-option This asks for an option to set or reset, and tries to
+ do so.
+
+
+d set-defaults This command will change the default alignment, format,
+ protection, or width. If the status-line is enabled,
+ this will display the current settings there.
+
+Q quit This command exits the spreadsheet and returns you to the
+ shell. This may ask for confirmation if oleo thinks you have
+ unsaved changes. If you do not save your changes before
+ quitting, they will be lost forever.
+
+^R M-^l redraw-screen This redraws the screen. It is most useful if
+ line-noise or another program has scribbled on your display.
+
+
+M-U set-user-format Set a user-defined format.
+
+v set-variable This prompts you for a name followed by a cell or
+ range that you want to refer to by that name. To
+ 'undefine' a variable, use set-variable with just its
+ name.
+
+V show-variable
+
+^V show-all-variables This shows the values of all currently defined
+ variables.
+
+! recalculate Recalculate the spreadsheet until all the cells whose
+ values may have changed have been evaluated. If there are
+ circular cell references, the cells in the loop will be
+ evaluated at most 40 times (this number subject to change!)
+
+: bind-key This asks for the name of a keymap followed by a
+ command name and a key to bind it to. If the 'command' you
+ give is a cell or region in the spreadsheet, it is taken as a
+ macro, and bound to the key you specify.
+
+; describe-key Have the user press a key, and then describe
+ what function that key is bound to.
+
+M-< read-commands This command opens the file you specify reads in each
+ line, and executes them as if you'd typed them in to
+ execute-command. If any command needs more arguments than are
+ included on the line, it will prompt you (interactively) for
+ the missing information.
+
+M-> write-keys Write a list of commands to the file that, when
+ executed with read-commands, will return the keymaps to their
+ current state.
+
+w ^x^s Save the spreadsheet to a file, using the current
+ file-format.
+
+r ^x^v visit-spreadsheet Read in a file in the current
+ file-format. This erases the current contents of the
+ spreadsheet first. This may ask for confirmation.
+
+R ^x^i merge-spreadsheet
+ Read in a file and merge its contents into the
+ current spreadsheet. Note that some file-formats, (like
+ panic-save) won't work with this command.
+
+^X-DEL clear-spreadsheet
+ Delete the entire spreadsheet. This may ask
+ for confirmation if oleo thinks you may be about to lose
+ un-saved work.
+
+c copy-region Copy a region. Takes two ranges, copies the source
+ range into the dest range. If the dest range size is a
+ multiple of the source range size, the source range is copied
+ multiple times. If the dest range is given as a cell, the
+ cell is the location of the top-left corner of the dest range.
+
+C copy-values-in-region Copy just the values of one region to another.
+
+F format-region Change the format, alignment, protection,
+ or width of a region. If the status line is active, oleo
+ will display the current alignment, format, width and
+ protection of the top-left cell in the region.
+
+m move-region This is similar to copy-region, except that the two
+ ranges must be the same size, and that cells that reference
+ the source region may be modified to reference the dest
+ region instead. (absolute references are modified, relative
+ ones aren't.) Variables whose ranges are inside the source
+ region are also adjusted.
+
+p print-region Print a region to a file. Asks for a region
+ (to print) and a filename to to write to.
+
+s sort-region Sort a region. This takes the region to sort, a
+ region that is the first element of the region, and a list of
+ cells that are to be used as the sorting-keys. Here's an
+ example. sort-region r1:100c1:10 r1:2c1:10 +r1c2 -r1c3 This
+ means: Sort the region R1:100C1:10 in two-row, ten-column
+ chunks, sorting on the cell that's in the top-row
+ one-column-in. If they are similar, use the cell in the
+ top-row two-columns-in, with high values ending up before low
+ ones.
+
+^x-w write-region-to-file Write a region of the spreadsheet to a file.
+ This command is not allowed with some
+ file-formats (like panic-save).
+
+X delete-region Delete {value, formula, format, etc} of a
+ region. This DOES NOT ask for confirmation.
+
+M-( start-entering-macro Start storing a keyboard macro. Keyboard
+ macros are strings that contain the characters you typed.
+
+M-) stop-entering-macro Finish a keyboard macro, and store it in a
+ cell that you specify.
+
+M-X execute-command This will allow you to execute either a
+ builtin command, or a macro. For a builtin command, simply
+ enter the command's name (and, optionally, any arguments the
+ command will want). For a macro, enter its name, or
+ the region in the spreadsheet that contains it.
+
+ You can create macros with text strings. Command names may
+ be enclosed in {CMD}, as in {go-left}. Some commands may
+ take arguments, as in {go-up 12} or {goto-cell r1c3}. To
+ execute multiple commands, concatenate them. Other
+ characters are taken as keystrokes, and act exactly as if you
+ had typed them.
+
+ When the spreadsheet is executing a macro, it stops when
+ 1) It encounters an empty cell, or one which is not a string,
+ or which is the empty string "".
+ 2) an error occurs while trying to parse a command name, or a
+ command's arguments.
+ 3) All the cells in the region have been executed.
+
+ The top-left cell in a region is executed first, then the one
+ below it, down to the bottom cell in the macro, then the one
+ to the right of the top-left cell, down to the bottom cell in
+ that column, etc. . .
+
+ Macros may execute other macros.
+
+g ^xg goto-cell Asks for a cell to go to, and moves the cell cursor
+ there. The cell can be either a cell name as in 'R32C96',
+ or a variable. This command starts with a default of
+ wherever the cursor was the last time this command was used.
+ If you type a range, the cursor is placed in the top-left
+ corner of the range, and the cell-mark is placed at the
+ opposite corner of the region.
+
+^@ mark-cell Mark one corner of a rectangular region to use for
+ the next command. (The cell cursor marks the other corner.)
+ You can use this while a command is prompting you for a
+ region by moving to one corner, typing ^@, moving to the
+ other corner, and hitting <RETURN>.
+
+e edit-cell Edit the formula of the current cell.
+
+E edit-value-cell Edit the value of the current cell. Using
+ this command will replace the current cell's formula with a
+ constant expression.
+
+
+f format-cell Change the format, alignment, or protection of the
+ current cell, or the width of the current column. If the
+ status line is enabled, the current alignment, format,
+ protection, and width will be displayed there.
+
+x delete-cell This deletes the (value, formula, format, etc) of the
+ current cell. To delete just the value and formula, use
+ <space><return>.
+
+= edit-cell-with-default Enter a formula for the current cell with the
+ default text of the last formula you typed.
+
+M-0 digit-0 Repeat the next command [digits] times.
+M-1 digit-1 You can type multiple digits, as in
+M-2 digit-2 M-1 0 0 j
+M-3 digit-3 which will go down 100 cells. This command uses the
+M-4 digit-4 digit-map so that you the second and subsequent digits
+M-5 digit-5 do not need to be meta-ized.
+M-6 digit-6
+M-7 digit-7
+M-8 digit-8
+M-9 digit-9
+
+0-9 enter-text-in-cell Enter a new formula that begins with the
+ character typed. Note that this blows away whatever was
+ saved as a default from the last time you entered a formula.
+
+O show-options This shows the current state of all the spreadsheet
+ options, and also shows the current definitions for all the
+ user-defined variables.
+
+^X-2 split-window-vertically
+^X-5 split-window-horizontally
+ These commands divide the current window in half.
+^X-0 delete-window
+ Delete the current window.
+^X-1 delete-other-windows
+ Delete all but the current window.
+^X-o other-window
+ Move to the next window. Repeated, this will visit
+ all the windows.
+
+M-W open-window This command takes a line beginning with the letter
+ 'h' (for horizontal), or 'v' (for vertical), followed by the
+ number of lines/columns to leave in the current window.
+ The cell cursor is placed in the new window.
+
+M-C close-window This takes the number of a window to close, and makes
+ it go away. The surrounding window(s) expand to fill the
+ space the window occupied.
+
+M-G goto-window This takes the number of a window to go to, and
+ places the cell-cursor in that window.
+
+Oleo uses the character ^\ to prefix mouse commands. The default
+bindings in the mouse map are:
+
+0 mouse-goto
+ Move to the pointed to cell.
+1 mouse-mark
+ Mark the pointed to cell without moving.
+2 mouse-mark-and-goto
+ Mark the current cell, and move to the pointed to cell.
+
+The numbers correspond to X button numbers (usually 0 is the leftmost
+button on the mouse).
+
+ Displaying Cell Contents:
+
+If a cell contains a number or string that takes more characters than the
+width of the cell to display, the display may slop over into the cell(s) to the
+right. This does not affect the slopped over cells in any way. Only cells
+that are empty, or have their format set to hidden, will be slopped over.
+
+If there isn't room to display a number, a series of '#', will appear in the
+cell.
+
+If there isn't room to display any other value, only the characters that fit
+(less one, so there'll be a space separating cells) will be displayed.
+
+ Numeric formats:
+
+Oleo can display numbers in a variety of formats. In addition to the sixteen
+user-defined formats, you can use:
+
+integer The number is rounded to an integer before being displayed.
+
+float The number is displayed in normal, everyday notation, using
+ whatever precision is needed (or fits).
+
+hidden The number is not displayed. It is recalculated, etc as
+ normal, but the cell is displayed as if it were empty.
+
+graph The number is displayed as a small graph. If the number is
+ close to zero, it will be displayed as '0', If it is positive,
+ a row of '+'-es is displayed. If it is negative, a row of
+ '-'-es is displayed.
+
+user-1 through These are the sixteen user-defined formats, as described
+user-16 below.
+
+The following formats require a precision. The precision may be a number
+from zero to 14, in which case that number of digits will always be displayed
+after the decimal point (zero-padding or rounding the number as needed), or
+the precision may be 'float', in which case oleo will use as many digits as
+necessary. As examples:
+
+ dollar.2 display like ``$1,769.00''
+ general.float " " ``1769.00032''
+
+
+
+general This uses either normal or scientific notation, depending on
+ the magnitude of the number and the width of the column.
+
+dollar Positive values are preceeded by '$', (so 3 is displayed as
+ '$3'). Negative values are parenthasized (so -3 is displayed
+ as '($3)'), and all large values have a ',' every three
+ digits (so 1000 is displayed as '$1,000'.
+
+comma Positive numbers are not preceede by '$', but this is
+ otherwise identical to 'dollar'.
+
+percent The value is multiplied by 100, and is displayed with a
+ trailing '%'. Thus .01 displays as '1%', while 1 displays as
+ '100%'.
+
+fixed The number is displayed in normal, everyday notation, using
+ the precision specified. 'fixed.float' is the same as
+ 'float'. 'fixed.0' is the same as 'integer'.
+
+exponent The number is displayed in scientific notation.
+
+
+ User-defined numeric formats:
+
+You can set up to sixteen user-defined numeric formats:
+
+The current parts of a format are:
+(Using the 'dollar' format for an example.)
+
+ Example: What it is:
+ $ What to print before postive numbers.
+ ( What to print before negative numbers.
+ What to print after positive numbers.
+ ) What to print after negative numbers.
+ $0 What to print if the number is zero.
+ , What to print between the thousands and the
+ hundreds, etc.
+ . What to print for a decimal point.
+
+ 0-14 or float The number of digits to print after the decimal point.
+ 'float' means use however many digits are needed, or
+ however many will fit, whichever is less. . .
+
+ any-number What to multiply the value by before printing.
+ Most often this will be one, but it might be 100 if
+ you're printing percentages, or .000001 if you're
+ printing in megabucks. (Beware of overflow!)
+
+Do not use digits for the headers, trailers, the comma, or the decimal point
+symbol. Using digits will confuse the internal routines and produce
+incomprehensible results. . . (Should the set-user-format command check its
+input for validity?)
+
+ Other Cell Formatting Options:
+
+Values in a cell may be displayed aligned flush with either the left or right
+edges of the cell, or centered in the cell. The default is left-aligned.
+
+The width of a column of cells may be set to any non-negative value. A value
+of zero means that cells in that column won't be displayed, and the normal
+cursor-motion commands will skip over those cells. However, you can position
+the cursor on a non-displayed cell by using the goto-cell command.
+
+If the width of a column is wider than the display, it is displayed as if it
+were the width of the display.
+
+
+ Currently Supported Options:
+
+(no)a0 In a0 mode, Oleo uses {letters}{digits} style cell-references,
+ like some popular spreadsheets.
+ In noa0 mode, Oleo uses R{digits}C{digits} style references,
+ like some other popular spreadsheets.
+
+(no)auto In auto mode, cells whose values may have chaged are
+ automatically recalculated. In noauto mode, cells are only
+ recalculated when the recalculate command is used.
+
+(no)background In background mode, automatic recalculation is done while
+(no)bkgrnd the spreadsheet waits for you to type a key (and stops while
+ the key is being handled). In nobackground mode, oleo
+ performs all its recalculation before listening for
+ keystrokes. . .
+
+(no)backup In backup mode, whenever the spreadsheet writes out a file,
+ if the file already exists, a backup copy is made (like
+ emacs).
+
+(no)bkup_copy In nobackup mode bkup_copy is ignored. In bkup_copy mode,
+ backup files are made by copying the original file, instead of
+ renaming it.
+
+ticks (number) This value controls how often should rnd(), cell(), my(),
+ curcell(), etc cells get updated. This value is in seconds
+ (???). The initial value is 10 seconds.
+
+print (number) This is the width of the page for the print command. The
+ initial value is the width of the screen.
+
+file (format-name) If -DUSE_DLD was defined, format-name may be any .o file
+ that contains definitions for the appropriate functions, or
+ 'panic', which is the only file format that oleo will have
+ compiled into it. If -DUSE_DLD was not defined, format-name
+ must be one of sylk, sc, panic, or list, and oleo will have
+ to be re-compiled before any other formats may be used.
+
+load (file-name) This option is only avaliable if oleo was compiled with
+ -DUSE_DLD. This option loads in a .o file of spreadsheet
+ functions, keyboard commands, and/or keymaps. Spreadsheet
+ functions and keyboard commands must be loaded in before they
+ can be used in expressiond or bound to keys.
+
+status (number) This option controls which line on the screen is used for
+ displaying the status of the current cell. The number may be
+ positive, (counting down from the top), negative (counting up
+ from the bottom, or zero (disabling the status line).
+
+input (number) This option controls which line on the screen is used for
+ reading lines of text. The number may be positive (counting
+ down from the top), or negative (counting up from the
+ bottom), but not zero.
+
+The following options affect the currently active window:
+
+(no)page Basically, in page mode, whenever a paticular cell is
+ displayed in the window, it will always be in the same
+ location on the screen. In page mode, the recenter command
+ acts just like the redraw-screen command.
+
+(no)pageh These options turns on or off page mode only in
+(no)pagev the horizontal or vertical axis.
+
+link (wnum) This option 'links' the current window with the one
+ specified. A window may only be linked to one other window
+ at a time. When a window is linked to another one, whenever
+ the cell cursor in the first window is moved, the cursor in
+ the other window moves as well. (unless the cursor in other
+ window is locked from moving in that diretion.)
+
+ (Should linking to a window force that window to link
+ back? That might make life easier for naive users.)
+
+nolink This removes the link (if any) on the current window.
+unlink
+
+(no)lockh These options prevent the cell cursor in the current window
+(no)lockv from moving in the horizontal or vertical direction, but only
+ when the cell cursor is moved in a window that this one is
+ linked.
+
+
+(no)edges In edges mode oleo displays Row and Column numbers at the top
+ and left edges of the window. Perhaps edges should be split
+ into edgeh and edgev?
+
+(no)standout In standout mode, the edges (see (no)edges) are drawn in
+ standout mode (reverse video, usually).
+
+
+Options supported by the list file format:
+
+list ch Use the character CH to separate the cell values.
+
+
+ File names:
+
+If a file name begins with a '|', the rest of the name is taken as a command,
+which oleo opens a pipe to. So you can use the name '|zcat file.Z' to read
+a compressed spreadsheed, or '|compress > file.Z' to write one.
+
+
+ Using Oleo with X11
+
+If your system has libX11, Oleo will be built with X support. If you run
+Oleo with the DISPLAY environment variable set, Oleo will open an X window
+instead of using curses.
+
+Under X, cells are normally displayed in the default font. You can
+change that font using the set-default-font command. The value you
+specify may include wild cards, especially for the point size of the
+font. You can change the font used for specific areas of a
+spreadsheet using the commands `set-cell-font' and `set-region-font'.
+
+ Font Specifications
+
+The easiest way to specify a font is to use one of the built in
+short-hand names. These names are `fixed', `times', and `courier'.
+Optionally, these names can be followed by a scale. The scale is the
+ratio of the default point size to the desired point size. For
+example, if the default font is a 10 point font, then `times 1.2'
+refers to a 12 point Times-Roman type font.
+
+Every font has a long name that can also be used in specifications.
+The long name has three parts: an X name, a PostScript(*) name, and a
+scale. The X name and PostScript may be omitted. The shorthand name
+`times 1.2' is the same as the long name:
+
+ *times-medium-r-*, Times-Roman, 1.2
+
+Notice that the size is left wildcarded in the X name. This is not
+absolutely necessary, but if it is done Oleo can resize the font
+should the size of the default font change (the command
+set-default-point-size does this).
+
+New short hand names can be defined using the `define-font-name'
+command. Later, if a user uses a shorthand name in a font
+specification, the name is replace by the text of the definition. For
+example, here is a standard definition from init.c:
+
+ define-font-name time *times-medium-r-*, Times-Roman
+
+Notice that the scale has been omitted. That is so that
+specifications like `times 1.2' will be properly expanded.
+
+ X resources and command line options.
+
+Oleo doesn't yet recognize and .Xdefault resources or X specific
+command line options. It will in a future release.
+
+
+(*) PostScript is a trademark of Adobe Systems Incorporated.
+
+
+ PostScript Printing
+
+
+Oleo can generate an embedded postScript redition of any part of a
+spreadsheet. Using the commands outlined in `Using Oleo with X11',
+you can control the fonts used in the printed output.
+
+The command `psprint-region' takes a range and file name as arguments.
+It writes embedded postScript to the file.
+
+Oleo will make the output as large as possible to fit the page. You
+can change the page size using the command `set-page-size'. For
+example, the default setting is `set-page-size 8.5 x 11'. To specify
+a page size in centimeters, use: `set-page-size 20 x 30 c'.
+
+The command `set-default-ps-font' controls the default font for cells.
+For example, the initial value is `set-default-ps-font Times-Roman'.
+
+
+ Formulae:
+
+Numbers must be entered in 'general' format:
+ [-]digits[.digits][e[-]digits]
+
+Strings are entered surrounded by double-quotes. To include unusual
+characters, you can either use \char (works well for ") or use
+\nnn where nnn is the octal code for the character you want to include.
+
+ Magic constants:
+
+Note that oleo automatically converts the names of constants to upper case,
+but they can be entered in any case.
+
+#TRUE The logical TRUE value
+#FALSE The logical FALSE value
+
+#ERROR Various error types.
+#BAD_INPUT
+#NON_NUMBER
+#NON_STRING
+#NON_BOOL
+#NON_RANGE
+#OUT_OF_RANGE
+#NO_VALUES
+#DIV_BY_ZERO
+#BAD_NAME
+#NOT_AVAIL
+#PARSE_ERROR
+#NEED_OPEN
+#NEED_CLOSE
+#NEED_QUOTE
+#UNK_CHAR
+#UNK_FUNC
+
+#INF Various trancendental values. On some machines,
+#INFINITY (like the vax), these may all be the same value.
+#NAN
+#NOT_A_NUMBER
+#NINF
+#MINUS_INFINITY
+
+
+ Infix functions:
+
+- num 0-num
+! bool #TRUE if bool is #FALSE
+ #FALSE if bool is #TRUE, error otherwise.
+
+num1 ^ num2 Exponentiation This is *right* associative!
+num1 * num2 Multiplication Note that these functions are not as
+num1 / num2 Division good as they should be at detecting
+int1 % int2 Modulus overflow. There *is* code that should
+
+num1 + num2 Addition force integer expressions to become
+num1 - num2 subtraction floating-point if the result wouldn't
+ fit in an integer.
+num1 >= num2 Arithmatic greater-or-equal
+num1 > num2 greater-than
+num1 < num2 less-than
+num1 <= num2 less-than-or-equal
+
+val1 = val2 #TRUE if val1 and val2 can be considered equal.
+ #FALSE otherwise
+val1 != val2 Equivelent to !(val1=val2)
+
+str1 & str2 Text concatination.
+
+bool ? val1 : val2 if(bool==#TRUE)
+ evaluate val1
+ else if(bool!=#FALSE)
+ error...
+ else
+ evaluate val2.
+
+( val ) (To override default precedence) Note that since oleo
+ stores expressions in a byte-compiled form, excess
+ parens will mysteriously vanish.
+
+
+ Prefix functions:
+
+In 'a0' mode, all prefix functions have '@' prepended to their names.
+
+if(bool,val1,val2) if(test==#TRUE)
+ evaluate val1
+ else if(test!=#FALSE)
+ error...
+ else
+ evaluate val2.
+and(bool1,bool2) if(val1==#FALSE)
+ #FALSE
+ else if(val1!=#TRUE)
+ error...
+ else val2;
+or(bool1,bool2) if(val1==#TRUE)
+ #TRUE
+ else if(val1!=#FALSE)
+ error...
+ else val2;
+pi() 3.14159265358979326848
+row() The row number of the cell the expression is in.
+col() The column number of the cell the expression is in.
+now() The current time in seconds since Jan 1 1970 (?)
+abs(num) The absolute value of num.
+acos(num) The arc-cosine of num (num in radians)
+asin(num) The arc-sine of num (num in radians)
+atan(num) The arc-tangent of num (in radians)
+int(num) Convert to integer (toward zero)
+ceil(num) Convert to integer (round up)
+floor(num) Convert to integer (round down)
+cos(num) The cosine of num (in radians)
+dtr(num) num degrees in radians
+exp(num) The exponential function of num
+log(num) The natural log of num
+log10(num) The log of num to base 10
+rtd(num) num radians in degrees
+sin(num) The sine (in radians) of num
+sqrt(num) The square-root of num
+tan(num) The tangent (in radians) of num
+rnd(num) A random number from 0 to num-1
+negate(num) 0-num
+not(bool) #TRUE if bool is #FALSE
+ #FALSE if bool is #TRUE, error otherwise.
+iserr(val) #TRUE if the expression is an error
+ else #FALSE
+isnum(val) #TRUE if the expression is a number, or can be
+ automatically converted into a number, thus
+ isnum("12") is #TRUE, while isnum("12 ") is
+ #FALSE. (This might be worth fixing.)
+rows(rng) number of rows in rng.
+cols(rng) number of columns in rng.
+ctime(num) Convert num into a readable date/time string.
+atan2(num1,num2) Two number arctangent
+hypot(num1,num2) use man 2 hypot
+fixed(num1,num2) num1 rounded to num2 decimal places
+
+index(rng,int) the contents of the int-th cell in rng.
+index(rng,num1,num2) The contents of the int1-th down and int2-th
+ over cell in rng
+oneof(int,val1,val2,val3...) switch(int) {
+ case 1: val1;
+ case 2: val2;
+ ...
+ default: error;
+ }
+
+For the following functions, arguments that are ranges are scanned
+for numeric values only. Strings, error values, empty cells, etc, are ignored.
+All these functions except cnt() will give a #NO_VALUES error if it does not
+find any numbers. You can give most of the functions an explicit value if
+you don't want to get a #NO_VALUES error. For example, if you want to add
+up the range r1:20c5, and return 0 if there are no numbers there,
+'sum(0,r1:20c5)' will work.
+
+Strings, etc, that are explicitly given to the functions are subjected to the
+usual conversion.
+
+sum(vr1...) ...
+prod(vr1...) ...
+avg(vr1...) ...
+std(vr1...) The SAMPLE standard deviation. To get the population
+ standard deviation, use sqrt(var(...))
+max(vr1...) ...
+min(vr1...) ...
+cnt(vr1...) The number of numeric values found.
+var(vr1...) The POPULATION variance. To get the sample variance,
+ use std(...)^2
+
+These functions are in the 'string' package. If oleo is compiled with
+-DUSE_DLD, the string package must be loaded before these functions can be
+used. If a spreadsheet that uses these functions is loaded before the
+string package is loaded, things will fail (silently!) (This is probably a
+bug.
+
+len(str) length of string in characters.
+strupr(str) string converted to upper case
+strlwr(str) string converted to lower case
+strcap(str) string with each word capitalized.
+trim(str) string with extra spaces and non-ascii chars
+ removed.
+find(str1,str2,int) return the location where str2 appears in
+ str1, start looking at character #int
+substr(int1,int2,str) The characters in string from position int1
+ to position int2. Positions can be either
+ positive (First character is #1, last char is
+ #(length of string)) or negative(last
+ character is #-1, first character is #-(length
+ of string)).
+mid(str,int1,int2) The characters in string from int1 (counting
+ from the beginning) continuing for int2 chars.
+edit(str,int1,int2,...) Remove the text from int1 to int2 in string
+ and replace it with ... (zero or more strings)
+ int1 and int2 are like for substr() above.
+repeat(int,str) str repeated int times, thus repeat(2,"foo")
+ returns "foofoo"
+concat(vr1,...) Concatinate strings, ranges, etc.
+
+
+These functions are in the 'cells' package. If oleo is compiled with
+-DUSE_DLD, the cells package must be loaded before these functions can be
+used.
+my(str) String: Returns:
+ row row()
+ column col()
+ width The width of the column containing
+ this cell.
+ lock "locked" or "unlocked"
+ protection ditto
+ justify "left" "right" "center" or "default"
+ alignment ditto
+ format "default" "user-1" etc.
+ fmt ditto.
+ type "error", "boolean", "float",
+ "integer", "null", "Unknown",
+ etc.
+ formula A string of the cell's current
+ formula.
+ value The cells current value.
+ anything-else error--> #BAD_INPUT
+
+curcell(str) Like my(), but for the cell under the
+ cell-cursor in the current window.
+
+cell(int1,int2,str) Like my(), but for the cell at Rint1Cint2.
+
+member(rng,val) The number of the first cell in RNG that contains
+ VAL, or zero if no cells contain it.
+
+
+These next four functions could probably be replaced by a pair of smart
+regex routines. . .
+
+smember(rng,str) The number of the first cell in RNG that contains a
+ substring of STR, or zero if no cell contains one.
+
+members(rng,str) The number of the first cell in RNG whose value is
+ a substring of STR.
+
+pmember(rng,str) The number of the first cell in RNG whose value
+ equals the first few characters of STR.
+
+memberp(rng,str) The number of the first cell in RNG whose value
+ starts with STR.
+
+hlookup(rng,num,int) Scan through the top row of RANGE looking for a
+ number which is greater than NUM. Then return the
+ value in the cell that is INT rows down from the top
+ of the range.
+
+vlookup(rng,num,int) Like hlookup, but scans the left column
+ and returns the value in the cell that is INT
+ columns over from the left edge of the range.
+
+vlookup_str(rng,num,str)Like vlookup, but scans the left column
+ for a string. The column need not be sorted.
+
+These functions are in the 'busi' package. If oleo is compiled with
+-DUSE_DLD, the busi package must be loaded before these functions can be
+used.
+
+pmt(p,r,t) Payment per period for a loan of $P at rate R for T
+ payments.
+
+pv(pmt,int,term) Present value of an investment that pays $PMT at the
+ end of each of TERM periods with a discount rate (interest) of INT.
+
+npv(rng,rate) Net Present Value of an investment which will pay
+ uneaven payments. The term is calculated from the number of cells in
+ RNG. .
+
+irr(rng,guess) Internal Rate of Return. This function is paticularly
+ untested, and should not be trusted.
+
+fv(pmt,int,term) Future Value of an annuity.
+
+rate(fut,pres,term) Interest rate required to turn $PRES into $FUT in
+ TERM periods.
+
+term(pmt,int,fut) Number of periods required to collect $FUT in
+ payments of $PMT, where depositd payments earn at a rate of INT.
+
+cterm(int,fut,pres) Number of periods required to collect $FUT from a
+ single initial deposit of $PRES, at an interest rate of INT.
+
+sln(cost,scrap,life) Straight line depreciation of an asset that cost
+ $COST when new, can be sold for $SCRAP, and will last for LIFE
+ periods.
+
+syd(cost,scrap,life,per) Sum-of-the-digits depreciation of an asset
+ that cost $COST, can be sold for $SCRAP and lasts LIFE, in period PER.
+
+ddb(cost,scrap,life,per) Double-declining-balance deprecion, otherwise
+ similar to syd().
+
+anrate(pmt,pres,term)
+anterm(pmt,prin,rate)
+balance(prin,rate,term,period)
+paidint(prin,rate,term,period)
+kint(prin,rate,term,period)
+kprin(prin,rate,term,period)
+compbal(print,rate,term)
diff --git a/math/oleo/pkg-plist b/math/oleo/pkg-plist
new file mode 100644
index 000000000000..8af65f1504e4
--- /dev/null
+++ b/math/oleo/pkg-plist
@@ -0,0 +1,2 @@
+@cwd /usr/local
+bin/oleo