Make LCALL like LJMP and avoid segmentation faults parsing segments (!).
[unix-history] / usr / src / contrib / sc / sc.1
CommitLineData
343218ea
KB
1.\" Warning: The string "pname" is converted to the true program name
2.\" by the makefile, throughout this document.
3.\"
4.\" Warning: The order of presentation of commands largely matches the
5.\" help screen built into the program.
6.\"
7.\" Conventions:
8.\" - pname italicized and never uppercased (it's a proper name).
9.\" - Refer to lists of commands in the same order as introduced.
10.\" - Command and function names bold when introduced, italicized in all
11.\" other places if possible, or in `` '' if not.
12.\" - Cell names italicized except when used in expressions; row numbers
13.\" and column names not italicized.
14.\" - Use `` '' rather than " " except referring to literal input or output.
15.\" - TPs use default indent except for function names, then 18.
16.\" - Smallify uppercase strings.
17.\" - Avoid passive voice and third person.
18.\" $Revision: 6.8 $
19.\"
20384acc 20.TH SC 1
343218ea 21.SH NAME
20384acc 22sc \- spreadsheet calculator
343218ea 23.SH SYNOPSIS
20384acc 24.B sc
343218ea
KB
25[
26.B -c
27]
28[
29.B -m
30]
31[
32.B -n
33]
34[
35.B -r
36]
37[
38.B -x
39]
40[
41.I file
42]
43.\" ==========
44.SH DESCRIPTION
45The spreadsheet calculator
20384acc 46.I sc
343218ea
KB
47is based on rectangular tables much like a financial spreadsheet.
48When invoked it presents you with a table
49organized as rows and columns of cells.
50If invoked without a
51.I file
52argument, the table is initially empty.
53Otherwise
54.I file
55is read in (see the
56.I Get
57command below).
58Each cell may have associated with it
59a numeric value,
60a label string,
61and/or an expression (formula)
62which evaluates to a numeric value or label string,
63often based on other cell values.
64.\" ----------
65.PP
66Options are:
67.\" ----------
68.TP
69.B \-c
70Start the program with the recalculation being done in column order.
71.\" ----------
72.TP
73.B \-m
74Start the program with automatic recalculation disabled.
75The spreadsheet will be recalculated only when the ``@'' command is used.
76.\" ----------
77.TP
78.B \-n
79Start the program in quick numeric entry mode (see below).
80.\" ----------
81.TP
82.B \-r
83Start the program with the recalculation being done in row
84order (default option).
85.\" ----------
86.TP
87.B \-x
88Cause the
89.I Get
90and
91.I Put
92commands (see below) to encrypt and decrypt data files.
93.\" ----------
94.PP
95All of these options can be changed with the
96.I ^T
97and
98.I S
99commands (see below) while
20384acc 100.I sc
343218ea 101is running. Options specified when
20384acc 102.I sc
343218ea
KB
103is invoked
104override options saved in the data file.
105.\" ==========
106.SS "General Information"
107.\" ----------
108The screen is divided into four regions.
109The top line is for entering commands and displaying cell values.
110The second line is for messages from
20384acc 111.IR sc .
343218ea
KB
112The third line and the first four columns show the column and row numbers,
113from which are derived cell addresses, e.g.
114.I A0
115for the cell in column A, row 0.
116Note that column names are case-insensitive: you can enter
117.I A0
118or
119.IR a0 .
120.\" ----------
121.PP
122The rest of the screen forms a window looking at a portion of the table.
123The total number of display rows and columns available,
124hence the number of table rows and columns displayed,
125is set by
126.IR curses (3)
127and may be overridden by setting the
128.SM LINES
129and
130.SM COLUMNS
131environment variables, respectively.
132.\" ----------
133.PP
134The screen has two cursors:
135a cell cursor, indicated by a highlighted cell and a ``<'' on the screen,
136and a character cursor, indicated by the terminal's hardware cursor.
137The cell and character cursors are often the same.
138They differ when you type a command on the top line.
139.\" ----------
140.PP
141If a cell's numeric value is wider than the column width (see the
142.I f
143command), the cell is filled with asterisks.
144If a cell's label string is wider than the column width,
145it is truncated at the start of the next non-blank cell in the row, if any.
146.\" ----------
147.PP
148Cursor control commands and row and column commands
149can be prefixed by a numeric argument
150which indicates how many times the command is to be executed.
151You can type
152.I ^U
153before a repeat count if quick numeric entry mode is enabled
154or if the number is to be entered
155while the character cursor is on the top line.
156.\" ----------
157.PP
158Commands which use the terminal's control key, such as
159.IR ^N ,
160work both when a command is being typed and when in normal mode.
161.\" ==========
162.SS "Changing Options"
163.\" ----------
164\0 \" exactly one blank line (hard to get)
165.PD 0
166.TP
167.BI ^T o
168Toggle options.
169This command allows you to switch the state of one option selected by
170.IR o .
171A small menu lists the choices for
172.I o
173when you type
174.IR ^T .
175The options selected are saved when the data and formulas are saved
176so that you will have the same setup next time you enter the
177spreadsheet.
178.PD
179.RS
180.\" ----------
181.TP
182.B a
183Automatic Recalculation.
184When set, each change in the spreadsheet causes the entire spreadsheet
185be recalculated. Normally this is not noticeable, but for very large
186spreadsheets, it may be faster to clear automatic recalculation mode and
187update the spreadsheet via explicit ``@'' commands. Default is
188automatic recalculation on.
189.\" ----------
190.TP
191.B c
192Current cell highlighting.
193If enabled, the current cell is highlighted
194(using the terminal's standout mode, if available)
195in addition to being marked by the cell cursor.
196.\" ----------
197.TP
198.B e
199External function execution.
200When disabled, external functions (see
201.IR @ext ()
202below) are not called.
203This saves a lot of time at each screen update.
204External functions are disabled by default.
205If disabled, and external functions are used anywhere,
206a warning is printed each time the screen is updated,
207and the result of
208.IR @ext ()
209is the value from the previous call, if any, or a null string.
210.\" ----------
211.TP
212.B n
213Quick numeric entry.
214If enabled,
215a typed digit is assumed to be
216the start of a numeric value for the current cell,
217not a repeat count, unless preceded by
218.IR ^U .
219.\" ----------
220.TP
221.B t
222Top line display.
223If enabled,
224the name and value of the current cell is displayed on the top line.
225If there is an associated label string,
226the first character of the string value
227is ``<'' for a leftstring or ``>'' for a rightstring (see below),
228followed by "\fIstring\fP" for a constant string
229or
230.RI { expr }
231for a string expression.
232If the cell has a numeric value,
233it follows as
234.RI [ value ],
235which may be a constant or expression.
236.\" ----------
237.TP
238.B x
239Encryption.
240See the
241.B \-x
242option.
243.\" ----------
244.TP
245.B $
246Dollar prescale.
247If enabled, all numeric
248.B constants
249(not expressions) which you enter are multipled by 0.01
250so you don't have to keep typing the decimal point
251if you enter lots of dollar figures.
252.RE
253.\" ----------
254\0 \" exactly one blank line (hard to get)
255.PD 0
256.TP
257.B S
258Set options. This command allows you to set various options.
259A small menu lists the options that cannot be changed through
260.I ^T
261above.
262.PD
263.RS
264.TP
265.BR byrows / bycols
266Specify the order cell evaluation when updating. These options also affect
267the order in which cells are filled (see
268.IR /f )
269and whether a row or column is cleared by an
270.I x
271command.
272.TP
273.BI iterations =n
274Set the maximum number of recalculations before
275the screen is displayed again.
276.I Iterations
277is set to 10 by default.
278.TP
279.BI tblstyle =s
280Control the output of the
281.I T
282command.
283.I s
284can be:
285.B 0
286(default) to give colon delimited fields, with no
287.I tbl
288control lines;
289.B tbl
290to give colon delimited fields, with
291.IR tbl (1)
292control lines;
293.B latex
294to give a
295.I LaTeX
296tabular environment; and
297.B tex
298to give a
299.I TeX
300simple tabbed alignment with ampersands as delimiters.
301.PP
302Other
303.I Set
304options are normally used only in
20384acc 305.I sc
343218ea
KB
306data files since they are available through
307.IR ^T .
308You can also use them interactively
309.TP
310.BR autocalc / !autocalc
311Set/clear auto recalculation mode.
312.TP
313.BR numeric / !numeric
314Set/clear numeric mode.
315.TP
316.BR prescale / !prescale
317Set/clear numeric prescale mode.
318.TP
319.BR extfun / !extfun
320Enable/disable external functions.
321.TP
322.BR cellcur / !cellcur
323Set/clear current cell highlighting mode.
324.TP
325.BR toprow / !toprow
326Set/clear top row display mode.
327.RE
328.\" ==========
329.SS "Cursor Control Commands"
330.\" ----------
331\0 \" exactly one blank line (hard to get)
332.PD 0
333.TP
334.B ^P
335Move the cell cursor up to the previous row.
336.PD
337.\" ----------
338.TP
339.B ^N
340Move the cell cursor down to the next row.
341.\" ----------
342.TP
343.B ^B
344Move the cell cursor backward one column.
345.\" ----------
346.TP
347.B ^F
348Move the cell cursor forward one column.
349.\" ----------
350.TP
351.B "h, j, k, l"
352If the character cursor is not on the top line, these are alternate,
353.IR vi -compatible
354cell cursor controls (left, down, up, right).
355.\" ----------
356.TP
357.B ^H
358If the character cursor is not on the top line,
359.I ^H
360is the same as
361.IR ^B .
362.\" ----------
363.TP
364.B SPACE
365If the character cursor is not on the top line,
366the space bar is the same as
367.IR ^F .
368.\" ----------
369.TP
370.B TAB
371If the character cursor is on the top line,
372.SM TAB
373starts a range (see below).
374Otherwise, it is the same as
375.IR ^F .
376.\" ----------
377.TP
378.B "Arrow Keys"
379The terminal's arrow keys provide another alternate set of cell cursor controls
380if they exist and are supported in the appropriate
381.I termcap
382entry.
383Some terminals have arrow keys which conflict with other control key codes.
384For example, a terminal might send
385.I ^H
386when the back arrow key is pressed.
387In these cases, the conflicting arrow key performs the same function
388as the key combination it mimics.
389.\" ----------
390.TP
391.B ^
392Move the cell cursor up to row 0 of the current column.
393.\" ----------
394.TP
395.B #
396Move the cell cursor down to the last valid row of the current column.
397.\" ----------
398.TP
399.B 0
400Move the cell cursor backward to column A of the current row.
401This command must be prefixed with
402.I ^U
403if quick numeric entry mode is enabled.
404.\" ----------
405.TP
406.B $
407Move the cell cursor forward to the last valid column of the current row.
408.\" ----------
409.TP
410.B b
411Scan the cursor backward (left and up) to the previous valid cell.
412.\" ----------
413.TP
414.B w
415Scan the cursor forward (right and down) to the next valid cell.
416.\" ----------
417.TP
418.BI ^E d
419Go to end of range.
420Follow
421.I ^E
422by a direction indicator such as
423.I ^P
424or
425.IR j .
426If the cell cursor starts on a non-blank cell,
427it goes in the indicated direction until the last non-blank adjacent cell.
428If the cell cursor starts on a blank cell,
429it goes in the indicated direction until the first non-blank cell.
430This command is useful when specifying ranges of adjacent cells (see below),
431especially when the range is bigger than the visible window.
432.\" ----------
433.TP
434.B g
435Go to a cell.
20384acc 436.I sc
343218ea
KB
437prompts for a cell's name, a regular expression surrounded by
438quotes, or a number.
439If a cell's name such as
440.I ae122
441or a the name of a defined range is given, the cell cursor goes
442directly to that cell.
443If a quoted regular expression such as "
444.I Tax Table
445" or "
446.I ^Jan [0-9]*$
447" is given,
20384acc 448.I sc
343218ea
KB
449searches for a cell containing a string matching the regular
450expression.
451See
452.I regex(3)
453or
454.I ed(1)
455for more details on the form of regular
456expressions.
457If a number is given,
20384acc 458.I sc
343218ea
KB
459will search for a cell containing that number.
460Searches for either strings or numbers proceed forward from the
461current cell, wrapping back to a0 at the end of the table, and
462terminate at the current cell if the string or number is not found.
463The last
464.I g
465command is saved, and can be re-issued by entering
466.IR g<return> .
467.\" ==========
468.SS "Cell Entry and Editing Commands"
469.\" ----------
470Cells can contain both a numeric value and a string value.
471Either value can be the result of an expression,
472but not both at once,
473i.e. each cell can have only one expression associated with it.
474Entering a valid numeric expression
475alters the cell's previous numeric value, if any,
476and replaces the cell's previous string expression, if any,
477leaving only the previously computed constant label string.
478Likewise, entering a valid string expression
479alters the cell's the previous label string, if any,
480and replaces the cell's previous numeric expression, if any,
481leaving only the previously computed constant numeric value.
482.TP
483.B =
484Enter a numeric constant or expression into the current cell.
20384acc 485.I sc
343218ea
KB
486prompts for the expression on the top line.
487The usual way to enter a number into a cell is to type ``='',
488then enter the number in response to the prompt on the top line.
489The quick numeric entry option, enabled through the
490.B \-n
491option or
492.I ^T
493command, shows the prompt when you enter the first digit of a number
494(you can skip typing ``='').
495.\" ----------
496.TP
497.B <
498Enter a label string into the current cell
499to be flushed left against the left edge of the cell.
500.\" ----------
501.IP \fB"\fP
502.PD 0
503.TP
504.B >
505Enter a label string into the current cell
506to be flushed right against the right edge of the cell.
507.PD
508.\" ----------
509.PP
510Strings you enter must start with ".
511You can leave off the trailing " and
20384acc 512.I sc
343218ea
KB
513will add it for you.
514You can also enter a string expression
515by backspacing over the opening " in the prompt.
516.\" ----------
517.TP
518.B e
519Edit the value associated with the current cell.
520This is identical to ``=''
521except that the command line starts out containing
522the old numeric value or expression associated with the cell.
523.\" ----------
524.TP
525.B E
526Edit the string associated with the current cell.
527This is identical to ``<'', ``"'', or ``>''
528except that the command line starts out containing
529the old string value or expression associated with the cell.
530.\" ----------
531.PP
532To enter and edit a cell's number part, use the ``='' and
533.I e
534commands.
535To enter and edit a cell's string part, use the ``<'', ``"'', ``>'', and
536.I E
537commands.
538See the sections below on numeric and string expressions for more information.
539.\" ----------
540.TP
541.B x
542Clear the current cell.
543Deletes the numeric value, label string, and/or numeric or string expression.
544You can prefix this command with a count
545of the number of cells on the current row to clear. The current column is
546used if column recalculation order is set.
547Cells cleared with this command may be recalled
548with any of the
549.I pull
550commands (see below).
551.\" ----------
552.TP
553.B m
554Mark a cell to be used as the source for the
555.I copy
556command.
557.\" ----------
558.TP
559.B c
560Copy the last marked cell to the current cell,
561updating row and column references in its numeric or string expression, if any.
562.\" ----------
563.TP
564.B +
565If not in numeric mode, add the current numeric argument (default 1)
566to the value of the current cell. In numeric mode, ``+'' introduces a new
567numeric expression or value, the same as ``=''.
568.\" ----------
569.TP
570.B -
571If not in numeric mode, subtract the current numeric argument (default 1)
572from the value of the current cell. In numeric mode, ``-'' introduces a new,
573negative, numeric expression or value, like ``=''.
574.\" ==========
575.SS "File Commands"
576.\" ----------
577\0 \" exactly one blank line (hard to get)
578.PD 0
579.TP
580.B G
581Get a new database from a file.
582If encryption is enabled,
583the file is decrypted before it is loaded into the spreadsheet.
584.PD
585.\" ----------
586.TP
587.B P
588Put the current database into a file.
589If encryption is enabled,
590the file is encrypted before it is saved.
591.\" ----------
592.TP
593.B W
594Write a listing of the current database into a file
595in a form that matches its appearance on the screen.
596This differs from the
597.I Put
598command in that its files are intended to be reloaded with
599.IR Get ,
600while
601.I Write
602produces a file for people to look at. Hidden rows or columns
603are not shown when the data is printed.
604.\" ----------
605.TP
606.B T
607Write a listing of the current database to a file,
608but include delimiters suitable for processing by the
609.IR tbl ,
610.IR LaTeX ,
611or
612.I TeX
613table processors.
614The delimiters are controlled by the
615.I tblstyle
616option. See
617.I Set
618above.
619The delimters are are a colon\ (:) for style
620.IR 0 or tbl
621and an ampersand\ (&) for style
622.IR latex or tex .
623.\" ----------
624.PP
625With the
626.IR Put ,
627.IR Write ,
628and
629.I Table
630commands, the optional range argument writes a subset of the spreadsheet to
631the output file.
632.\" ----------
633.PP
634With the
635.I Write
636and
637.I Table
638commands, if you try to write to the last file used with the
639.I Get
640or
641.I Put
642commands, or the file specified on the command line when
20384acc 643.I sc
343218ea
KB
644was invoked, you are asked to confirm
645that the (potentially) dangerous operation is really what you want.
646.\" ----------
647.PP
648The three output commands,
649.IR Put ,
650.IR Write ,
651and
652.IR Table ,
653can pipe their (unencrypted only) output to a program.
654To use this feature,
655enter ``| program'' to the prompt asking for a filename.
656For example, to redirect the output of the
657.I Write
658command to the printer,
659you might enter ``| lpr -p''.
660.\" ----------
661.TP
662.B M
663Merge the database from the named file into the current database.
664Values and expressions defined in the named file
665are read into the current spreadsheet
666overwriting the existing entries at matching cell locations.
667.\" ----------
668.TP
669.B R
670Run macros.
671Since
20384acc 672.I sc
343218ea
KB
673files are saved as ASCII files,
674it is possible to use them as primitive macro definition files.
675The
676.I Run
677command makes this easier.
678It's like the
679.I Merge
680command,
681but prints a saved path name as the start of the filename to merge in.
682The string to use is set with the
683.I Define
684command.
685To write macros, you must be familiar with the file format written by the
686.I Put
687command.
688This facility is still primitive and could be much improved.
689.\" ----------
690.TP
691.B D
692Define a path for the
693.I Run
694command to use.
695.\" ----------
696.PP
697All file operations take a filename as the first argument
698to the prompt on the top line.
699The prompt supplies a " to aid in typing in the filename.
700The filename can also be obtained from a cell's label string
701or string expression.
702In this case, delete the leading " with the backspace key
703and enter a cell name such as
704.I a22
705instead.
706If the resulting string starts with ``|'',
707the rest of the string is interpreted as a
708.SM UNIX
709command, as above.
710.\" ==========
711.SS "Row and Column Commands"
712.\" ----------
713These commands can be used on either rows or columns.
714The second letter of the command is either a row designator
715(one of the characters
716.IR r ,
717.IR ^B ,
718.IR ^F ,
719.IR h ,
720.IR l )
721or a column designator (one of
722.IR c ,
723.IR ^P ,
724.IR ^N ,
725.IR k ,
726.IR j ).
727A small menu lists the choices for the second letter
728when you type the first letter of one of these commands.
729Commands which move or copy cells
730also modify the row and column references in affected cell expressions.
731The references may be frozen by using the
732.I fixed
733operator or using the
734.I $
735character in the reference to the cell (see below).
736.\" ----------
737.TP
738.B "ir, ic"
739Insert a new row (column)
740by moving the row (column) containing the cell cursor,
741and all following rows (columns), down (right) one row (column).
742The new row (column) is empty.
743.\" ----------
744.TP
745.B "ar, ac"
746Append a new row (column) immediately following the current row (column).
747It is initialized as a copy of the current one.
748.\" ----------
749.TP
750.B "dr, dc"
751Delete the current row (column).
752.\" ----------
753.TP
754.B "pr, pc, pm"
755Pull deleted rows (columns) back into the spreadsheet.
756The last deleted set of cells is put back into the spreadsheet
757at the current location.
758.I pr
759inserts enough rows to hold the data.
760.I pc
761inserts enough columns to hold the data.
762.I pm
763(merge) does not insert rows or columns;
764it overwrites the cells beginning at the current cell cursor location.
765.\" ----------
766.TP
767.B "vr, vc"
768Remove expressions from the affected rows (columns),
769leaving only the values which were in the cells
770before the command was executed.
771.\" ----------
772.TP
773.B "zr, zc"
774Hide (``zap'') the current row (column).
775This keeps a row (column) from being displayed but keeps it in the data base.
776The status of the rows and columns is saved with the data base so hidden
777rows and columns will be still
778be hidden when you reload the spreadsheet. Hidden rows or columns are not
779printed by the
780.I W
781command.
782.\" ----------
783.TP
784.B "sr, sc"
785Show hidden rows (columns).
786Enter a range of rows (columns) to be revealed.
787The default is the first range of rows (columns) currently hidden.
788This command ignores the repeat count, if any.
789.\" ----------
790.TP
791.B f
792Set the output format to be used
793for printing the numeric values in each cell in the current column.
794Enter two numbers:
795the total width in characters of the column,
796and the number of digits to follow decimal points.
797Values are rounded off to the least significant digit displayed.
798The total column width affects displays of strings as well as numbers.
799A preceding count can be used to affect more than one column.
800This command has only a column version (no second letter).
801.\" ==========
802.SS "Range Commands"
803.\" ----------
804Range operations affect a rectangular region on the screen
805defined by the upper left and lower right cells in the region.
806All of the commands in this class start with a slash;
807the second letter of the command indicates which command.
808A small menu lists the choices for the second letter when you type ``/''.
20384acc 809.I sc
343218ea
KB
810prompts for needed parameters for each command.
811Phrases surrounded by square brackets in the prompt are informational only
812and may be erased with the backspace key.
813.\" ----------
814.PP
815Prompts requesting variable names may be satisfied
816with either an explicit variable name, such as
817.IR A10 ,
818or with a variable name previously defined in a
819.I /d
820command (see below).
821Range name prompts require either an explicit range such as
822.IR A10:B20 ,
823or a range name previously defined with a
824.I /d
825command.
826A default range shown in the second line
827is used if you omit the range from the command or press the
828.SM TAB
829key (see below).
830The default range can be changed by moving the cell cursor
831via the control commands
832.RI ( ^P ,
833.IR ^N ,
834.IR ^B ,
835.IR ^F )
836or the arrow keys.
837The cells in the default range are highlighted
838(using the terminal's standout mode, if available).
839.\" ----------
840.TP
841.B /x
842Clear a range.
843Cells cleared with this command may be recalled with any of the
844.I pull
845commands.
846.\" ----------
847.TP
848.B /v
849Values only.
850This command removes the expressions from a range of cells,
851leaving just the values of the expressions.
852.\" ----------
853.TP
854.B /c
855Copy a source range to a destination range.
856The source and destination may be different sizes.
857The result is always one or more full copies of the source.
858Copying a row to a row yields a row.
859Copying a column to a column yields a column.
860Copying a range to anything yields a range.
861Copying a row to a column or a column to a row yields a range
862with as many copies of the source as there are cells in the destination.
863This command can be used to duplicate a cell through an arbitrary range
864by making the source a single cell range such as
865.IR b20:b20 .
866.\" ----------
867.TP
868.B /f
869Fill a range with constant values
870starting with a given value and increasing by a given increment.
871Each row is filled before moving on to the next row if row order
872recalculation is set. Column order fills each column in the range
873before moving on to the next column.
874The start and increment numbers may be positive or negative.
875To fill all cells with the same value, give an increment of zero.
876.\" ----------
877.TP
878.B /d
879Use this command to assign a symbolic name to a single cell
880or a rectangular range of cells on the screen.
881The parameters are the name, surrounded by "",
882and either a single cell name such as
883.I A10
884or a range such as
885.IR a1:b20 .
886Names defined in this fashion are used by the program in future prompts,
887may be entered in response to prompts requesting a cell or range name,
888and are saved when the spreadsheet is saved with the
889.I Put
890command.
891Names defined must be more than two alpha characters long
892to differentiate them from a column names,
893and must not have embedded special characters.
894Names may include the character ``_'' or numerals
895as long as they occur after the first three alpha characters.
896.\" ----------
897.TP
898.B /s
899This command lists (shows) the currently defined range names.
900If there are no defined range names, then a message is given,
901otherwise
902it pipes output to
903.IR sort ,
904then to
905.IR less .
906If the environment variable PAGER is set, its value is used in place of
907.IR less.
908.\" ----------
909.TP
910.B /u
911Use this command to undefine a previously defined range name.
912.\" ==========
913.SS "Miscellaneous Commands"
914.\" ----------
915\0 \" exactly one blank line (hard to get)
916.PD 0
917.TP
918.B Q
919.TP
920.B q
921.TP
922.B ^C
923Exit from
20384acc 924.IR sc .
343218ea
KB
925If you made any changes since the last
926.I Get
927or
928.IR Put ,
20384acc 929.I sc
343218ea
KB
930asks about saving your data before exiting.
931.PD
932.\" ----------
933.TP
934.B ^G
935.PD 0
936.TP
937.B ESC
938Abort entry of the current command.
939.PD
940.\" ----------
941.TP
942.B ?
943Enter an interactive help facility. Lets you look up brief
944summaries of the main features of the program. The help facility is
945structured like this manual page so it is easy to find more
946information on a particular topic.
947.\" ----------
948.TP
949.B !
950Shell escape.
20384acc 951.I sc
343218ea
KB
952prompts for a shell command to run.
953End the command line with the
954.SM RETURN
955key.
956If the environment variable
957.SM SHELL
958is defined, that shell is run.
959If not, /bin/sh is used.
960Giving a null command line starts the shell in interactive mode.
961A second ``!'' repeats the previous command.
962.\" ----------
963.TP
964.B ^L
965Redraw the screen.
966.\" ----------
967.TP
968.B ^R
969Redraw the screen with special highlighting of cells to be filled in.
970This is useful for finding values you need to provide or update
971in a form with which you aren't familiar
972or of which you have forgotten the details.
973
974It's also useful for checking a form you are creating.
975All cells which contain constant numeric values
976(not the result of a numeric expression)
977are highlighted temporarily,
978until the next screen change, however minor.
979To avoid ambiguity,
980the current range (if any) and current cell are not highlighted.
981.\" ----------
982.TP
983.B ^X
984This command is similar to
985.IR ^R ,
986but highlights cells which have expressions.
987It also displays the expressions in the highlighted cells
988as left-flushed strings,
989instead of the numeric values and/or label strings of those cells.
990This command makes it easier to check expressions,
991at least when they fit in their cells or the following cell(s) are blank
992so the expressions can slop over (like label strings).
993In the latter case, the slop over is not cleared on the next screen update,
994so you may want to type
995.I ^L
996after the
997.I ^X
998in order to clean up the screen.
999.\" ----------
1000.TP
1001.B @
1002Recalculates the spreadsheet.
1003.\" ----------
1004.TP
1005.B ^V
1006Type, in the command line, the name of the current cell
1007(the one at the cell cursor).
1008This is useful when entering expressions
1009which refer to other cells in the table.
1010.\" ----------
1011.TP
1012.B ^W
1013Type, in the command line, the expression attached to the current cell.
1014If there is none, the result is ``?''.
1015.\" ----------
1016.TP
1017.B ^A
1018Type, in the command line, the numeric value of the current cell, if any.
1019.\" ----------
1020.PP
1021The
1022.IR ^V ,
1023.IR ^W ,
1024and
1025.I ^A
1026commands only work when the character cursor
1027is on the command line and beyond the first character.
1028.\" ----------
1029.TP
1030.B TAB
1031When the character cursor is on the top line,
1032defines a range of cells via the cursor control commands or the arrow keys.
1033The range is highlighted,
1034starts at the cell where you typed
1035.SM TAB,
1036and continues through the current cell cursor.
1037Pressing
1038.SM TAB
1039again causes the highlighted range to be entered into the command line
1040and the highlighting to be turned off.
1041This is most useful for defining ranges to functions such as
1042.IR @sum ().
1043Pressing ``)'' acts just like typing the
1044.SM TAB
1045key the second time and adds the closing ``)''.
1046Note that when you give a range command,
1047you don't need to press the first
1048.SM TAB
1049to begin defining a range starting with the current cell.
1050.\" ==========
1051.SS "Variable Names"
1052.\" ----------
1053Normally, a variable name is just the name of a cell, such as
1054.IR K20 .
1055The value is the numeric or string value of the cell,
1056according to context.
1057.\" ----------
1058.PP
1059When a cell's expression (formula) is copied to another location via
1060.I copy
1061or
1062.IR range-copy ,
1063variable references are by default offset by the amount the formula moved.
1064This allows the new formula to work on new data.
1065If cell references are not to change,
1066you can either use the
1067.I fixed
1068operator (see below),
1069or one of the following variations on the cell name.
1070.\" ----------
1071.TP
1072.I K20
1073References cell
1074.IR K20 ;
1075the reference changes when the formula is copied.
1076.\" ----------
1077.TP
1078.BI $ K $ 20
1079Always refers to cell
1080.IR K20 ;
1081the reference stays fixed when the formula is copied.
1082.\" ----------
1083.TP
1084.BI $ K20
1085Keeps the column fixed at column K;
1086the row is free to vary.
1087.\" ----------
1088.TP
1089.IB K $ 20
1090Similarly, this fixes the row and allows the column to vary.
1091.\" ----------
1092.PP
1093These conventions also hold on defined ranges.
1094Range references vary when formulas containing them are copied.
1095If the range is defined with fixed variable references,
1096the references do not change.
1097.\" ----------
1098.TP
1099.B fixed
1100To make a variable not change automatically when a cell moves,
1101put the word
1102.I fixed
1103in front of the reference, for example:
1104B1 \(** fixed C3.
1105.\" ==========
1106.SS "Numeric Expressions"
1107.\" ----------
1108Numeric expressions used with the ``=''
1109and
1110.I e
1111commands have a fairly conventional syntax.
1112Terms may be
1113constants,
1114variable names,
1115parenthesized expressions,
1116and negated terms.
1117Ranges may be operated upon with range functions such as sum
1118.RI ( @sum ())
1119and average
1120.RI ( @avg ()).
1121Terms may be combined using binary operators.
1122.\" ----------
1123.TP
1124.BR \- e
1125Negation.
1126.\" ----------
1127.TP
1128.RB e + e
1129Addition.
1130.\" ----------
1131.TP
1132.RB e \- e
1133Subtraction.
1134.\" ----------
1135.TP
1136.RB e \(** e
1137Multiplication.
1138.\" ----------
1139.TP
1140.RB e / e
1141Division.
1142.\" ----------
1143.TP
1144.RB e1 % e2
1145e1 mod e2.
1146.\" ----------
1147.TP
1148.RB e ^ e
1149Exponentiation.
1150.\" ----------
1151.TP
1152.RB e < e
1153.PD 0
1154.TP
1155.RB e <= e
1156.TP
1157.RB e = e
1158.TP
1159.RB e != e
1160.TP
1161.RB e >= e
1162.TP
1163.RB e > e
1164Relationals:
1165true (1) if and only if the indicated relation holds,
1166else false (0).
1167Note that ``<='', ``!='', and ``>=''
1168are converted to their ``~()'' equivalents.
1169.PD
1170.\" ----------
1171.TP
1172.BR ~ e
1173Boolean operator
1174.SM NOT.
1175.\" ----------
1176.TP
1177.RB e & e
1178Boolean operator
1179.SM AND.
1180.\" ----------
1181.TP
1182.RB e | e
1183Boolean operator
1184.SM OR.
1185.\" ----------
1186.TP
1187.RB @if (e, e, e)
1188.PD 0
1189.TP
1190.RB e ? e : e
1191Conditional:
1192If the first expression is true then the value of the second is returned,
1193otherwise the value of the third.
1194.\" ----------
1195.PP
1196Operator precedence from highest to lowest is:
1197.PP
1198.nf
1199.RS
1200\-, ~
1201^
1202\(**, /
1203+, \-
1204<, <=, =, !=, >=, >
1205&
1206|
1207?:
1208.RE
1209.fi
1210.\" ==========
1211.SS "Built-in Range Functions"
1212.\" ----------
1213These functions return numeric values.
1214.\" ----------
1215.TP 18
1216.BR @sum (r)
1217Sum all valid (nonblank) entries in the region
1218whose two corners are defined by the two variable names (e.g.
1219.IR c5:e14 )
1220or the range name specified.
1221.\" ----------
1222.TP 18
1223.BR @prod (r)
1224Multiply together all valid (nonblank) entries in the specified region.
1225.\" ----------
1226.TP 18
1227.BR @avg (r)
1228Average all valid (nonblank) entries in the specified region.
1229.\" ----------
1230.TP 18
1231.BR @count (r)
1232Count all valid (nonblank) entries in the specified region.
1233.\" ----------
1234.TP 18
1235.BR @max (r)
1236Return the maximum value in the specified region. See also the multi argument
1237version of
1238.I @max
1239below.
1240.\" ----------
1241.TP 18
1242.BR @min (r)
1243Return the minimum value in the specified region. See also the multi argument
1244version of
1245.I @min
1246below.
1247.\" ----------
1248.TP 18
1249.BR @stddev (r)
1250Return the sample standard deviation of the cells in the specified region.
1251.\" ----------
1252.TP 18
1253.BR @lookup (e,r)
1254.PD 0
1255.TP 18
1256.BR @lookup (se,r)
1257.PD
1258Evaluates the expression then searches through the range
1259.I r
1260for a matching value.
1261The range should be either a single row or a single column.
1262The expression can be either a string
1263expression or a numeric expression. If it is a numeric expression,
1264the range is searched for the the last value less than or equal to
1265.IR e .
1266If the expression is a string expression, the string portions
1267of the cells in the range are searched for an exact string match.
1268The value returned is the numeric value from the next row and the same
1269column as the match, if the range was a single row, or the value from
1270the next column and the same row as the match if the range was a single
1271column.
1272.\" ----------
1273.TP 18
1274.BR @hlookup (e,r,n)
1275.PD 0
1276.TP 18
1277.BR @hlookup (se,r,n)
1278.PD
1279Evaluates the expression then searches through the first row in the range
1280.I r
1281for a matching value.
1282The expression can be either a string
1283expression or a numeric expression. If it is a numeric expression,
1284the row is searched for the the last value less than or equal to
1285.IR e .
1286If the expression is a string expression, the string portions
1287of the cells in the row are searched for an exact string match.
1288The value returned is the numeric value from the same column
1289.I n
1290rows below the match.
1291.\" ----------
1292.TP 18
1293.BR @vlookup (e,r,n)
1294.PD 0
1295.TP 18
1296.BR @vlookup (se,r,n)
1297.PD
1298Evaluates the expression then searches through the first column in the range
1299.I r
1300for a matching value.
1301The expression can be either a string
1302expression or a numeric expression. If it is a numeric expression,
1303the column is searched for the the last value less than or equal to
1304.IR e .
1305If the expression is a string expression, the string portions
1306of the cells in the column are searched for an exact string match.
1307The value returned is the numeric value from the same row
1308.I n
1309columns to the right of the match.
1310.\" ----------
1311.TP 18
1312.BR @index (e,r)
1313Use the value of the expression
1314.I e
1315to index into
1316the range
1317.IR r .
1318The numeric value at that position is returned.
1319The value 1 selects the first item in the range,
13202 selects the second item, etc.
1321.I R
1322should be either a single row or a single
1323column.
1324.\" ----------
1325.TP 18
1326.BR @stindex (e,r)
1327Use the value of
1328.I e
1329to index into
1330the range
1331.IR r .
1332The string value at that position is returned.
1333The value 1 selects the first item in the range,
13342 selects the second item, etc.
1335The range should be either a single row or a single
1336column.
1337.\" ==========
1338.SS "Built-in Numeric Functions"
1339.\" ----------
1340All of these functions operate on floating point numbers (doubles)
1341and return numeric values.
1342Most of them are standard system functions more fully described in
1343.IR math (3).
1344The trig functions operate with angles in radians.
1345.\" ----------
1346.TP 18
1347.BR @sqrt (e)
1348Return the square root of
1349.IR e .
1350.\" ----------
1351.TP 18
1352.BR @exp (e)
1353Return the exponential function of
1354.IR e .
1355.\" ----------
1356.TP 18
1357.BR @ln (e)
1358Return the natural logarithm of
1359.IR e .
1360.\" ----------
1361.TP 18
1362.BR @log (e)
1363Return the base 10 logarithm of
1364.IR e .
1365.\" ----------
1366.TP 18
1367.BR @floor (e)
1368Return the largest integer not greater than
1369.IR e .
1370.\" ----------
1371.TP 18
1372.BR @ceil (e)
1373Return the smallest integer not less than
1374.IR e .
1375.\" ----------
1376.TP 18
1377.BR @rnd (e)
1378Round
1379.I e
1380to the nearest integer.
1381.TP 18
1382.BR @round (e,n)
1383Round
1384.I e
1385to
1386.I n
1387decimal places.
1388.\" ----------
1389.TP 18
1390.BR @abs (e)
1391.PD 0
1392.TP 18
1393.BR @fabs (e)
1394Return the absolute value of
1395.IR e .
1396.\" ----------
1397.TP 18
1398.BR @pow (e1,e2)
1399Return
1400.I e1
1401raised to the power of
1402.IR e2 .
1403.\" ----------
1404.TP 18
1405.BR @hypot (e1,e2)
1406Return sqrt(e1\(**e1+e2\(**e2), taking precautions against unwarranted
1407overflows.
1408.\" ----------
1409.TP 18
1410.B pi
1411A constant quite close to pi.
1412.\" ----------
1413.TP 18
1414.BR @dtr (e)
1415Convert
1416.I e
1417in degrees to radians.
1418.\" ----------
1419.TP 18
1420.BR @rtd (e)
1421Convert
1422.I e
1423in radians to degrees.
1424.\" ----------
1425.TP 18
1426.BR @sin (e)
1427.PD 0
1428.TP 18
1429.BR @cos (e)
1430.TP 18
1431.BR @tan (e)
1432Return trigonometric functions of radian arguments.
1433The magnitude of the arguments are not checked to assure meaningful results.
1434.PD
1435.\" ----------
1436.TP 18
1437.BR @asin (e)
1438Return the arc sine of
1439.I e
1440in the range -pi/2 to pi/2.
1441.\" ----------
1442.TP 18
1443.BR @acos (e)
1444Return the arc cosine of
1445.I e
1446in the range 0 to pi.
1447.\" ----------
1448.TP 18
1449.BR @atan (e)
1450Return the arc tangent of
1451.I e
1452in the range -pi/2 to pi/2.
1453.\" ----------
1454.TP 18
1455.BR @atan2 (e1,e2)
1456Returns the arc tangent of
1457.IR e1 / e2
1458in the range -pi to pi.
1459.\" ----------
1460.TP 18
1461.BR @max (e1,e2,...)
1462Return the maximum of the values of the expressions. Two or more expressions
1463may be specified. See also the range version of
1464.I @max
1465above.
1466.\" ----------
1467.TP 18
1468.BR @min (e1,e2,...)
1469Return the minimum of the values of the expressions. Two or more expressions
1470may be specified. See also the range version of
1471.I @min
1472above.
1473.\" ----------
1474.TP 18
1475.BR @ston (se)
1476Convert string expression
1477.I se
1478to a numeric value.
1479.\" ----------
1480.TP 18
1481.BR @eqs (se1,se2)
1482Return 1 if string expression
1483.I se1
1484has the same value as string expression
1485.IR se2 ,
14860 otherwise.
1487.\" ----------
1488.TP 18
1489.BR @nval (se,e)
1490Return the numeric value of a cell selected by name.
1491String expression
1492.I se
1493must evaluate to a column name (``A''-``AE'') and
1494.I e
1495must evaluate to a row number (0-199).
1496If
1497.I se
1498or
1499.I e
1500is out of bounds, or the cell has no numeric value, the result is 0.
1501You can use this for simple table lookups.
1502Be sure the table doesn't move unexpectedly!
1503See also
1504.IR @sval ()
1505below.
1506.\" ==========
1507.SS "String Expressions"
1508.\" ----------
1509String expressions are made up of constant strings
1510(characters surrounded by double quotation marks),
1511variables
1512(cell names, which refer to the cells's label strings or expressions),
1513and string functions.
1514Note that string expressions are only allowed
1515when entering a cell's label string, not its numeric part.
1516Also note that string expression results may be left or right flushed,
1517according to the type of the cell's string label.
1518.\" ----------
1519.TP
1520.B #
1521Concatenate strings.
1522For example, the string expression
1523.IP ""
1524 A0 # "zy dog"
1525.IP ""
1526displays the string ``the lazy dog'' in the cell if the value of
1527.IR A0 's
1528string is ``the la''.
1529.\" ==========
1530.SS "Built-in String Functions"
1531.\" ----------
1532\0 \" exactly one blank line (hard to get)
1533.PD 0
1534.TP 18
1535.BR @substr (se,e1,e2)
1536Extract and return from string expression
1537.I se
1538the substring indexed by character number
1539.I e1
1540through character number
1541.I e2
1542(defaults to the size of
1543.I se
1544if beyond the end of it).
1545If
1546.I e1
1547is less than 1 or greater than
1548.IR e2 ,
1549the result is the null string.
1550For example,
1551.PD
1552.IP ""
1553 @substr ("Nice jacket", 4, 7)
1554.IP ""
1555returns the string ``e jac''.
1556.\" ----------
1557.TP 18
1558.BR @fmt (se,e)
1559Convert a number to a string.
1560The argument
1561.I se
1562must be a valid
1563.IR printf (3)
1564format string.
1565.I e
1566is converted according to the standard rules.
1567For example, the expression
1568.IP ""
1569 @fmt ("\(**\(**%6.3f\(**\(**", 10.5)
1570.IP ""
1571yields the string ``\(**\(**10.500\(**\(**''.
1572.I e
1573is a double, so applicable formats are e, E, f, g, and G.
1574Try ``%g'' as a starting point.
1575.\" ----------
1576.TP 18
1577.BR @sval (se,e)
1578Return the string value of a cell selected by name.
1579String expression
1580.I se
1581must evaluate to a column name (``A''-``AE'') and
1582.I e
1583must evaluate to a row number (0-199).
1584If
1585.I se
1586or
1587.I e
1588is out of bounds, or the cell has no string value,
1589the result is the null string.
1590You can use this for simple table lookups.
1591Be sure the table doesn't move unexpectedly!
1592.\" ----------
1593.TP 18
1594.BR @ext (se,e)
1595Call an external function (program or script).
1596The purpose is to allow arbitrary functions on values,
1597e.g. table lookups and interpolations.
1598String expression
1599.I se
1600is a command or command line to call with
1601.IR popen (3).
1602The value of
1603.I e
1604is converted to a string and appended to the command line as an argument.
1605The result of
1606.IR @ext ()
1607is a string:
1608the first line printed to standard output by the command.
1609The command should emit exactly one output line.
1610Additional output, or output to standard error, messes up the screen.
1611.IR @ext ()
1612returns a null string and prints an appropriate warning
1613if external functions are disabled,
1614.I se
1615is null, or the attempt to run the command fails.
1616.IP ""
1617External functions can be slow to run,
1618and if enabled are called at each screen update,
1619so they are disabled by default.
1620You can enable them with
1621.I ^T
1622when you really want them called.
1623.IP ""
1624A simple example:
1625.IP ""
1626 @ext ("echo", a1)
1627.IP ""
1628You can use
1629.IR @ston ()
1630to convert the
1631.IR @ext ()
1632result back to a number.
1633For example:
1634.IP ""
1635 @ston (@ext ("form.sc.ext", a9 + b9))
1636.IP ""
1637Note that you can built a command line (including more argument values)
1638from a string expression with concatenation.
1639You can also "hide" the second argument by ending the command line
1640(first argument) with `` #'' (shell comment).
1641.\" ==========
1642.SS "Built-in Financial Functions"
1643.\" ----------
1644Financial functions compute the mortgage (or loan) payment, future value,
1645and the present value functions. Each accepts
1646three arguments, an amount, a rate of interest (per period), and
1647the number of periods.
1648These functions are the same as those commonly found in other spreadsheets
1649and financial calculators
1650.\" ----------
1651.TP 18
1652.BR @pmt (e1,e2,e3)
1653.IR @pmt (60000,.01,360)
1654computes the monthly payments for a $60000 mortgage at 12% annual interest
1655(.01 per month) for 30 years (360 months).
1656.\" ----------
1657.TP 18
1658.BR @fv (e1,e2,e3)
1659.IR @fv (100,.005,36)
1660computes the future value for of 36 monthly payments of $100 at 6%
1661interest (.005 per month). It answers the question: "How much
1662will I have in 36 months if I deposit $100 per month in a savings
1663account paying 6% interest compounded monthly?"
1664.\" ----------
1665.TP 18
1666.BR @pv (e1,e2,e3)
1667.IR @pv (1000,.015,36)
1668computes the present value of an a ordinary annuity of
166936 monthly payments of $1000 at 18% annual interest.
1670It answers the question: "How much can I borrow at 18% for 30 years
1671if I pay $1000 per month?"
1672.\" ==========
1673.SS "Built-in Date and Time Functions"
1674.\" ----------
1675Time for
20384acc 1676.I sc
343218ea
KB
1677follows the system standard:
1678the number of seconds since 1970.
1679All date and time functions except
1680.IR @date ()
1681return numbers, not strings.
1682.\" ----------
1683.TP 18
1684.B @now
1685Return the current time encoded
1686as the number of seconds since the beginning of the
1687epoch (December 31, 1969, midnight, GMT.)
1688.\" ----------
1689.TP 18
1690.BR @dts (e1,e2,e3)
1691.IR @dts (9,14,1988)
1692converts the date September 14, 1988
1693to the number of seconds from the epoch
1694to the first second of 9/14/88, local time.
1695For example,
1696.IR @date ( @dts (12,14,1976))
1697yields
1698.IP ""
1699.I " Tue Dec 14 00:00:00 1976"
1700.IP ""
1701The month should be range from 1 to 12, the day should range from
17021 to the number of days in the specified month, and the year should
1703range from 1970 to 1999.
1704.\" ----------
1705.TP 18
1706.BR @tts (e1,e2,e3)
1707.IR @tts (8,20,45)
1708converts the time 8:40:45 to the number of seconds since
1709midnight, the night before. The hour should range from 0 to 23;
1710the minutes and seconds should range from 0 to 59.
1711.\" ----------
1712.PP
1713The following functions take the time in seconds
1714(e.g. from
1715.IR @now )
1716as an argument and return the specified value.
1717The functions all convert from GMT to local time.
1718.\" ----------
1719.TP 18
1720.BR @date (e)
1721Convert the time in seconds to a date string
172224 characters long in the following form:
1723.IP ""
1724.I " Sun Sep 16 01:03:52 1973"
1725.IP ""
1726Note that you can extract parts of this fixed-format string with
1727.IR @substr ().
1728.\" ----------
1729.TP 18
1730.BR @year (e)
1731Return the year.
1732Valid years begin with 1970.
1733The last legal year is system dependent.
1734.\" ----------
1735.TP 18
1736.BR @month (e)
1737Return the month, encoded as 1 (January) to 12 (December).
1738.\" ----------
1739.TP 18
1740.BR @day (e)
1741Return the day of the month, encoded as 1 to 31.
1742.\" ----------
1743.TP 18
1744.BR @hour (e)
1745Return the number of hours since midnight, encoded as 0 to 23.
1746.\" ----------
1747.TP 18
1748.BR @minute (e)
1749Return the number of minutes since the last full hour, encoded as 0 to 59.
1750.\" ----------
1751.TP 18
1752.BR @second (e)
1753Return the number of seconds since the last full minute, encoded as 0 to 59.
1754.\" ==========
1755.SS "Spreadsheet Update"
1756.\" ----------
1757Re-evaluation of spreadsheet expressions
1758is done by row or by column depending on the selected calculation order.
1759Evaluation is repeated up to
1760.I iterations
1761times for each update if necessary,
1762so forward references usually work as expected. See
1763.I set
1764above.
1765If stability is not reached after ten iterations,
1766a warning is printed.
1767This is usually due to a long series of forward references,
1768or to unstable cyclic references (for example, set
1769.IR A0 's
1770expression to ``A0+1'').
1771.\" ==========
1772.SH SEE ALSO
20384acc 1773bc(1), dc(1), crypt(1)
343218ea
KB
1774.\" ==========
1775.SH BUGS
1776Top-to-bottom, left-to-right evaluation of expressions is silly.
1777A proper following of the dependency graph
1778with (perhaps) recourse to relaxation should be implemented.
1779.\" ----------
1780.PP
1781Editing is crude.
1782All you can do is backspace over and retype text to be altered.
1783There is no easy way to switch a leftstring to a rightstring or vice versa.
1784Of course, you can always write the spreadsheet to a file with
1785.IR Put ,
1786edit it by calling an editor on the file with ``!'',
1787and read it back with
1788.I Get
1789-- if you are comfortable editing spreadsheet files.
1790.\" ----------
1791.PP
1792Only one previous value is saved from any call of
1793.IR @ext ().
1794If it is used more than once in a spreadsheet
1795and external functions are enabled and later disabled,
1796the last returned value pops up in several places.
1797.\" ----------
1798.PP
1799On some systems,
1800if the cell cursor is in column 0 with topline enabled
1801(so the current cell is highlighted),
1802or if any cell in column 0 is highlighted,
1803the corresponding row number gets displayed and then blanked
1804during a screen refresh.
1805This looks like a bug in
1806.IR curses .
1807.\" ----------
1808.PP
1809Many commands give no indication (a message or beep) if they have null effect.
1810Some should give confirmation of their action, but they don't.