home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
EFFO
/
pd7.lzh
/
DOC
/
sc.doc
< prev
Wrap
Text File
|
1990-04-01
|
48KB
|
1,387 lines
SC(1)
NAME
sc - spreadsheet calculator
SYNOPSIS
sc [ -c ] [ -m ] [ -n ] [ -r ] [ -x ] [ file ]
DESCRIPTION
The spreadsheet calculator sc is based on rectangular
tables much like a financial spreadsheet. When invoked it
presents you with a table organized as rows and columns of
cells. If invoked without a file argument, the table is
initially empty. Otherwise file is read in (see the Get
command below). Each cell may have associated with it a
numeric value, a label string, and/or an expression (for-
mula) which evaluates to a numeric value or label string,
often based on other cell values.
Options are:
-c Start the program with the recalculation being done in
column order.
-m Start the program with automatic recalculation dis-
abled. The spreadsheet will be recalculated only when
the ``@'' command is used.
-n Start the program in quick numeric entry mode (see
below).
-r Start the program with the recalculation being done in
row order (default option).
-x Cause the Get and Put commands (see below) to encrypt
and decrypt data files.
All of these options can be changed with the ^T and S com-
mands (see below) while sc is running. Options specified
when sc is invoked override options saved in the data
file.
General Information
The screen is divided into four regions. The top line is
for entering commands and displaying cell values. The
second line is for messages from sc. The third line and
the first four columns show the column and row numbers, from
which are derived cell addresses, e.g. A0 for the cell in
column A, row 0. Note that column names are case-
insensitive: you can enter A0 or a0.
The rest of the screen forms a window looking at a portion
of the table. The total number of display rows and columns
available, hence the number of table rows and columns
1
SC(1)
displayed, is set by curses(3) and may be overridden by set-
ting the LINES and COLUMNS environment variables, respec-
tively.
The screen has two cursors: a cell cursor, indicated by a
highlighted cell and a ``<'' on the screen, and a character
cursor, indicated by the terminal's hardware cursor. The
cell and character cursors are often the same. They differ
when you type a command on the top line.
If a cell's numeric value is wider than the column width
(see the f command), the cell is filled with asterisks. If
a cell's label string is wider than the column width, it is
truncated at the start of the next non-blank cell in the
row, if any.
Cursor control commands and row and column commands can be
prefixed by a numeric argument which indicates how many
times the command is to be executed. You can type ^U before
a repeat count if quick numeric entry mode is enabled or if
the number is to be entered while the character cursor is on
the top line.
Commands which use the terminal's control key, such as ^N,
work both when a command is being typed and when in normal
mode.
Changing Options
^To Toggle options. This command allows you to switch the
state of one option selected by o. A small menu lists
the choices for o when you type ^T. The options
selected are saved when the data and formulas are saved
so that you will have the same setup next time you
enter the spreadsheet.
a Automatic Recalculation. When set, each change in
the spreadsheet causes the entire spreadsheet be
recalculated. Normally this is not noticeable, but
for very large spreadsheets, it may be faster to
clear automatic recalculation mode and update the
spreadsheet via explicit ``@'' commands. Default is
automatic recalculation on.
c Current cell highlighting. If enabled, the current
cell is highlighted (using the terminal's standout
mode, if available) in addition to being marked by
the cell cursor.
e External function execution. When disabled, external
functions (see @ext() below) are not called. This
saves a lot of time at each screen update. External
2
SC(1)
functions are disabled by default. If disabled, and
external functions are used anywhere, a warning is
printed each time the screen is updated, and the
result of @ext() is the value from the previous call,
if any, or a null string.
n Quick numeric entry. If enabled, a typed digit is
assumed to be the start of a numeric value for the
current cell, not a repeat count, unless preceded by
^U.
t Top line display. If enabled, the name and value of
the current cell is displayed on the top line. If
there is an associated label string, the first char-
acter of the string value is ``<'' for a leftstring
or ``>'' for a rightstring (see below), followed by
"string" for a constant string or {expr} for a string
expression. If the cell has a numeric value, it fol-
lows as [value], which may be a constant or expres-
sion.
x Encryption. See the -x option.
$ Dollar prescale. If enabled, all numeric constants
(not expressions) which you enter are multipled by
0.01 so you don't have to keep typing the decimal
point if you enter lots of dollar figures.
S Set options. This command allows you to set various
options. A small menu lists the options that cannot be
changed through ^T above.
byrows/bycols
Specify the order cell evaluation when updating.
These options also affect the order in which cells
are filled (see /f) and whether a row or column is
cleared by an x command.
iterations=n
Set the maximum number of recalculations before the
screen is displayed again. Iterations is set to 10 by
default.
tblstyle=s
Control the output of the T command. s can be: 0
(default) to give colon delimited fields, with no tbl
control lines; tbl to give colon delimited fields,
with tbl(1) control lines; latex to give a LaTeX
tabular environment; and tex to give a TeX simple
tabbed alignment with ampersands as delimiters.
3
SC(1)
Other Set options are normally used only in sc data
files since they are available through ^T. You can
also use them interactively
autocalc/!autocalc
Set/clear auto recalculation mode.
numeric/!numeric
Set/clear numeric mode.
prescale/!prescale
Set/clear numeric prescale mode.
extfun/!extfun
Enable/disable external functions.
cellcur/!cellcur
Set/clear current cell highlighting mode.
toprow/!toprow
Set/clear top row display mode.
Cursor Control Commands
^P Move the cell cursor up to the previous row.
^N Move the cell cursor down to the next row.
^B Move the cell cursor backward one column.
^F Move the cell cursor forward one column.
h, j, k, l
If the character cursor is not on the top line, these
are alternate, vi-compatible cell cursor controls
(left, down, up, right).
^H If the character cursor is not on the top line, ^H is
the same as ^B.
SPACE
If the character cursor is not on the top line, the
space bar is the same as ^F.
TAB If the character cursor is on the top line, TAB starts
a range (see below). Otherwise, it is the same as ^F.
Arrow Keys
The terminal's arrow keys provide another alternate set
of cell cursor controls if they exist and are supported
in the appropriate termcap entry. Some terminals have
arrow keys which conflict with other control key codes.
4
SC(1)
For example, a terminal might send ^H when the back
arrow key is pressed. In these cases, the conflicting
arrow key performs the same function as the key combi-
nation it mimics.
^ Move the cell cursor up to row 0 of the current column.
# Move the cell cursor down to the last valid row of the
current column.
0 Move the cell cursor backward to column A of the
current row. This command must be prefixed with ^U if
quick numeric entry mode is enabled.
$ Move the cell cursor forward to the last valid column
of the current row.
b Scan the cursor backward (left and up) to the previous
valid cell.
w Scan the cursor forward (right and down) to the next
valid cell.
^Ed Go to end of range. Follow ^E by a direction indicator
such as ^P or j. If the cell cursor starts on a non-
blank cell, it goes in the indicated direction until
the last non-blank adjacent cell. If the cell cursor
starts on a blank cell, it goes in the indicated direc-
tion until the first non-blank cell. This command is
useful when specifying ranges of adjacent cells (see
below), especially when the range is bigger than the
visible window.
g Go to a cell. sc prompts for a cell's name, a regu-
lar expression surrounded by quotes, or a number. If a
cell's name such as ae122 or a the name of a defined
range is given, the cell cursor goes directly to that
cell. If a quoted regular expression such as " Tax
Table " or " ^Jan [0-9]*$ " is given, sc searches
for a cell containing a string matching the regular
expression. See regex(3) or ed(1) for more details on
the form of regular expressions. If a number is given,
sc will search for a cell containing that number.
Searches for either strings or numbers proceed forward
from the current cell, wrapping back to a0 at the end
of the table, and terminate at the current cell if the
string or number is not found. The last g command is
saved, and can be re-issued by entering g<return>.
Cell Entry and Editing Commands
Cells can contain both a numeric value and a string value.
Either value can be the result of an expression, but not
5
SC(1)
both at once, i.e. each cell can have only one expression
associated with it. Entering a valid numeric expression
alters the cell's previous numeric value, if any, and
replaces the cell's previous string expression, if any,
leaving only the previously computed constant label string.
Likewise, entering a valid string expression alters the
cell's the previous label string, if any, and replaces the
cell's previous numeric expression, if any, leaving only the
previously computed constant numeric value.
= Enter a numeric constant or expression into the current
cell. sc prompts for the expression on the top
line. The usual way to enter a number into a cell is
to type ``='', then enter the number in response to the
prompt on the top line. The quick numeric entry
option, enabled through the -n option or ^T command,
shows the prompt when you enter the first digit of a
number (you can skip typing ``='').
< Enter a label string into the current cell to be
flushed left against the left edge of the cell.
"
> Enter a label string into the current cell to be
flushed right against the right edge of the cell.
Strings you enter must start with ". You can leave off the
trailing " and sc will add it for you. You can also
enter a string expression by backspacing over the opening "
in the prompt.
e Edit the value associated with the current cell. This
is identical to ``='' except that the command line
starts out containing the old numeric value or expres-
sion associated with the cell.
E Edit the string associated with the current cell. This
is identical to ``<'', ``"'', or ``>'' except that the
command line starts out containing the old string value
or expression associated with the cell.
To enter and edit a cell's number part, use the ``='' and e
commands. To enter and edit a cell's string part, use the
``<'', ``"'', ``>'', and E commands. See the sections below
on numeric and string expressions for more information.
x Clear the current cell. Deletes the numeric value,
label string, and/or numeric or string expression. You
can prefix this command with a count of the number of
cells on the current row to clear. The current column
is used if column recalculation order is set. Cells
cleared with this command may be recalled with any of
6
SC(1)
the pull commands (see below).
m Mark a cell to be used as the source for the copy com-
mand.
c Copy the last marked cell to the current cell, updating
row and column references in its numeric or string
expression, if any.
+ If not in numeric mode, add the current numeric argu-
ment (default 1) to the value of the current cell. In
numeric mode, ``+'' introduces a new numeric expression
or value, the same as ``=''.
- If not in numeric mode, subtract the current numeric
argument (default 1) from the value of the current
cell. In numeric mode, ``-'' introduces a new, nega-
tive, numeric expression or value, like ``=''.
File Commands
G Get a new database from a file. If encryption is
enabled, the file is decrypted before it is loaded into
the spreadsheet.
P Put the current database into a file. If encryption is
enabled, the file is encrypted before it is saved.
W Write a listing of the current database into a file in
a form that matches its appearance on the screen. This
differs from the Put command in that its files are
intended to be reloaded with Get, while Write produces
a file for people to look at. Hidden rows or columns
are not shown when the data is printed.
T Write a listing of the current database to a file, but
include delimiters suitable for processing by the tbl,
LaTeX, or TeX table processors. The delimiters are
controlled by the tblstyle option. See Set above. The
delimters are are a colon (:) for style 0ortbl and an
ampersand (&) for style latexortex.
With the Put, Write, and Table commands, the optional range
argument writes a subset of the spreadsheet to the output
file.
With the Write and Table commands, if you try to write to
the last file used with the Get or Put commands, or the file
specified on the command line when sc was invoked, you
are asked to confirm that the (potentially) dangerous opera-
tion is really what you want.
7
SC(1)
The three output commands, Put, Write, and Table, can pipe
their (unencrypted only) output to a program. To use this
feature, enter ``| program'' to the prompt asking for a
filename. For example, to redirect the output of the Write
command to the printer, you might enter ``| lpr -p''.
M Merge the database from the named file into the current
database. Values and expressions defined in the named
file are read into the current spreadsheet overwriting
the existing entries at matching cell locations.
R Run macros. Since sc files are saved as ASCII
files, it is possible to use them as primitive macro
definition files. The Run command makes this easier.
It's like the Merge command, but prints a saved path
name as the start of the filename to merge in. The
string to use is set with the Define command. To write
macros, you must be familiar with the file format writ-
ten by the Put command. This facility is still primi-
tive and could be much improved.
D Define a path for the Run command to use.
All file operations take a filename as the first argument to
the prompt on the top line. The prompt supplies a " to aid
in typing in the filename. The filename can also be
obtained from a cell's label string or string expression.
In this case, delete the leading " with the backspace key
and enter a cell name such as a22 instead. If the resulting
string starts with ``|'', the rest of the string is inter-
preted as a UNIX command, as above.
Row and Column Commands
These commands can be used on either rows or columns. The
second letter of the command is either a row designator (one
of the characters r, ^B, ^F, h, l) or a column designator
(one of c, ^P, ^N, k, j). A small menu lists the choices
for the second letter when you type the first letter of one
of these commands. Commands which move or copy cells also
modify the row and column references in affected cell
expressions. The references may be frozen by using the
fixed operator or using the $ character in the reference to
the cell (see below).
ir, ic
Insert a new row (column) by moving the row (column)
containing the cell cursor, and all following rows
(columns), down (right) one row (column). The new row
(column) is empty.
ar, ac
Append a new row (column) immediately following the
8
SC(1)
current row (column). It is initialized as a copy of
the current one.
dr, dc
Delete the current row (column).
pr, pc, pm
Pull deleted rows (columns) back into the spreadsheet.
The last deleted set of cells is put back into the
spreadsheet at the current location. pr inserts enough
rows to hold the data. pc inserts enough columns to
hold the data. pm (merge) does not insert rows or
columns; it overwrites the cells beginning at the
current cell cursor location.
vr, vc
Remove expressions from the affected rows (columns),
leaving only the values which were in the cells before
the command was executed.
zr, zc
Hide (``zap'') the current row (column). This keeps a
row (column) from being displayed but keeps it in the
data base. The status of the rows and columns is saved
with the data base so hidden rows and columns will be
still be hidden when you reload the spreadsheet. Hid-
den rows or columns are not printed by the W command.
sr, sc
Show hidden rows (columns). Enter a range of rows
(columns) to be revealed. The default is the first
range of rows (columns) currently hidden. This command
ignores the repeat count, if any.
f Set the output format to be used for printing the
numeric values in each cell in the current column.
Enter two numbers: the total width in characters of the
column, and the number of digits to follow decimal
points. Values are rounded off to the least signifi-
cant digit displayed. The total column width affects
displays of strings as well as numbers. A preceding
count can be used to affect more than one column. This
command has only a column version (no second letter).
Range Commands
Range operations affect a rectangular region on the screen
defined by the upper left and lower right cells in the
region. All of the commands in this class start with a
slash; the second letter of the command indicates which com-
mand. A small menu lists the choices for the second letter
when you type ``/''. sc prompts for needed parameters
for each command. Phrases surrounded by square brackets in
9
SC(1)
the prompt are informational only and may be erased with the
backspace key.
Prompts requesting variable names may be satisfied with
either an explicit variable name, such as A10, or with a
variable name previously defined in a /d command (see
below). Range name prompts require either an explicit range
such as A10:B20, or a range name previously defined with a
/d command. A default range shown in the second line is
used if you omit the range from the command or press the TAB
key (see below). The default range can be changed by moving
the cell cursor via the control commands (^P, ^N, ^B, ^F) or
the arrow keys. The cells in the default range are
highlighted (using the terminal's standout mode, if avail-
able).
/x Clear a range. Cells cleared with this command may be
recalled with any of the pull commands.
/v Values only. This command removes the expressions from
a range of cells, leaving just the values of the
expressions.
/c Copy a source range to a destination range. The source
and destination may be different sizes. The result is
always one or more full copies of the source. Copying
a row to a row yields a row. Copying a column to a
column yields a column. Copying a range to anything
yields a range. Copying a row to a column or a column
to a row yields a range with as many copies of the
source as there are cells in the destination. This
command can be used to duplicate a cell through an
arbitrary range by making the source a single cell
range such as b20:b20.
/f Fill a range with constant values starting with a given
value and increasing by a given increment. Each row is
filled before moving on to the next row if row order
recalculation is set. Column order fills each column
in the range before moving on to the next column. The
start and increment numbers may be positive or nega-
tive. To fill all cells with the same value, give an
increment of zero.
/d Use this command to assign a symbolic name to a single
cell or a rectangular range of cells on the screen.
The parameters are the name, surrounded by "", and
either a single cell name such as A10 or a range such
as a1:b20. Names defined in this fashion are used by
the program in future prompts, may be entered in
response to prompts requesting a cell or range name,
and are saved when the spreadsheet is saved with the
10
SC(1)
Put command. Names defined must be more than two alpha
characters long to differentiate them from a column
names, and must not have embedded special characters.
Names may include the character ``_'' or numerals as
long as they occur after the first three alpha charac-
ters.
/s This command lists (shows) the currently defined range
names. If there are no defined range names, then a
message is given, otherwise it pipes output to sort,
then to less. If the environment variable PAGER is
set, its value is used in place of less.
/u Use this command to undefine a previously defined range
name.
Miscellaneous Commands
Q
q
^C Exit from sc. If you made any changes since the
last Get or Put, sc asks about saving your data
before exiting.
^G
ESC Abort entry of the current command.
? Enter an interactive help facility. Lets you look up
brief summaries of the main features of the program.
The help facility is structured like this manual page
so it is easy to find more information on a particular
topic.
! Shell escape. sc prompts for a shell command to
run. End the command line with the RETURN key. If the
environment variable SHELL is defined, that shell is
run. If not, /bin/sh is used. Giving a null command
line starts the shell in interactive mode. A second
``!'' repeats the previous command.
^L Redraw the screen.
^R Redraw the screen with special highlighting of cells to
be filled in. This is useful for finding values you
need to provide or update in a form with which you
aren't familiar or of which you have forgotten the
details.
It's also useful for checking a form you are creating.
All cells which contain constant numeric values (not
the result of a numeric expression) are highlighted
temporarily, until the next screen change, however
11
SC(1)
minor. To avoid ambiguity, the current range (if any)
and current cell are not highlighted.
^X This command is similar to ^R, but highlights cells
which have expressions. It also displays the expres-
sions in the highlighted cells as left-flushed strings,
instead of the numeric values and/or label strings of
those cells. This command makes it easier to check
expressions, at least when they fit in their cells or
the following cell(s) are blank so the expressions can
slop over (like label strings). In the latter case,
the slop over is not cleared on the next screen update,
so you may want to type ^L after the ^X in order to
clean up the screen.
@ Recalculates the spreadsheet.
^V Type, in the command line, the name of the current cell
(the one at the cell cursor). This is useful when
entering expressions which refer to other cells in the
table.
^W Type, in the command line, the expression attached to
the current cell. If there is none, the result is
``?''.
^A Type, in the command line, the numeric value of the
current cell, if any.
The ^V, ^W, and ^A commands only work when the character
cursor is on the command line and beyond the first charac-
ter.
TAB When the character cursor is on the top line, defines a
range of cells via the cursor control commands or the
arrow keys. The range is highlighted, starts at the
cell where you typed TAB, and continues through the
current cell cursor. Pressing TAB again causes the
highlighted range to be entered into the command line
and the highlighting to be turned off. This is most
useful for defining ranges to functions such as @sum().
Pressing ``)'' acts just like typing the TAB key the
second time and adds the closing ``)''. Note that when
you give a range command, you don't need to press the
first TAB to begin defining a range starting with the
current cell.
Variable Names
Normally, a variable name is just the name of a cell, such
as K20. The value is the numeric or string value of the
cell, according to context.
12
SC(1)
When a cell's expression (formula) is copied to another
location via copy or range-copy, variable references are by
default offset by the amount the formula moved. This allows
the new formula to work on new data. If cell references are
not to change, you can either use the fixed operator (see
below), or one of the following variations on the cell name.
K20 References cell K20; the reference changes when the
formula is copied.
$K$20
Always refers to cell K20; the reference stays fixed
when the formula is copied.
$K20 Keeps the column fixed at column K; the row is free to
vary.
K$20 Similarly, this fixes the row and allows the column to
vary.
These conventions also hold on defined ranges. Range refer-
ences vary when formulas containing them are copied. If the
range is defined with fixed variable references, the refer-
ences do not change.
fixed
To make a variable not change automatically when a cell
moves, put the word fixed in front of the reference,
for example: B1 * fixed C3.
Numeric Expressions
Numeric expressions used with the ``='' and e commands have
a fairly conventional syntax. Terms may be constants, vari-
able names, parenthesized expressions, and negated terms.
Ranges may be operated upon with range functions such as sum
(@sum()) and average (@avg()). Terms may be combined using
binary operators.
-e Negation.
e+e Addition.
e-e Subtraction.
e*e Multiplication.
e/e Division.
e1%e2
e1 mod e2.
e^e Exponentiation.
13
SC(1)
e<e
e<=e
e=e
e!=e
e>=e
e>e Relationals: true (1) if and only if the indicated
relation holds, else false (0). Note that ``<='',
``!='', and ``>='' are converted to their ``~()''
equivalents.
~e Boolean operator NOT.
e&e Boolean operator AND.
e|e Boolean operator OR.
e?e:e
Conditional: If the first expression is true then the
value of the second is returned, otherwise the value of
the third.
Operator precedence from highest to lowest is:
-, ~
^
*, /
+, -
<, <=, =, !=, >=, >
&
|
?:
Built-in Range Functions
These functions return numeric values.
@sum(r) Sum all valid (nonblank) entries in the
region whose two corners are defined by
the two variable names (e.g. c5:e14) or
the range name specified.
@prod(r) Multiply together all valid (nonblank)
entries in the specified region.
@avg(r) Average all valid (nonblank) entries in
the specified region.
@max(r) Return the maximum value in the specified
region. See also the multi argument ver-
sion of @max below.
@min(r) Return the minimum value in the specified
region. See also the multi argument
14
SC(1)
version of @min below.
@stddev(r) Return the sample standard deviation of
the cells in the specified region.
@lookup(e,r)
@lookup(se,r) Evaluates the expression then searches
through the range r for a matching value.
The range should be either a single row or
a single column. The expression can be
either a string expression or a numeric
expression. If it is a numeric expres-
sion, the range is searched for the the
last value less than or equal to e. If
the expression is a string expression, the
string portions of the cells in the range
are searched for an exact string match.
The value returned is the numeric value
from the next row and the same column as
the match, if the range was a single row,
or the value from the next column and the
same row as the match if the range was a
single column.
@index(e,r) Use the value of the expression e to index
into the range r. The numeric value at
that position is returned. The value 1
selects the first item in the range, 2
selects the second item, etc. R should be
either a single row or a single column.
@stindex(e,r) Use the value of e to index into the range
r. The string value at that position is
returned. The value 1 selects the first
item in the range, 2 selects the second
item, etc. The range should be either a
single row or a single column.
Built-in Numeric Functions
All of these functions operate on floating point numbers
(doubles) and return numeric values. Most of them are stan-
dard system functions more fully described in math(3). The
trig functions operate with angles in radians.
@sqrt(e) Return the square root of e.
@exp(e) Return the exponential function of e.
@ln(e) Return the natural logarithm of e.
@log(e) Return the base 10 logarithm of e.
15
SC(1)
@floor(e) Return the largest integer not greater
than e.
@ceil(e) Return the smallest integer not less than
e.
@rnd(e) Round e to the nearest integer.
@fabs(e) Return the absolute value of e.
@pow(e1,e2) Return e1 raised to the power of e2.
@hypot(e1,e2) Return sqrt(e1*e1+e2*e2), taking precau-
tions against unwarranted overflows.
pi A constant quite close to pi.
@dtr(e) Convert e in degrees to radians.
@rtd(e) Convert e in radians to degrees.
@sin(e)
@cos(e)
@tan(e) Return trigonometric functions of radian
arguments. The magnitude of the arguments
are not checked to assure meaningful
results.
@asin(e) Return the arc sine of e in the range
-pi/2 to pi/2.
@acos(e) Return the arc cosine of e in the range 0
to pi.
@atan(e) Return the arc tangent of e in the range
-pi/2 to pi/2.
@atan2(e1,e2) Returns the arc tangent of e1/e2 in the
range -pi to pi.
@max(e1,e2,...) Return the maximum of the values of the
expressions. Two or more expressions may
be specified. See also the range version
of @max above.
@min(e1,e2,...) Return the minimum of the values of the
expressions. Two or more expressions may
be specified. See also the range version
of @min above.
@ston(se) Convert string expression se to a numeric
value.
16
SC(1)
@eqs(se1,se2) Return 1 if string expression se1 has the
same value as string expression se2, 0
otherwise.
@nval(se,e) Return the numeric value of a cell
selected by name. String expression se
must evaluate to a column name (``A''-
``AE'') and e must evaluate to a row
number (0-199). If se or e is out of
bounds, or the cell has no numeric value,
the result is 0. You can use this for
simple table lookups. Be sure the table
doesn't move unexpectedly! See also
@sval() below.
String Expressions
String expressions are made up of constant strings (charac-
ters surrounded by double quotation marks), variables (cell
names, which refer to the cells's label strings or expres-
sions), and string functions. Note that string expressions
are only allowed when entering a cell's label string, not
its numeric part. Also note that string expression results
may be left or right flushed, according to the type of the
cell's string label.
# Concatenate strings. For example, the
string expression
A0 # "zy dog"
displays the string ``the lazy dog'' in
the cell if the value of A0's string is
``the la''.
Built-in String Functions
@substr(se,e1,e2) Extract and return from string expression
se the substring indexed by character
number e1 through character number e2
(defaults to the size of se if beyond the
end of it). If e1 is less than 1 or
greater than e2, the result is the null
string. For example,
@substr ("Nice jacket", 4, 7)
returns the string ``e jac''.
@fmt(se,e) Convert a number to a string. The argu-
ment se must be a valid printf(3) format
string. e is converted according to the
standard rules. For example, the
17
SC(1)
expression
@fmt ("**%6.3f**", 10.5)
yields the string ``**10.500**''. e is a
double, so applicable formats are e, E, f,
g, and G. Try ``%g'' as a starting point.
@sval(se,e) Return the string value of a cell selected
by name. String expression se must evalu-
ate to a column name (``A''-``AE'') and e
must evaluate to a row number (0-199). If
se or e is out of bounds, or the cell has
no string value, the result is the null
string. You can use this for simple table
lookups. Be sure the table doesn't move
unexpectedly!
@ext(se,e) Call an external function (program or
script). The purpose is to allow arbi-
trary functions on values, e.g. table
lookups and interpolations. String
expression se is a command or command line
to call with popen(3). The value of e is
converted to a string and appended to the
command line as an argument. The result
of @ext() is a string: the first line
printed to standard output by the command.
The command should emit exactly one output
line. Additional output, or output to
standard error, messes up the screen.
@ext() returns a null string and prints an
appropriate warning if external functions
are disabled, se is null, or the attempt
to run the command fails.
External functions can be slow to run, and
if enabled are called at each screen
update, so they are disabled by default.
You can enable them with ^T when you
really want them called.
A simple example:
@ext ("echo", a1)
You can use @ston() to convert the @ext()
result back to a number. For example:
@ston (@ext ("form.sc.ext", a9 + b9))
Note that you can built a command line
18
SC(1)
(including more argument values) from a
string expression with concatenation. You
can also "hide" the second argument by
ending the command line (first argument)
with `` #'' (shell comment).
Built-in Financial Functions
Financial functions compute the mortgage (or loan) payment,
future value, and the present value functions. Each accepts
three arguments, an amount, a rate of interest (per period),
and the number of periods. These functions are the same as
those commonly found in other spreadsheets and financial
calculators
@pmt(e1,e2,e3) @pmt(60000,.01,360) computes the monthly
payments for a $60000 mortgage at 12%
annual interest (.01 per month) for 30
years (360 months).
@fv(e1,e2,e3) @fv(100,.005,36) computes the future value
for of 36 monthly payments of $100 at 6%
interest (.005 per month). It answers the
question: "How much will I have in 2 years
if I deposit $100 per month in a savings
account paying 6% interest compounded
monthly?"
@pv(e1,e2,e3) @pv(1000,.015,36) computes the present
value of an a ordinary annuity of 36
monthly payments of $1000 at 18% annual
interest. It answers the question: "How
much can I borrow at 18% for 30 years if I
pay $1000 per month?"
Built-in Date and Time Functions
Time for sc follows the system standard: the number of
seconds since 1970. All date and time functions except
@date() return numbers, not strings.
@now Return the current time encoded as the
number of seconds since December 31, 1969,
midnight, GMT.
The following functions take the time in seconds (e.g. from
@now) as an argument and return the specified value. The
functions all convert from GMT to local time.
@date(e) Convert the time in seconds to a date
string 24 characters long in the following
form:
Sun Sep 16 01:03:52 1973
19
SC(1)
Note that you can extract parts of this
fixed-format string with @substr().
@year(e) Return the year. Valid years begin with
1970. The last legal year is system
dependent.
@month(e) Return the month, encoded as 1 (January)
to 12 (December).
@day(e) Return the day of the month, encoded as 1
to 31.
@hour(e) Return the number of hours since midnight,
encoded as 0 to 23.
@minute(e) Return the number of minutes since the
last full hour, encoded as 0 to 59.
@second(e) Return the number of seconds since the
last full minute, encoded as 0 to 59.
Spreadsheet Update
Re-evaluation of spreadsheet expressions is done by row or
by column depending on the selected calculation order.
Evaluation is repeated up to iterations times for each
update if necessary, so forward references usually work as
expected. See set above. If stability is not reached after
ten iterations, a warning is printed. This is usually due
to a long series of forward references, or to unstable
cyclic references (for example, set A0's expression to
``A0+1'').
SEE ALSO
psc(1)
BUGS
Top-to-bottom, left-to-right evaluation of expressions is
silly. A proper following of the dependency graph with
(perhaps) recourse to relaxation should be implemented.
Supports at most 200 rows and 40 columns.
Editing is crude. All you can do is backspace over and
retype text to be altered. There is no easy way to switch a
leftstring to a rightstring or vice versa. Of course, you
can always write the spreadsheet to a file with Put, edit it
by calling an editor on the file with ``!'', and read it
back with Get -- if you are comfortable editing spreadsheet
files.
20
SC(1)
Only one previous value is saved from any call of @ext().
If it is used more than once in a spreadsheet and external
functions are enabled and later disabled, the last returned
value pops up in several places.
On some systems, if the cell cursor is in column 0 with top-
line enabled (so the current cell is highlighted), or if any
cell in column 0 is highlighted, the corresponding row
number gets displayed and then blanked during a screen
refresh. This looks like a bug in curses.
Many commands give no indication (a message or beep) if they
have null effect. Some should give confirmation of their
action, but they don't.
21