sc(1)


NAME

   sc - spreadsheet calculator

SYNOPSIS

   sc  [-a]  [-c]  [-e]  [-m]  [-n] [-o] [-q] [-r] [-v] [-x] [-C] [-R] [-P
   range[/address] | /address] [-W range] [file...]

DESCRIPTION

   The spreadsheet calculator sc is based on rectangular tables much  like
   a  financial  spreadsheet.   When invoked, it first looks for a file in
   the user's home directory called .scrc and if found,  reads  that  file
   into  memory.  If that file contains the command ``set scrc'', sc looks
   for a file called .scrc in the current directory, and if  found,  reads
   that  file  into  memory,  too.   Next,  it  reads the options from the
   command line, and finally, it reads in the file or files  specified  on
   the command line and presents the data in a table organized as rows and
   columns of cells.  If invoked without a file  argument,  the  table  is
   initially  empty,  unless it is running in a pipeline, in which case it
   will read its data from the standard input.  If more than one  file  is
   specified,  all files except the first one will be merged.  The default
   filename for saving a file with the Put command will be the same as the
   first  file  specified,  and the other files will be treated as macros.
   If you want to use advanced macros from the  command  line,  the  ``|''
   must be quoted to prevent it from being expanded by the shell.

   Options  begin  with  -.   However,  an  argument of a single - will be
   interpreted to mean that  spreadsheet  data  will  be  taken  from  the
   standard  input.   This is useful for including sc in a pipeline if the
   system supports pipes.  However, if standard input is not  a  terminal,
   the  - is only necessary if there are multiple files and standard input
   is not the last to be read, since standard input is automatically  read
   in  after  all  other  files  in  such  cases  if  it  is not specified
   explicitly, or if there are no other filenames on the command line.  If
   sc is included in a pipeline, and a filename of ``-'' is not specified,
   the standard input will be merged in after all of the other named files
   have been processed.

   The first argument not beginning with a -, or a single - by itself, and
   any subsequent arguments  will  all  be  interpreted  as  filenames  (a
   filename  of - meaning standard input as noted above).  In addition, an
   argument of -- may be used to signify  that  all  subsequent  arguments
   should  be treated as filenames even if they begin with a -, but unlike
   -, -- won't be treated as a filename itself.

   Each cell may have associated with it a numeric value, a label  string,
   and/or  an  expression  (formula) which evaluates to a numeric value or
   label string, often based on other cell values.

   For an online tutorial, type the command:

          sc /usr/share/doc/sc/tutorial.sc

   To print a quick reference card, type the command:

          scqref | [your_printer_commmand]

OPTIONS

   -a     Do not run the autorun macro, if one is specified in the file.

   -c     Start the program with the recalculation being  done  in  column
          order.

   -e     Start   the   program  with  round-to-even  (banker's  rounding)
          enabled.

   -m     Start the program with automatic  recalculation  disabled.   The
          spreadsheet  will be recalculated only when the ``@'' command is
          used.

   -n     Start the program in quick numeric entry mode (see below).

   -o     Start the program with  automatic  optimization  of  expressions
          enabled.

   -q     Quit  after  loading all files, but before becoming interactive.
          This is useful in shell scripts for getting information  from  a
          file,  for  example, or using sc as a non-interactive calculator
          using the eval command.

   -r     Start the program with the recalculation being done in row order
          (default option).

   -v     When  piping  data  out  using the -P option (below), change all
          expressions to values.  The -v option must precede the -P option
          to  have  an  effect.   If the -P option is used more than once,
          there must be a separate -v option for each instance of  the  -P
          option.

   -x     Cause  the  Get  and  Put  commands  (see  below) to encrypt and
          decrypt data files.

   -C     Start the program with automatic newline action set to increment
          the column (see below).

   -P range[/address]
   -P /address
          Pipe  a range to standard output.  The output is similar to that
          of the Put command (below),  except  that  only  cell  data  and
          formatting  information  for  cells  in  the  range  are output,
          without all of the colors, range definitions, column formatting,
          etc.   The  optional /address is used to adjust all addresses in
          the range to a new starting point.  This is useful  for  copying
          data   from  one  file  to  another,  especially  when  used  in
          conjunction with the -v option  (above),  using  something  like
          merge  "|sc -v -Prange/address filename" (note the pipe symbol).
          This option may be used  more  than  once  to  specify  multiple
          ranges.   Note,  however, that the -v option must precede the -P
          option on the command line, and there  must  be  a  separate  -v
          option  for  each instance of the -P option.  Any instance of -P
          not preceded by  its  own  -v  option  will  output  unevaluated
          expressions.

          A range of ``%'' may be used to refer to the entire spreadsheet.
          If the range is left out, as shown in the second form above,  sc
          will  be started interactively in navigate mode, allowing you to
          navigate the spreadsheet and highlight the  range  you  want  to
          output.    Pressing   ESC,  ^G,  or  q  will  terminate  without
          outputting any data.

   -R     Start the program with automatic newline action set to increment
          the row (see below).

   -W     Pipe  a  range  to  standard output.  The output is identical to
          that of the Write command (below).  This option may be used more
          than  once  to specify multiple ranges.  A range of ``%'' may be
          used to refer to the entire spreadsheet.

   All of these options can be changed with the ^T  and  S  commands  (see
   below)  while  sc  is  running.   Options  specified when sc is invoked
   override options saved in the data file.

   Personal Initialization File
   When sc first starts, it looks for a file in the user's home  directory
   called  .scrc  and  if found, loads it into memory.  The format of this
   file is the same as any other sc  file,  but  should  be  reserved  for
   setting  certain  defaults.   Any  options  set  which  have equivalent
   command line options may be overridden by the command  line.   If  that
   file  contains  the  command ``set scrc'', sc will then look for a file
   called .scrc in the current directory, and if  found,  load  that  file
   into memory, too (this is analogous to the ``set exrc'' command used by
   vi/ex).  These ``dotfiles'' may be created by any text editor.  Several
   commands exist specifically for setting default file name extensions in
   the .scrc file, although they may also be used  from  macros,  ordinary
   spreadsheet  files,  or  from within sc at the command line.  They will
   not, however, be saved along with the file.  The extensions  should  be
   quoted, and should not include the preceding `.' (e.g., scext "sc" will
   add the extension .sc ).  These commands are:

   scext  This is the default extension for normal sc files (those created
          with  the  Put  command).   If  this command is not used, all sc
          files will be saved  without  an  extension,  and  any  existing
          extension  will  not be removed.  Setting this option causes all
          sc files to be saved with the specified extension added,  unless
          it  is  already  present.   If  the  file  name  already  has an
          extension of .sc, it will first be removed.  Any other extension
          will not be removed.

   ascext This  is the default extension for plain text files created with
          the Write command.  The file name will first be checked  to  see
          if  it  already  has an extension of either .sc or the extension
          specified with scext above, and if either one  exists,  it  will
          first  be  removed  before  adding  the  new extension.  If this
          option is not set, a default of .asc will be used.

   tbl0ext
          This is the default extension for files  created  with  the  Tbl
          command  if  tblstyle is set to 0 (default).  The file name will
          first be checked to see if it already has an extension of either
          .sc  or  the extension specified with scext above, and if either
          one exists, it will first  be  removed  before  adding  the  new
          extension.  If this option is not set, a default of .cln will be
          used.

   tblext This is the default extension for files  created  with  the  Tbl
          command  if tblstyle is set to tbl.  The file name will first be
          checked to see if it already has an extension of either  .sc  or
          the  extension  specified  with  scext  above, and if either one
          exists,  it  will  first  be  removed  before  adding  the   new
          extension.  If this option is not set, a default of .tbl will be
          used.

   latexext
          This is the default extension for files  created  with  the  Tbl
          command  if  tblstyle is set to latex.  The file name will first
          be checked to see if it already has an extension of  either  .sc
          or  the  extension specified with scext above, and if either one
          exists,  it  will  first  be  removed  before  adding  the   new
          extension.  If this option is not set, a default of .lat will be
          used.

   slatexext
          This is the default extension for files  created  with  the  Tbl
          command  if tblstyle is set to slatex.  The file name will first
          be checked to see if it already has an extension of  either  .sc
          or  the  extension specified with scext above, and if either one
          exists,  it  will  first  be  removed  before  adding  the   new
          extension.  If this option is not set, a default of .stx will be
          used.

   texext This is the default extension for files  created  with  the  Tbl
          command  if tblstyle is set to tex.  The file name will first be
          checked to see if it already has an extension of either  .sc  or
          the  extension  specified  with  scext  above, and if either one
          exists,  it  will  first  be  removed  before  adding  the   new
          extension.  If this option is not set, a default of .tex will be
          used.

   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 displayed, is set by curses(3) and
   may  be  overridden  by  setting  the  LINES  and  COLUMNS  environment
   variables, respectively.

   The  screen  has  two  cursors:  a  cell  cursor, indicated by either a
   highlighted cell or a ``<'' on the  screen,  and  a  character  cursor,
   indicated by the terminal's hardware cursor.

   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.

   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.  Unless otherwise noted, 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.

          b      Braille  enhancement mode.  See the braille section under
                 the Set command below for a complete description  of  how
                 to use this mode.  This option is not saved when saving a
                 file, to allow blind and sighted users  to  easily  share
                 files.  It is intended for use in a user's .scrc file.

          c      Current  cell highlighting.  If enabled, the current cell
                 is highlighted (using the terminal's  standout  mode,  if
                 available)  and  the  cell  pointer  ``<'' is turned off.
                 This is enabled by default.

          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  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.

          i      Automatic  insertion of rows/columns.  If this is enabled
                 and craction is set to move the cell cursor  either  down
                 or  to the right after entering data into a cell, and the
                 last cell in a row/column in the scrolling portion  of  a
                 framed  range was just filled, causing the cell cursor to
                 move outside of this range,  a  new  column/row  will  be
                 inserted,  thus  enlarging  the range and allowing you to
                 continue  entering  data  into  the  row/column   without
                 overwriting  the  frame (which may contain expressions of
                 some sort, such as totals).  If autowrap is also enabled,
                 it  will  take precedence, and a new row/column will only
                 be inserted after entering data in  the  very  last  cell
                 (bottom  right  corner)  of  the  scrolling  range.   The
                 default is no automatic insertion.

          w      Automatic wrap to next row/column.  If  this  is  enabled
                 and  craction  is set to move the cell cursor either down
                 or to the right after entering data into a cell, and  the
                 last  cell  in a row/column in the scrolling portion of a
                 framed range was just filled, causing the cell cursor  to
                 move  outside of this range, the cell cursor will move to
                 the first cell in the next row/column in this range.   If
                 this  would  also  take  the  cursor out of the scrolling
                 portion of the range, the  cursor  will  remain  in  last
                 edited  cell  instead, unless autoinsert is also enabled,
                 in which case a new row/column will be added so that  the
                 cursor can wrap.  The default is no autowrap.

          l      Autolabeling.   If enabled, using the define command (rd)
                 causes a label to be automatically generated in the  cell
                 to  the  left  of the defined cell.  This is only done if
                 the cell to the left is empty.  Default is enabled.

          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.
                 Also,  the  `+'  and  `-' keys will enter insert mode and
                 append a `+' or `-' to the existing contents of the cell,
                 allowing  the  user to easily add to or subtract from the
                 current  numeric  contents  of  the  cell.   The   cursor
                 controls  (^P, ^N, or any of the arrow keys) in this mode
                 will end a numeric entry if  the  entry  was  started  by
                 pressing  `+',  `-',  or  a digit.  Switching from insert
                 mode to edit mode  will  cause  the  cursor  controls  to
                 revert to their normal functions.

          o      Automatic   optimization  of  expressions.   If  this  is
                 enabled, expressions which evaluate  to  a  constant  are
                 automatically  optimized upon entry.  For example, if you
                 enter @pow(2,32) into a cell, the value  4294967296  will
                 be stored in that cell, whereas if optimization is turned
                 off, the calculated value  will  be  displayed,  but  the
                 actual  expression  will  be  stored in the cell instead.
                 This allows you to edit the  expression  instead  of  re-
                 entering  it  from  scratch  when you just want to make a
                 minor change.  Default is automatic optimization off.

          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  character  of  the
                 string  value is ``|'' for a centered string, ``<'' for a
                 leftstring  or  ``>''  for  a  rightstring  (see  below),
                 followed  by "string" for a constant string or {expr} for
                 a string expression.  A constant string may be  preceeded
                 with a backslash (`\').  In this case the constant string
                 will be used as a ``wheel'' to fill a column,  e.g.  "\-"
                 for a line in a column, and "\Yeh " for "Yeh Yeh Ye".  If
                 the cell has a numeric  value,  it  follows  as  [value],
                 which may be a constant or expression.

          $      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.

          r      Newline action.  This is a 3-way toggle which  determines
                 which  direction to move after pressing the RETURN key to
                 enter data into a cell.  It has the same effect as  using
                 the  set (S) command to set the value of craction.  After
                 selecting this option,  you  will  be  prompted  for  the
                 direction  you  want  to move.  Valid directions are down
                 (craction=1) and to the right (craction=2).  Pressing  j,
                 ^N,  or the cursor-down key will cause the cursor to move
                 down a cell each  time  you  press  the  RETURN  key  and
                 pressing  l,  the cursor-right key, or the space bar will
                 cause the cursor to move one cell to the right.  Pressing
                 the   RETURN   key   at  the  prompt  selects  no  action
                 (craction=0, which means that the cursor will  remain  in
                 the current cell).  No action is the default unless sc is
                 started with either the -R or -C option.  This option  is
                 ignored  if  the cell into which data is being entered is
                 not the current cell.

          s      Enable/disable color slop.  If a cell's label  string  is
                 wider  than  the column width, it will slop over into the
                 next cell to the right if that cell is  empty.   However,
                 if  that  cell  is  in  a  different color range than the
                 first, this slopover  will  be  disabled,  regardless  of
                 whether  the  colors  assigned  to  the  two  ranges  are
                 different or not.  If cslop is enabled, strings may  slop
                 over even if the next cell is in a different color range,
                 carrying their color with them, which may cause a  ragged
                 boundary between the ranges, but may allow the strings to
                 be seen in their entirety.  Cslop is disabled by default.

          x      Encryption.  See the -x option.

          z      Set newline action limits.  This option  sets  limits  to
                 the  newline  action  option  above.  When this option is
                 invoked, the row and  column  of  the  current  cell  are
                 remembered.   If  a  later  newline action would take the
                 current cell to the right of the remembered column,  then
                 the  current cell is instead moved to the first column of
                 the next row.  If a newline action would take the current
                 cell  below  the remembered row, then the current cell is
                 instead moved to the top row of the next column.

          C      Color.  This option enables color, and must be set before
                 any other color options, such as colorneg (color negative
                 numbers) or colorerr (color cells with errors), will have
                 an  effect.   On a slow connection, turning off color can
                 noticeably speed up screen updates.

          E      Color cells with errors.  Setting this option will  cause
                 all  cells  with  expressions  which evaluate to ERROR or
                 INVALID to be set to color 3.  Color must be enabled  for
                 this option to take effect.

          N      Color  negative  numbers.   When  this option is set, all
                 cells containing negative numbers will have  their  color
                 number incremented by one.  Cells with color 8 will cycle
                 back to color 1.  Color must be enabled for  this  option
                 to take effect.

          The  quick  numeric entry, newline action and set newline action
          limits options can be combined to  allow  very  quick  entry  of
          large  amounts  of  data.  If all the data to be entered is in a
          single row or column then setting the quick  numeric  entry  and
          the  appropriate  newline  action  will  allow the numbers to be
          entered without any explicit commands to  position  the  current
          cell or enter a number.

          If  the data entry involves several entries in each row for many
          rows, then setting the quick numeric entry option,  setting  the
          newline  action  to  move right after each entry and setting the
          newline action limits on the last column on which data should be
          entered  will allow the data to entered quickly.  An alternative
          to setting newline action limits is to  enclose  the  range  for
          entry  in  a  frame (see "Framed Ranges" below), and setting the
          autowrap option.  Setting autoinsert will  insert  new  rows  as
          needed  if the frame includes data at the bottom.  If necessary,
          columns which do not need data to be entered can be hidden  with
          the  z  command.   Similar arrangements can be made for entering
          several rows of data in each column.

   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 rf) 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; slatex to give a SLaTeX (Scandinavian LaTeX)
                 tabular environment; tex to  give  a  TeX  simple  tabbed
                 alignment  with  ampersands  as  delimiters; and frame to
                 give a tblstyle output for FrameMaker.

          pagesize=n
                 Set the page size for the  PageUp,  PageDown,  J,  and  K
                 commands.  If set to 0, the default is to move up or down
                 half the number of rows displayed on the  screen,  or  if
                 the current cell is in a framed range, half the number of
                 displayed rows in the scrolling region of that range.

          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.

          autoinsert/!autoinsert
                 Set/clear automatic insertion mode.

          autowrap/!autowrap
                 Set/clear autowrap mode.

          optimize/!optimize
                 Set/clear auto optimize mode.

          numeric/!numeric
                 Set/clear numeric mode.

          prescale/!prescale
                 Set/clear numeric prescale mode.

          extfun/!extfun
                 Enable/disable external functions.

          toprow/!toprow
                 Set/clear top row display mode.

          rndtoeven/!rndtoeven
                 Default: *.5 will be rounded  up  to  the  next  integer;
                 doing  a  'set  rndtoeven' will cause it to be rounded to
                 the closest even number instead (aka banker's  rounding).
                 Round-to-even  has  advantages  over the default rounding
                 for  some  applications.   For  example,  if  X+Y  is  an
                 integer, then X+Y = rnd(X)+rnd(Y) with round-to-even, but
                 not always with the  defaulting  rounding  method.   This
                 could  be an advantage, for example, when trying to split
                 an odd amount of money  evenly  between  two  people  (it
                 would   determine  who  gets  the  extra  penny).   Note:
                 rndtoeven only effects the @rnd and @round functions.  It
                 has  no  effect  on  how  a  number is rounded to fit the
                 display format of a cell.

          craction=n
                 Set the newline action.  n can be: 0 (default) to give no
                 action;  1  to  move  down after each entry; or 2 to move
                 right after each entry.

          rowlimit=n
                 Set the remembered limit for the maximum row below  which
                 the  current  cell  will  be moved to the top of the next
                 column if the newline action is set to move  the  current
                 cell  down.   n  can  be  -1  (default)  to  disable this
                 facility.

          collimit=n
                 Set the remembered limit for the maximum  column  to  the
                 right of which the current cell will be moved to the left
                 of the next row if the newline action is set to move  the
                 current  cell  right.   n  can be -1 (default) to disable
                 this facility.

          color/!color
                 Enable color.  This option must  be  set  for  any  other
                 color  options,  such  as  colorneg  or colorerr, to take
                 effect.  On a slow  connection,  turning  off  color  can
                 noticeably speed up screen updates.

          colorneg/!colorneg
                 Color  negative  numbers.   When  this option is set, all
                 cells containing negative numbers will have  their  color
                 number  increased  by one.  Cells with color 8 will cycle
                 back to color 1.  Color must be enabled for  this  option
                 to take effect.

          colorerr/!colorerr
                 Color  cells with errors.  Setting this option will cause
                 all cells with expressions which  evaluate  to  ERROR  or
                 INVALID  to be set to color 3.  Color must be enabled for
                 this option to take effect.

          cslop/!cslop
                 Enable color slop.  If a cell's  label  string  is  wider
                 than  the  column  width, it will slop over into the next
                 cell to the right if that cell  is  empty.   However,  if
                 that  cell  is in a different color range than the first,
                 this slop over will be disabled,  regardless  of  whether
                 the  colors  assigned  to the two ranges are different or
                 not.  If cslop is enabled, strings may slop over even  if
                 the  next  cell  is  in a different color range, carrying
                 their color with them, which may cause a ragged  boundary
                 between  the ranges, but may allow the strings to be seen
                 in their entirety.  Cslop is disabled by default.

          The following Set options are considered  personal  preferences,
          or  are  terminal  dependent,  and  are therefore not saved when
          saving a file, but are instead intended  for  use  in  a  user's
          .scrc file.

          braille/!braille
                 Set/clear   braille   enhancement   mode.   When  braille
                 enhancement mode is set, the cursor behaves in  a  manner
                 that makes the use of sc much easier when using a braille
                 display.  In spite of its name, this mode also works well
                 with screen readers such as SpeakUp, and can even be used
                 by sighted users to make cutting and  pasting  using  the
                 screen program much easier.

                 There are actually two different braille modes.  When the
                 braille option is set, the C command, which  is  normally
                 used  to set colors, will instead change from one braille
                 mode to the other.  If it is desired to set/change colors
                 so  you  can  share files with others not using a braille
                 display, braille  mode  will  have  to  be  switched  off
                 temporarily,  and  then  switched back on after the color
                 operation is done.

                 When the braille option is set, the default braille  mode
                 will  cause  the cursor to be positioned at the left edge
                 of the current cell, while  the  alternate  braille  mode
                 will  cause  the  cursor to be placed at the beginning of
                 the top line, which will contain information such as  the
                 current  cell  address,  contents of the cell, and column
                 formatting information.  The column names  will  also  be
                 moved  to  the  left  edge of their respective columns in
                 order to remain aligned with the cursor as  it  moves  up
                 and down the column.

                 In either mode, the cursor will be placed in the top line
                 when editing a line, except when  switching  to  navigate
                 mode,  in  which case the cursor will be placed in either
                 the current cell (default braille  mode)  or  the  second
                 line,  where  the  cell  address or default range will be
                 displayed (alternate braille mode).

                 Whenever a message is displayed on the second line,  such
                 as  an  error  message or prompt for further information,
                 both modes will cause the cursor  to  be  placed  at  the
                 beginning of that message.  After this message goes away,
                 the cursor will  revert  to  its  former  behavior.   The
                 easiest   way  to  make  this  message  go  away  without
                 effecting anything, except  in  the  cases  where  it  is
                 asking  the  user  for  more information, is to press CC,
                 which effectively changes modes twice, with a net  effect
                 of leaving sc in the original mode.

          locale/!locale
                 If  locale  support is compiled into sc, this option will
                 cause certain locale-dependent  behaviors,  such  as  the
                 display   of   numbers  and  the  determination  of  word
                 boundaries for some operations in edit mode.   Note  that
                 if this option is set and the environment variable LC_ALL
                 is unrecognized, unset, or set  to  either  ``POSIX''  or
                 ``C'', commas in format commands will be ignored.

          cellcur/!cellcur
                 Set/clear current cell highlighting mode.  This option is
                 included  here  because  it  is  likely  to  be  terminal
                 dependent  and/or a user preference, and therefore is not
                 saved when saving a file.

          scrc   It tells sc to also read the file .scrc  in  the  current
                 directory  when  starting.   Settings  in  this file will
                 override those  in  $HOME/.scrc  but  may  themselves  be
                 overridden  by  command line options.  Setting this could
                 be a potential security risk, since starting sc  with  an
                 unknown   .scrc   could   potentially  execute  arbitrary
                 commands.  This risk is probably  very  slight,  since  a
                 spreadsheet  program  is not likely to be run in just any
                 directory, and should never be run as root.

   Cursor Control Commands

   ^A     Go to cell A0 (same as HOME).

   ^P     Move the cell cursor up to the previous row.

   ^N     Move the cell cursor down to the next row.

   ^H     Move the cell cursor backward one column.

   SPACE  Move the cell cursor forward one column.  When in navigate mode,
          if a range is highlighted, insert the highlighted range into the
          command line, followed by a space, while remaining  in  navigate
          mode.   This  is  useful  when  entering  copy,  move,  or frame
          commands,  for  example,  which  accept  more  than  one   range
          argument.

   h, j, k, l
          These  are  alternate, vi-compatible cell cursor controls (left,
          down, up, right).  Space is just like l (right).

   H, J, K, L
          These move the cursor by half pages (left, down, up, right).  If
          pagesize  is  nonzero,  up/down paging will be by pagesize rows,
          instead.

   ^F, ^B Same as J and K above.

   PAGE-DOWN PAGE-UP
          Same as J and K above.

   TAB    If the character cursor  is  on  the  top  line,  TAB  tries  to
          complete  a range name if the character immediately preceding it
          is alphanumeric or ``_'', and starts a range if not (see below).
          Otherwise, move the cell cursor forward one column.

   HOME   Go to cell A0.

   END    Same as ^E (see below).

   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.  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 combination 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.

   g      Go to  a  cell.   sc  prompts  for  a  cell's  name,  a  regular
          expression  surrounded by quotes, or a number.  If a cell's name
          such as ae122 or 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.

          You  can  also  search  formatted  numbers  or expressions using
          regular expressions by  preceding  the  opening  quotes  of  the
          regular  expression  with  a  ``#'' (for formatted numbers) or a
          ``%'' (for expressions).  These  are  handy  for  searching  for
          dates  within a specified range or cells which reference a given
          cell, for  example,  although  they  are  somewhat  slower  than
          searching  through  ordinary  strings, since all numbers must be
          formatted or  expressions  decompiled  on  the  fly  during  the
          search.

          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.  You may also go to a cell with an ERROR (divide
          by zero, etc. in  this  cell)  or  INVALID  (references  a  cell
          containing  an ERROR).  g error will take you to the next ERROR,
          while g invalid take you  to  the  next  INVALID.   The  last  g
          command  is  saved,  and can be re-issued by entering g<return>.
          You can also repeat the last search by pressing n.

          An optional second argument is available whose  meaning  depends
          on  whether you're doing a search or jumping to a specific cell.
          When doing a search, the second argument specifies  a  range  to
          search.   When  jumping  to a specific cell, the second argument
          specifies which cell should be in the upper lefthand  corner  of
          the  screen,  if  possible,  which  allows  you  to position the
          destination cell where you want it on the screen.

   ^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  direction  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.

          If  ^E is pressed twice in succession, or if it is pressed after
          another ^E or a ^Y, it  will  cause  the  screen  to  scroll  up
          without  moving  the  cell  cursor,  unless  the  cell cursor is
          already at the top of the screen, in which case, it will  remain
          at the top of the visible screen.

   ^Y     Causes the screen to scroll down without moving the cell cursor,
          unless the cell cursor is already at the bottom of  the  screen,
          in  which  case,  it  will  remain  at the bottom of the visible
          screen.

   mx     Mark the current cell.  sc will prompt for a lowercase letter to
          be  used  as  a mark specifier.  Marked cells may be used as the
          source for the c (copy a marked cell) command, or as the  target
          of  a  ` or ' (go to marked cell) command.  In addition to cells
          marked with lowercase letters, sc also automatically  marks  the
          last  nine cells that have been edited with the numbers 1-9, and
          the current cell being edited  with  the  number  0.   When  not
          editing  a  cell,  marks 0 and 1 usually refer to the same cell,
          unless the last edit was begun in one cell, but the cell address
          was changed before pressing the RETURN key, or the last edit was
          aborted prematurely.

   `x     Jump to a  previously  marked  cell.   If  the  target  cell  is
          currently on the screen, sc will simply jump to the target cell,
          making it current.  Otherwise, sc will  attempt  to  center  the
          cell  on  the screen, if possible.  As a special case, following
          the ` with another ` will return you to the  cell  you  were  in
          before  the last g, ', `, *, or ^E (or END key) was used to jump
          to another cell.

   'x     Jump to a previously marked cell.  ' works just like ` ,  except
          that  '  will  attempt  to  restore  the marked cell to the same
          position on the screen as when it was marked.  It does  this  by
          remembering  which cell was in the upper left hand corner of the
          screen at the time the mark was set, and restoring that cell  to
          its  original position.  As a special case, following the ' with
          another ' will return you to the cell you  were  in  before  the
          last  g, ', `, *, or ^E (or END key) was used to jump to another
          cell, and will also try to position that cell on the  screen  in
          the same position as when you left it.

   z<RETURN>
          Move  the  current row to the top of the screen.  If the current
          row is in a framed range, move the current row to the top of the
          scrolling region.

   z.     Move the current row to the center of the screen.

   z|     Move the current column to the center of the screen.

   zc     Center the current cell both horizontally and vertically.

   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 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  ``='').   If  you want to begin
          entering an expression in the current  cell,  but  you  want  to
          start  out  in  navigate  mode (e.g. to enter cell addresses, or
          sums of ranges using ``@sum''), use the  ``+''  command  instead
          (see below).

   <      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 centered in the
          column.

   >      Enter  a  label string into the current cell to be flushed right
          against the right edge of the cell.

   {      Left justify the string in the current cell.

   |      Center the string in the current cell.

   }      Right justify the string in the current cell.

   F      Enter a format string into the current cell.  This format string
          overrides the precision specified with the f command unless & is
          present in the fractional part of the format string (see below).
          The  format only applies to numeric values.  There are two types
          of format strings allowed: standard numeric  and  date.   (Note:
          these  format  strings  may  also  be used with the f command to
          create user-defined format types.)  The following characters can
          be used to build a standard numeric format string:

          #      Digit  placeholder.   If  the  number has fewer digits on
                 either side of the  decimal  point  than  there  are  `#'
                 characters  in  the  format, the extra `#' characters are
                 ignored.  The number is rounded to the  number  of  digit
                 placeholders  as  there  are  to the right of the decimal
                 point.  If there are more digits in the number than there
                 are  digit  placeholders  on the left side of the decimal
                 point, then those digits are displayed.

          0      Digit placeholder.  Same  as  for  `#'  except  that  the
                 number  is  padded  with  zeroes  on  either  side of the
                 decimal point.  The number of zeroes used in  padding  is
                 determined  by the number of digit placeholders after the
                 `0' for digits on the left side of the decimal point  and
                 by  the  number  of digit placeholders before the `0' for
                 digits on the right side of the decimal point.

          .      Decimal point.  Determines how many digits are placed  on
                 the  right  and  left  sides  of the decimal point in the
                 number.  If locale is set,  the  decimal  point  for  the
                 user's  current  locale  will  be  used when formatting a
                 number.  Note that numbers smaller than 1 will begin with
                 a  decimal  point  if  the left side of the decimal point
                 contains  only  a  `#'  digit  placeholder.   Use  a  `0'
                 placeholder to get a leading zero in decimal formats.

          %      Percentage.   For  each  `%' character in the format, the
                 actual number gets multiplied by 100 (only  for  purposes
                 of  formatting -- the original number is left unmodified)
                 and the `%' character is placed in the same  position  as
                 it is in the format.

          ,      Thousands separator.  The presence of a `,' in the format
                 (multiple commas are  treated  as  one)  will  cause  the
                 number  to be formatted with a `,' separating each set of
                 three digits in the  integer  part  of  the  number  with
                 numbering  beginning  from  the right end of the integer.
                 If locale is set, the thousands separator for the  user's
                 current  locale  will  be used in place of the comma.  If
                 the environment variable LC_ALL is  unset,  unrecognized,
                 or  is  set  to  ``POSIX''  or  ``C'',  any commas in the
                 format string will be ignored.

          &      Precision.   When  this  character  is  present  in   the
                 fractional  part  of  the  number,  it is equivalent to a
                 number of 0's equal to the  precision  specified  in  the
                 column  format command.  For example, if the precision is
                 3, `&' is equivalent to `000'.

          \      Quote.  This character causes the next  character  to  be
                 inserted  into  the  formatted  string  directly  with no
                 special interpretation.

          E- E+ e- e+
                 Scientific format.  Causes the number to be formatted  in
                 scientific notation.  The case of the `E' or `e' given is
                 preserved.  If the format uses a `+', then  the  sign  is
                 always  given for the exponent value.  If the format uses
                 a `-', then the sign is  only  given  when  the  exponent
                 value  is  negative.   Note  that  if  there  is no digit
                 placeholder following the `+' or `-', then that  part  of
                 the  formatted  number  is  left  out.  In general, there
                 should be one or more digit placeholders after the `+' or
                 `-'.

          ;      Format  selector.   Use  this  character  to separate the
                 format into two distinct formats.  The format to the left
                 of  the `;' character will be used if the number given is
                 zero or positive.  The format to the  right  of  the  `;'
                 character is used if the number given is negative.

          Some  example  formats  are  integer  (``0''  or  ``#''),  fixed
          (``0.00''),  percentage  (``0%''   or   ``0.00%''),   scientific
          (``0.00E+00''), and currency (``$#,0.00;($#,0.00)'').

          Date  format  strings  are identified by the presence of a ^D in
          the first postition.  If this is present, the remainder  of  the
          string  is passed to the strftime() function, and therefore uses
          the  same  conversion  specifiers  as  strftime().    For   more
          information  on  conversion  specifiers for date format strings,
          see the man page for strftime(3).

   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 expression  associated  with
          the cell.  The editing in this mode is vi-like.

          ^H     Move back a character

          ^V, v  Enter  navigate  mode.   This mode allows you to navigate
                 the  spreadsheet  while  editing  a  command.   When   in
                 navigate  mode,  v  will  insert the numeric value of the
                 current cell, if any, into  the  command  line,  instead,
                 while  ^V  will  return  to  the  previous mode (like the
                 ESCAPE key).

          ^W     Insert the expression attached to the current  cell  into
                 the command line.  If there is none, the result is ``?''.
                 This only works while in navigate mode.

          ^A     In navigate mode, go to cell A0.  When  not  in  navigate
                 mode, jump to the beginning of the line instead.

          ^E     Jump  to the end of the line.  Unlike ``$'' (below), this
                 can also be used from insert mode.

          TAB    If the character  immediately  preceding  the  cursor  is
                 alphanumeric  or  ``_'', TAB tries to find a match in the
                 list of range names, and if one is found, the  name  will
                 be  completed on the command line.  If there are multiple
                 matches,  pressing  TAB  repeatedly  without  any   other
                 intervening  keys  will  cycle  through  all of the valid
                 matches.  If  the  character  immediately  preceding  the
                 cursor  is not alphanumeric or ``_'', TAB defines a range
                 of cells via the cursor control  commands  or  the  arrow
                 keys.  Pressing TAB automatically switches sc to navigate
                 mode if you haven't already done so using the ^V command,
                 and  the range is highlighted, starting at the cell where
                 you typed TAB, and continuing through the  current  cell.
                 Pressing  TAB  again  causes  the highlighted range to be
                 inserted into the command line, the  highlighting  to  be
                 turned  off,  and the previous mode to be restored.  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, if the first argument to
                 the command is a range, you don't need to press the first
                 TAB  to  begin defining a range starting with the current
                 cell.

          :      Synonym for TAB, when in navigate mode.

          ` '    In navigate mode, go to marked cell.

          *      In navigate mode, go to note linked to current cell.

          +      Forward through history (same as j)

          -      Backward through history (same as k)

          ESC    Done editing

          CR     Save.  When in navigate mode,  insert  the  name  of  the
                 current  cell  (the  one  at  the  cell  cursor) into the
                 command line.  This is useful when  entering  expressions
                 which refer to other cells in the table.

          $      Goto last column

          %      Goto matching parenthesis

          .      Insert  current  dot buffer.  When in navigate mode, this
                 is a synonym for : or TAB.

          ;      Repeat the last f, F, t, or T command.

          ,      Repeat the last f, F, t, or T command, but in the reverse
                 direction.

          ~      Change the case of the character under the cursor.

          /      Search backwards for a string in the history
                 ESC  edit the string you typed
                 CR   search
                 ^H   backspace

          ?      Search  forward  for  a  string in the history (see ``/''
                 above)

          0      Goto column 0

          B      Move back  a  word.   Like  b,  except  words  are  space
                 delimited only.

          C      Change  to  end  of line (delete first, then enter insert
                 mode)

          D      Delete to end of line

          F      Find the next char typed, moving backwards in the line

          G      Go to the  end  of  history,  i.e.,  to  the  line  being
                 currently entered

          I      Insert at column 0; ESC revert back to edit mode

          N      Repeat the last search in the opposite direction

          P      Insert the most recently deleted text before the cursor

          R      Replace mode; ESC revert back to edit mode

          T      Goto a char, moving backwards in the line

          W      Forward a word.  Like w, except words are space delimited
                 only.

          X      Delete the char to the left

          a      Append after cursor; ESC revert back to edit mode

          b      Move back a word

          c      Change mode; ESC revert back to edit mode.   In  navigate
                 mode, insert color range which includes the current cell.

          d      Delete ...
                 0    delete to beginning of line
                 $    delete to end of line
                 b    back word
                 e    delete to end of word
                 f    forward (right)
                 h    back char
                 l    forward
                 t    delete forward up to a given char (next char typed)
                 w    delete next word forward

          e      Forward to next end-of-word

          f      Find  the  next char typed.  In navigate mode, insert the
                 outer frame range which includes the current cell.

          g      In navigate mode, allows you to `goto' a cell  or  range,
                 just  like  the  regular  goto command.  Ignored in edit,
                 insert or replace modes.

          h      Move left a char

          i      Insert before cursor; ESC revert back to edit mode

          j      Forward through history (same as +)

          k      Backward through history (same as -)

          l      Move right a char

          n      Repeat the last search (find the next match)

          o      When highlighting a range in navigate mode, move  to  the
                 opposite corner of the highlighted range.

          p      Insert the most recently deleted text after the cursor

          q      Stop editing

          r      Replace  char.   In navigate mode, insert the inner frame
                 range which includes the current cell.

          s      Delete current char and enter  insert  mode  (stands  for
                 substitute)

          t      Goto a char

          u      Undo

          w      Forward a word

          x      Delete the current char (moving to the right)

          y      Copies to the delete buffer without deleting.  Use like d
                 (above).

   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.  SEE e ABOVE.

   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.

   Note that the descriptions of the ``+'' and ``-''  commands  below  may
   seem  very  confusing  at  first, but once they're understood, they can
   facilitate the rapid entry of expressions which add and subtract  large
   numbers  of  cells  and  sums  of  ranges  of  cells, so read them over
   carefully several times until you understand them.

   "      Specify a named buffer for the  next  yank/delete/pull  command.
          Buffers  are  named  with  a  single  character.   Buffers ``a''
          through ``z'' are general purpose buffers, buffers ``1'' through
          ``9''  hold the last nine deletions, with buffer ``1'' being the
          most recent, and buffer ``0''  holds  the  last  cell  or  range
          yanked.   Buffer  ``"''  is  the default buffer, which holds the
          last cell or range that was deleted or yanked.

   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 the pull commands (see below).

   mx     Mark the current cell.  sc will prompt for a lowercase letter to
          be used as a mark specifier.  Marked cells may be  used  as  the
          source for the copy command, or as the target of a ` or ' (go to
          marked cell) command.

   cx     Copy a marked cell to the current cell, adjusting row and column
          references in its numeric or string expression, if any.  sc will
          prompt for the name of the cell to be copied,  which  may  be  a
          lowercase  letter  specified  previously  with  the m command, a
          digit 1-9 to reference one of the last nine edited cells (0 will
          reference  the  last cell in which an edit was begun, regardless
          of whether  the  edit  was  completed  or  not),  or  ``.''   to
          reference  the  current cell, which, as a special case, is to be
          used as a source rather than a destination, and is to be  copied
          into  a  range  which includes the current cell.  When ``.''  is
          specified, the current cell is set as the default  source  range
          for  the  range  copy (rc) command, and then the copy command is
          entered into the command line and sc switches to navigate  mode.
          Moving  the  cell  cursor  will  then  highlight the destination
          range.  After the desired range is highlighted, press RETURN  to
          execute the copy.

   +      If  not  in  numeric  mode,  add  the  current  numeric argument
          (default 1) to the value of the current cell.  The current value
          of  the  cell  must  not  be  an expression.  In numeric mode, +
          switches to insert mode and  appends  a  ``+''  to  the  current
          expression  or  value,  if  any,  which  makes it easy to add to
          existing data.

          In navigate mode, + inserts the current cell  address  into  the
          line,  followed  by  another +, and sc remains in navigate mode,
          unless a range is highlighted.  If a range  is  highlighted  and
          the  character  immediately  preceding  the cursor is a ``+'' or
          ``-'', or the cursor is at the beginning  of  an  empty  ``let''
          expression,  the  string ``@sum('' will be inserted, followed by
          the highlighted range,  followed  by  ``)+''.   If  a  range  is
          highlighted  and  the character immediately preceding the cursor
          is not a ``+'' or ``-'', and the cursor is not at the  beginning
          of  an  empty  ``let'' expression, the highlighted range will be
          inserted, followed by  ``)+''.

   -      If not in numeric mode, subtract the  current  numeric  argument
          (default  1)  from  the  value of the current cell.  The current
          value of the cell must not be an expression.  In numeric mode, -
          switches  to  insert  mode  and  appends  a ``-'' to the current
          expression or value, if any, which makes  it  easy  to  subtract
          from existing data.

          In  navigate  mode,  - inserts the current cell address into the
          line, followed by another -, and sc remains  in  navigate  mode,
          unless  a  range  is highlighted.  If a range if highlighted and
          the character immediately preceding the cursor  is  a  ``+''  or
          ``-'',  or  the  cursor  is at the beginning of an empty ``let''
          expression, the string ``@sum('' will be inserted,  followed  by
          the  highlighted  range,  followed  by  ``)-''.   If  a range is
          highlighted and the character immediately preceding  the  cursor
          is  not a ``+'' or ``-'', and the cursor is not at the beginning
          of an empty ``let'' expression, the highlighted  range  will  be
          inserted, followed by  ``)-''.

   RETURN If  you  are  not  editing  a cell (top line is empty), pressing
          RETURN will make sc enter insert mode.  At this  point  you  may
          type any valid command or press ESC once to edit.

   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.

   ZZ     Save  the  current database into a file if it has been modified,
          and then quit.  This is like the P command  followed  by  the  q
          command,  except  that the default filename will be used instead
          of prompting you for one, and the file will only be saved if  it
          was modified.  If there is no default filename, an error message
          will be displayed, and no action taken.

   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  delimiters are a colon (:) for
          style 0 or tbl and an ampersand (&) for style latex or tex.

   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 operation is really what you want.

   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.  There are two different kinds of macros that can be
          used with sc: simple macros, which  are  stored  in  plain  text
          files,  and  advanced  macros,  which  are executable files, and
          which can be written in the language of your  choice.   Advanced
          macros are only available on systems that support pipes.

          Simple  macros  are interpreted by sc's internal parser, and use
          the  same  commands  used  to  enter  data  and  perform   other
          operations  (the  single key commands are shortcuts which switch
          to input mode after first entering the  beginning  of  the  full
          command  for you).  These are also the same commands found in sc
          files created with the Put command.  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 written by the Put command.

          Advanced macros use executable files that are started by sc as a
          child  process  with  stdin and stdout redirected back to sc for
          bidirectional communication.  Special commands are available for
          requesting   information   such  as  cell  contents,  formatting
          information,  or  the  current  location  of  the  cell  cursor.
          Commands  are  written  to  stdout,  and responses are read from
          stdin.  To use advanced macros, the filename must be preceded by
          a  | (the pipe symbol), and the file must be executable.  If the
          pathname set with the Define command begins with a |, all  files
          in  that  path  will be executed as advanced macros.  It is also
          possible to include a filename as part of the  path  when  using
          advanced  macros,  which  allows you to put multiple macros in a
          single file, and  use  the  Run  command  to  add  command  line
          arguments  or  options  to  determine which macro should be run.
          Advanced macros are relatively new, and documentation  is  still
          incomplete.   This  feature  will probably be enhanced in future
          releases.

   A      Specify a macro to be automatically  run  whenever  the  current
          sheet is reloaded from a file.

   D      Define a path for the Run command to use (see above).

   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
   interpreted as a UNIX command, as above.

   Row and Column Commands
   These  are  two-letter  commands  which  can  be used on either rows or
   columns.  The exceptions  are  the  f  command,  which  only  works  on
   columns,  and  therefore  doesn't  require  a  second letter, and the p
   command which, in addition to operating on rows or columns, has several
   other  options  for  merging the data in directly, without opening up a
   new row or column.  There are also a few special cases  where  pressing
   the  same  letter  twice will affect only the current cell instead of a
   row or column (except for ZZ, which is a special case all its own).

   In all of the remaining cases, the second letter of the command will be
   either  r  or c, depending on whether the operation should be performed
   on rows or columns, respectively (additional options for the p  command
   and  the double letter cases are listed below).  A small menu lists the
   choices for the second letter when you type the first letter of one  of
   these commands.

   Alternatively,  you may define a range of rows or columns by moving the
   cell cursor, either a cell at a time, or by pages (roughly 1/2  screen,
   unless  the  pagesize option has been set), but this only works for the
   d, y, and Z commands.  Vertical cursor movement will begin highlighting
   rows,  and  horizontal  movement  will highlight columns.  Pressing the
   RETURN key will then perform the  chosen  operation  on  the  specified
   rows/columns.

   Commands  which 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).  Commands which create new rows or  columns  will  include
   all  newly  created  cells in the same ranges (named, framed, color, or
   those used in expressions) as their counterparts in the current row  or
   column.   This  can  sometimes  be  a  significant factor when deciding
   whether to use ir/ic or or/oc.

   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.   Inserting
          rows while the cell cursor is in a framed range will only effect
          rows in that range, leaving all  rows  to  the  left  and  right
          untouched.

   or, oc Open a new row (column).  These commands work like the ir and ic
          commands, except that the new  row  (column)  will  be  inserted
          after the current row (column) instead of before it.

   ar, ac Append  a new row (column) immediately following the current row
          (column).  It is initialized as  a  copy  of  the  current  one.
          Appending  rows  while the cell cursor is in a framed range will
          only effect rows in that range, leaving all rows to the left and
          right untouched.

   dr, dc, dd
          Delete  the  current  row (column).  dd deletes the current cell
          (i.e., it is a synonym for x).  Deleting  rows  while  the  cell
          cursor is in a framed range will only effect rows in that range,
          leaving all rows to the left and right untouched.

   yr, yc, yy
          Yank a copy of the current row (column) into the  delete  buffer
          without  actually  deleting  it.   yy  yanks  the  current  cell
          (similar to x, but without actually deleting the contents of the
          cell).   Yanking rows while the cell cursor is in a framed range
          will only copy the portion of each row contained in that  range,
          while ignoring everything outside the range.

   pr, pc, pp, pm, px, pt, pC, p.
          Pull  deleted rows/columns/cells back into the spreadsheet.  The
          last set of cells that was deleted or yanked 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.
          pp  (paste)  does  not insert rows or columns; it overwrites the
          cells beginning at the current cell cursor location.  pm (merge)
          merges  the  cells  in  at the current cell cursor location, but
          does not  erase  the  destination  range  first  like  pp.   The
          difference  between  pp  and  pm  is  similar  to the difference
          between the Get and Merge commands.  pf (format) works  like  pm
          except  that  only  cell  formatting  information  is merged in,
          leaving the actual data untouched.  This makes it easy  to  copy
          cell  formats  from one part of the spreadsheet to another, such
          as when expanding an existing spreadsheet file.   px  (exchange)
          copies  the  contents  of  the  delete  buffer  into  the  range
          beginning  at  the   current   cell   cursor   location,   while
          simultaneously  copying the contents of this range back into the
          delete buffer, replacing its current contents.   pt  (transpose)
          overwrites  the  cells  beginning  at  the  current  cell cursor
          location like pp, but  transposes  rows  for  columns  and  vice
          versa.  pC (copy) works like pp, except that all cell references
          are adjusted in the same way that they are for the copy command.
          p.   is the same as pC, except that it switches to navigate mode
          and allows you to define the destination range to be used.  This
          works  like  the  copy  command in that if the source range (the
          contents of the delete buffer) is a single row, column, or cell,
          multiple copies may be made.

   vr, vc, vv
          Remove  expressions  from  the  affected rows (columns), leaving
          only the values which were in the cells before the  command  was
          executed.   When  used  in  a  framed range, vr only affects the
          portion of the the row inside the range, leaving the rest of the
          row  unchanged.   vv  only  affects  the contents of the current
          cell.

   Zr, Zc, ZZ
          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 still be hidden when you reload
          the spreadsheet.  Hidden rows or columns are not printed by  the
          W  command.  The ZZ command is a special case.  It does not hide
          anything.  Instead, the file will be saved, if modified, and  sc
          will exit.  See ZZ above, under File Commands.

   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.  This command has only a
          column version (no second letter).  You may  change  the  column
          width  by pressing the h, <, or cursor left key to reduce it, or
          the l, >, or cursor right key to increase it.  Likewise, you may
          change  the  precision  (the  number of digits to follow decimal
          points) by pressing the j, -, or cursor down key to  reduce  it,
          or  the  k,  +,  or  cursor up key to increase it.  You may also
          change the format type for the column by pressing any digit.  If
          the  f  command is preceded by a numeric argument, that argument
          will determine how many columns  should  be  changed,  beginning
          with  the  current  column,  and  in the case of incrementing or
          decrementing the width or precision of the columns, each  column
          will be incremented or decremented separately, regardless of its
          initial values.  Several formatting operations may be  performed
          in sequence.  To leave the formatting command, simply press ESC,
          ^G, q, or RETURN .

          Alternatively, you may press SPACE to get the format command  in
          the  top  line  and  enter all three values directly.  In order,
          these are: the total width in  characters  of  the  column,  the
          precision,  and  the  format type.  Format types are 0 for fixed
          point, 1 for scientific notation, 2 for engineering notation,  3
          for  dates  with  a  two digit year, and 4 for dates with a four
          digit year.  Values are rounded off  to  the  least  significant
          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.

          You  can  also  create your own format types by pressing = after
          the f command, followed by any digit (see the  F  command  above
          under  Cell  Entry and Editing Commands for a description of how
          to build a format string).  Format  numbers  0  through  4  will
          supersede  the  built-in format types, while numbers 5 through 9
          will supplement them.  User defined format types may be used  in
          the same way as the built-in types.  For example, the command

                 format 5 = "#,0.& ;(#,0.&)"

          will  define  a  currency  format  which may then be assigned to
          column C, for example, with the command

                 format C 10 2 5

   @myrow, @mycol
          Are functions that return the row or column of the current  cell
          respectively.   ex:  The  cell  directly  above  a cell in the D
          column could then be  accessed  by  @nval("d",@myrow-1).   NOTE:
          @myrow and @mycol can't be used in specifying ranges.

   @lastrow, @lastcol
          These  return  the  last  row  and  column  of  the spreadsheet,
          respectively.  They are useful for macros designed to default to
          the whole spreadsheet.

   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  begin  with  ``r''; the second letter of the
   command indicates which command.  A small menu lists  the  choices  for
   the  second  letter  when  you  type  ``r''.   sc  prompts  for  needed
   parameters for each command.  Phrases surrounded by square brackets  in
   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 rd command (see below).  Range name prompts require either
   an  explicit  range such as A10:B20, or a range name previously defined
   with a rd 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  or  ^N)  or  the  arrow keys.  The cells in the
   default range are highlighted (using the terminal's standout  mode,  if
   available).

   rx     Clear a range.  Cells cleared with this command will be saved in
          the delete buffer, and may be recalled  with  any  of  the  pull
          commands.

   ry     Yank  a  range.  Like rx, cells yanked with this command will be
          saved in the delete buffer, and may be recalled with any of  the
          pull  commands.   This command differs from rx, however, in that
          the original cells will not be cleared.  Although  this  command
          may  be  used to copy a range of cells, it treats all references
          as fixed.  Use rc if you want references to be relative  to  the
          cell which contains them unless specified otherwise, either with
          the @fixed operator or using the $ character in the reference to
          the cell.

   rc     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.

          If  the  source  range  is omitted (second argument), the source
          range from the last copy command will be used, unless a range is
          currently  highlighted, in which case the highlighted range will
          be copied instead.  If both the  source  range  and  destination
          range  are  omitted,  the  current  cell  will  be  used  as the
          destination, unless a range is currently highlighted,  in  which
          case  the  highlighted  range will serve as the destination, and
          the source range from the last copy command will be copied  into
          that destination.

   rm     Move  a  source range to a destination range.  This differs from
          deleting a range with rx and pulling it back in with pm in  that
          any  expressions  that reference a cell in the range to be moved
          will reference the cell at  its  new  address  after  the  move.
          Unlike  the  rc  command,  the destination of a move is a single
          cell, which will be the upper  lefthand  corner  of  the  source
          range after the move.

   rv     Values  only.  This command removes the expressions from a range
          of cells, leaving just the values of the expressions.

   rs     Sort a range.  The rows in the specified range  will  be  sorted
          according  to  criteria  given  in  the  form  of  a  string  of
          characters.   This  string,  enclosed  in  double  quotes,   may
          comprise  a  single criterion or multiple criteria in decreasing
          order of precedence.  Each criterion has  three  parts,  all  of
          which  are  mandatory.   The  first  part is a single character,
          which must be either + or -, which specifies  whether  the  sort
          should  be  done in ascending or descending order, respectively.
          The second part, which is  also  a  single  character,  must  be
          either # or $, and is used to specify whether the sort should be
          based  on  the  numeric   portion   or   the   string   portion,
          respectively,  of  the cells being used for the comparison.  The
          third part may be either one or  two  characters,  and  must  be
          alphabetic  (case  insensitive),  and specifies the column to be
          used when making the comparisons.  This column must  be  in  the
          range being sorted.  Any number of criteria may be concatenated,
          and will be used in the order specified.   If  no  criteria  are
          specified,  the  default behavior is to sort in ascending order,
          first by string and then by number, using the leftmost column of
          the  range  being  sorted.  This is equivalent to specifying the
          sort criteria to be " +$a+#a ", where both a's are  replaced  by
          the name of the leftmost column of the range being sorted.

   rf     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 negative.  To fill all cells with  the  same  value,
          give an increment of zero.

   r{     Left justify all strings in the specified range.

   r}     Right justify all strings in the specified range.

   r|     Center all strings in the specified range.

   rd     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 Put command.  Names
          defined may be any combination of  alphanumeric  characters  and
          `_'  as  long  as the name isn't a valid cell address.  Thus, x,
          H2SO4, and 3rdDay are all valid names, but H2 is not.

   rl     Use this command to lock the current cell or a range  of  cells,
          i.e.  make  them  immune  to any type of editing.  A locked cell
          can't be changed in any way until it is unlocked.

   rU     This command is the opposite of the rl command and thus  unlocks
          a locked cell and makes it editable.

   rS     This  command  shows lists of the currently defined range names,
          framed ranges, and color definitions and ranges, one  after  the
          other.   The  output  of this command will be piped to less.  If
          the environment variable PAGER is set,  its  value  is  used  in
          place of less.

   ru     Use this command to undefine a previously defined range name.

   rF     Use  this command to assign a value format string (see the ``F''
          cell entry command) to a range of cells.

   rr     This command is  used  for  creating,  modifying,  and  deleting
          framed  ranges.   A  framed  range, is one which has a number of
          rows or columns specified at the top, bottom, left, and/or right
          (the  frame) which must remain onscreen whenever the cell cursor
          is within that range.  In other words, a frame  consists  of  an
          outer range and an inner range, where the inner range is allowed
          to scroll within the outer range.  Once a frame is defined,  the
          inner  range  may  be resized, but the outer range remains fixed
          unless rows or columns are added or deleted within the range.

          When this command is invoked, you will be prompted for the  type
          of  frame-related  action  you  would  like to perform.  You may
          select an option from the list by typing its first letter.

          The options are top, bottom, left, right, all, and unframe.   If
          you choose top, bottom, left, or right, you will be prompted for
          a range and number of rows/columns.  The range may be omitted if
          the  cell  cursor  is  in  a previously defined framed range, in
          which case that range's outer range will be used  instead.   The
          number  of  rows/columns  will  set  or  adjust the width of the
          corresponding side of the frame.  If all of these widths are set
          to  zero,  the  frame  will  be  undefined  (same as the unframe
          command).

          If you choose all, you will be prompted for an outer  range  and
          an inner range, in which case the inner range will scroll within
          the outer range, and any rows or columns outside  of  the  inner
          range,  but inside the outer range will be part of the ``frame''
          that is to remain onscreen.  The outer range may be  omitted  if
          the  cell  cursor  is  in  a previously defined framed range, in
          which case the previously defined  outer  range  will  be  used.
          However,  if  a  single  range is specified on the command line,
          while another  range  wholly  contained  within  this  range  is
          highlighted,  the  specified  range  will  be  used as the outer
          range, and the highlighted range  will  be  used  as  the  inner
          range.   If  no  range  is  specified on the command line, but a
          range is  highlighted,  and  the  highlighted  range  is  wholly
          contained   within   a  previously  defined  framed  range,  the
          highlighted range will be used  as  the  inner  range,  and  the
          previously defined outer range will be used as the outer range.

          If  you choose unframe, you will be prompted for a range, and if
          the range is found in the list of  frames,  the  frame  will  be
          deleted, and the framing will no longer be active (the specified
          range must be the outer range of the previously defined frame to
          be  deleted).  The range may be omitted if the cell cursor is in
          a previously defined framed range, in which case that range will
          be used by default.

          Framed  ranges  may not be nested or overlapping.  If you try to
          define a  range  that  contains  any  cells  in  common  with  a
          previously  defined  framed  range,  an  error  message  will be
          issued, and the frame will not be created.

   rC     This  command  defines  a   color   range,   and   specifies   a
          foreground/background  pair  to  be  used  for  that range.  See
          "Color Commands" below for more information.

   Note Commands
   A note is a cell or range of cells that can be jumped to  quickly  from
   another  cell  by  creating  a special link in that cell.  The note may
   contain text explaining the contents of the cell containing  the  link,
   similar  to  a  footnote,  or  it  may  simply  be  another part of the
   spreadsheet that is related to the cell in some way.   When  you  press
   the `n' key, you will get a short prompt asking you whether you want to
   add or delete a note, or to ``show'' (by highlighting) which  cells  on
   the screen have attached notes.

   If  a  cell  with  an  attached  note contains numeric data, it will be
   preceded with an ``*''.  If color is available and turned on, the ``*''
   will  be  displayed  with  color  4.   Also,  the  note address will be
   displayed in curly braces on the top line, preceded by an  ``*'',  when
   the cell is current (e.g.  {*AC30:AE43} or {*note1} for a named range).
   You may also use the *s (Note/Show) command to highlight all  cells  on
   the current screen with attached notes.

   *a     Add  a  note.  This will bring up the addnote command in the top
          line, followed by the target address of the cell where you  want
          the note added.  You must then enter the cell or range where the
          note resides to add the note.  If you omit the note  address  or
          range,  the  currently  highlighted range, if any, will be used.
          Otherwise, the current cell will be used (you would, of  course,
          want to move away from the cell in which the addnote command was
          invoked in the latter case).

   *d     Delete a note.  If there is a note attached to the current cell,
          the link will be removed (deleted).  The note itself will not be
          removed from the spreadsheet.  If it is  no  longer  needed,  it
          must be deleted in a separate step.

   *s     Show all notes on the current screen.  If there are any cells on
          the visible portion of the spreadsheet  which  contain  attached
          notes, they will be highlighted until the next screen change, no
          matter how minor.  Simply moving to a new cell will be enough to
          turn off the highlighting.

   **     Jump  to  a  note.   If  there is a note attached to the current
          cell, you will be immediately transported to that cell.  You may
          return from the note to where you were by pressing ` twice.

   Color Commands
   Color may be enabled by setting the color option (``set color''), or by
   toggling it with ^TC (control-T followed by an uppercase C).  If  color
   is  enabled, you may define up to eight color pairs, each consisting of
   a foreground color and a background color.  Each of these colors may be
   defined  by  an expression which is evaluated at the same time the rest
   of the spreadsheet is evaluated.   Color  expressions  may  be  simple,
   specifying  only a foreground color and a background color, or they may
   be arbitrarily complex, causing the colors to change based  upon  other
   data in the spreadsheet, for example.  Color ranges may then be defined
   using the rC command, with a color number (1-8) assigned to  the  range
   (see below).

   Some  of  the  color  numbers  may  have  special meaning under certain
   circumstances, but may also be used explicitly at the same  time.   For
   example,  color  1 is the default color pair if color is enabled but no
   color has been defined for a given cell.  It is also the color used for
   the  column  and row labels and the top two lines of the display, which
   are used for prompts, input, error messages, etc.  Color 2,  while  not
   explicitly  used  for  all  negative numbers, will be used for negative
   numbers in cells which have no other color  defined  when  colorneg  is
   turned  on  (``set colorneg'' or ^TN).  This is because colorneg causes
   all cells with negative numbers to have their color number  incremented
   by  one  (cycling back to color 1 if the cell is defined as using color
   8).  Color 3 is used for all cells with errors (ERROR or  INVALID),  if
   colorerr  is  set  (``set colorerr'' or ^TE), regardless of which color
   they have been defined to use, or whether they have been defined to use
   any  color  at  all.   Color  4  is  used  to highlight the ``*'' which
   signifies that a cell has a note attached.

   If two color ranges are nested or overlapping, any cell that is  common
   to  both will be displayed using the color of the most recently defined
   color range.  You can list all color definitions and color ranges  with
   the rS (show) command (see below).

   C      This  command  first  prompts you for the color number you would
          like to define (or redefine).  After selecting a  number  (1-8),
          you  may  enter  an  expression which defines the foreground and
          background colors.  If the  chosen  color  has  previously  been
          defined,  the old definition will be presented for editing.  The
          syntax of the color command is:

                 color number = expression

          where number is the number of the color pair you want to define,
          and expression is the definition.  If the expression is missing,
          the specified color number will be unset (it will revert to  its
          default  start-up  colors).  Unlike setting it explicitly to its
          original value, this will not cause the expression to be written
          to  the  file  when  saved.  See below for an explanation of the
          format of a color expression.

   rC     This  command  defines  a   color   range,   and   specifies   a
          foreground/background  pair to be used for that range.  Although
          this  command  also  uses  the  color  command,  the  syntax  is
          different from that used for defining a color pair.  This syntax
          is:

                 color range number

   rS     This command shows lists of the currently defined  range  names,
          framed  ranges,  and color definitions and ranges, one after the
          other.  The output of this command will be piped  to  less.   If
          the  environment  variable  PAGER  is  set, its value is used in
          place of less.

   Color expressions are exactly like any other  numeric  expression,  and
   may contain any function or operator that is valid in any other numeric
   expression.  There are, however special functions designed specifically
   for defining colors.  These functions are:

           @black
           @red
           @green
           @yellow
           @blue
           @magenta
           @cyan
           @white

   Although  these  function  names are intended to reflect the color they
   produce, and use the same names  as  the  curses  colors,  @yellow  may
   appear  as  brown  on  many displays, especially those based on the VGA
   standard.

   In addition to special functions for specifying colors, there is also a
   special  operator  for  combining  two such colors into a single number
   which specifies  both  a  foreground  and  a  background  color.   This
   operator is the semicolon (;).  For example, the command

          color 1 = @white;@green

   will  set  the  foreground  color  to white and the background color to
   green for any cell or range of cells defined to use color 1,  or  which
   have no color defined.  If the semicolon operator is not used, and only
   one color is specified, that color will be used for the foreground, and
   the background will default to black.

   Although the above example is the easiest way to specify foreground and
   background colors, and will  probably  meet  most  people's  needs,  sc
   allows  much  more power and flexibility, should the need arise, due to
   the fact that any  color  can  be  specified  by  an  expression.   For
   example,

          color 5 = B23<E75?(@black;@cyan):(@white;@magenta)

   will cause all cells defined with color 5 to be displayed as black text
   on a cyan background if the numeric value in cell B23 is less than  the
   numeric  value  in cell E75; otherwise, they will be displayed as white
   text on a magenta background.  If you prefer to have the foreground and
   background  colors  dependent  on  different  criteria,  you  could  do
   something like this:

          color 5 = (B23<E75?@white:@cyan);(D5%2?@red:@blue)

   This will cause the text color for color 5 to be either white or  cyan,
   depending  on  the  numeric  values  in  cells  B23  and E75, as in the
   previous example, and the background color to be either  red  or  blue,
   depending on whether the numeric value in cell D5 is odd or even.

   Note that although a color expression may contain any function which is
   valid in any other numeric expression, the @myrow and @mycol  functions
   will  always  evaluate to 0.  This is because a color expression is not
   tied to any particular cell, but is instead  evaluated  once,  and  the
   result used for all cells defined to use that color.

   Also  note  that  if  a color expression results in an error, the color
   will default to black text on a black background.  If color  1  results
   in  an error, color will be disabled so that you can see the input line
   to correct the error, after which  color  will  need  to  be  reenabled
   manually.

   Default  colors  are  in effect for all colors until defined otherwise.
   These default colors are as follows:

           color 1 = @white;@blue
           color 2 = @red;@blue
           color 3 = @white;@red
           color 4 = @black;@yellow
           color 5 = @black;@cyan
           color 6 = @red;@cyan
           color 7 = @white;@black
           color 8 = @red;@black

   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, although it may not
          be completely up-to-date.

   !      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.

   ~      Abbreviations.   You may set abbreviations to speed up the entry
          of repetitive data.  Abbreviations work much like  abbreviations
          in  vi,  except  that  when  defining  an abbreviation, both the
          abbreviation and the expanded  text  must  be  contained  within
          quotes,  separated  by  a  single space.  If more than one space
          separates the abbreviation from the expanded text,  it  will  be
          included as part of the expanded text.

          There  are three types of abbreviations available in sc.  In the
          first type, all characters must be either alphanumeric or ``_''.
          In  the  second type, the last character must be alphanumeric or
          ``_'', but all other characters  must  not  be  alphanumeric  or
          ``_''.   Neither  type  may  contain  spaces.  The third type of
          abbreviation is a single character, and must be alphanumeric  or
          ``_''.

          When  using  abbreviations,  the  first  type  must  be  at  the
          beginning of the line, or must  be  preceded  by  any  character
          which  is not alphanumeric or ``_''.  The second type must be at
          the beginning of the line, or must  be  preceded  either  by  an
          alphanumeric  character,  ``_'',  or  a space.  Single character
          abbreviations must be at the beginning of the line  or  preceded
          by a space.

          Abbreviations  will  be  automatically  expanded  as soon as the
          space bar or return key is pressed, or when pressing the ESC key
          at  the end of the abbreviation to switch to edit mode.  You can
          also force an abbreviation to be expanded by following it with a
          ^], which won't be inserted into the line.  If you don't want an
          abbreviation to be expanded, you must either press ^V  twice  or
          switch  to  edit  mode  and  back  again  somewhere  within  the
          abbreviation (pressing ^V twice also has the effect of switching
          to navigate mode and back again).

          If  the  string  in the abbreviation command contains no spaces,
          the  entire  string  will  be  looked  up   in   the   list   of
          abbreviations, and if found, the definition will be displayed in
          the form of the original abbreviation command used to define it.
          When  looking  up  an  abbreviation  in  this manner, be sure to
          disable abbreviation  expansion,  as  described  above,  or  the
          results may not be what you expect.

          If  the  string  is empty, a list of all abbreviations and their
          corresponding expanded text will be output to your pager.   Note
          that  abbreviations  are  not  saved with the file.  This allows
          each user to create his own file  of  abbreviations  and  either
          merge them in or include them in his own .scrc file, rather than
          force all users who access a  file  to  use  the  same  list  of
          abbreviations.

   ^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 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  expressions  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.

   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.

   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 references vary
   when formulas containing them are copied.  If the range is defined with
   fixed variable references, the references 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,   variable   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.

   ee    Multiplication.

   e/e    Division.

   e1%e2  e1 mod e2.

   e^e    Exponentiation.

   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.

   @if(e,e,e)
   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.  The @sum, @prod, @avg,  @count,
   @max,  @min, and @stddev functions may take an optional second argument
   which is an expression that is to be evaluated for  each  cell  in  the
   specified  range  to  determine which cells to include in the function.
   Only those cells for which the expression evaluates to true  (non-zero)
   will  be  used  in  calculating  the  value  of  the  function.  Before
   evaluation for each cell, the expression is first converted  as  if  it
   was  being  copied  from  the cell in the upper left-hand corner of the
   range into the cell  under  consideration,  with  all  cell  references
   adjusted  accordingly.  Because the parts of the expression that should
   remain fixed during the evaluation of the function may not  necessarily
   be  the  same  as those which should remain fixed during an actual copy
   operation, the rules  for  adjusting  cell  references  during  a  copy
   operation  are  slightly  different  than normal.  In particular, these
   rules differ in two different ways.

   The first difference is that the @fixed operator is  ignored  during  a
   copy  operation  unless it is enclosed in parentheses.  This is so that
   selected cells whose addresses should remain  fixed  during  any  given
   evaluation  of  a  range  function can be adjusted relative to the cell
   containing the range function  when  copied  (the  $  prefix  is  still
   honored  for  these cells when copying).  Enclosing the @fixed operator
   in parentheses will have the opposite effect.  That is, it  will  cause
   cell  references  to  be fixed while copying, while allowing them to be
   adjusted when the  function  is  being  evaluated,  subject  to  any  $
   prefixes  present.  Note that only the @fixed operator itself should be
   enclosed in parentheses for this to work properly.

   The second difference is that any references  in  the  expression  that
   refer to cells in the range in the first argument of the range function
   will have any $ prefixes ignored, and the references  will  be  treated
   instead  as  if  they  had  the same $ prefixes as the left side of the
   range argument.  For example, if the left side of  the  range  argument
   (the  cell  address on the left side of the colon) has a fixed row, but
   does not have a fixed column, any cell references that refer  to  cells
   in  that  range  will  also have a fixed row, but will not have a fixed
   column.  This is so that if the range  reference  moves  when  copying,
   references to any cells in that range will also move accordingly.

   Note  that the test expression will be evaluated once for every cell in
   the range, which means that excessive use of these functions  with  the
   optional test expression, or the use of overly complex test expressions
   or with very large ranges can greatly slow down the recalculation of  a
   spreadsheet,  and  may require turning off autocalc for speed, and then
   manually recalculating with the @ command.

   @sum(r)
   @sum(r,e)         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.   The
                     optional  second  argument is an expression which can
                     be used to determine which cells in the range to  sum
                     (see above).

   @prod(r)
   @prod(r,e)        Multiply together all valid (nonblank) entries in the
                     specified region.  The optional second argument is an
                     expression which can be used to determine which cells
                     in the range to multiply (see above).

   @avg(r)
   @avg(r,e)         Average all valid (nonblank) entries in the specified
                     region.    The   optional   second   argument  is  an
                     expression which can be used to determine which cells
                     in the range to average (see above).

   @count(r)
   @count(r,e)       Count  all  valid (nonblank) entries in the specified
                     region.   The  optional   second   argument   is   an
                     expression which can be used to determine which cells
                     in the range to count (see above).

   @max(r)
   @max(r,e)         Return the maximum value  in  the  specified  region.
                     The  optional  second argument is an expression which
                     can be used to exclude specific cells  in  the  range
                     when determining this maximum value (see above).  See
                     also the multi argument version of @max below.

   @min(r)
   @min(r,e)         Return the minimum value  in  the  specified  region.
                     The  optional  second argument is an expression which
                     can be used to exclude specific cells  in  the  range
                     when determining this minimum value (see above).  See
                     also the multi argument version of @min below.

   @stddev(r)
   @stddev(r,e)      Return the sample standard deviation of the cells  in
                     the  specified  region.  The optional second argument
                     is  an  expression  which  can  be  used  to  exclude
                     specific  cells  in  the  range  when calculating the
                     standard deviation (see above).

   @rows(r)          Return the number of rows in the specified range.

   @cols(r)          Return the number of columns in the specified range.

   @lookup(e,r)
   @lookup(r,e)
   @lookup(se,r)
   @lookup(r,se)     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  expression,
                     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.

   @hlookup(e,r,n)
   @hlookup(r,e,n)
   @hlookup(se,r,n)
   @hlookup(r,se,n)  Evaluates  the  expression  then searches through the
                     first row in the range r for a matching  value.   The
                     expression  can  be  either  a string expression or a
                     numeric expression.  If it is a  numeric  expression,
                     the  row 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
                     row are searched for  an  exact  string  match.   The
                     value  returned  is  the  numeric value from the same
                     column n rows below the match.

   @vlookup(e,r,n)
   @vlookup(r,e,n)
   @vlookup(se,r,n)
   @vlookup(r,se,n)  Evaluates the expression then  searches  through  the
                     first  column  in  the  range r for a matching value.
                     The expression can be either a string expression or a
                     numeric  expression.   If it is a numeric expression,
                     the column 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
                     column  are  searched for an exact string match.  The
                     value returned is the numeric value from the same row
                     n columns to the right of the match.

   @index(e1,r)
   @index(r,e1)
   @index(r,e1,e2)   Use  the values of expressions e1 and (optionally) e2
                     to index into the range r.  The numeric value at that
                     position  is returned.  With two arguments, the range
                     should be either a single row or a single column.  An
                     expression with the value 1 selects the first item in
                     the range, 2 selects  the  second  item,  etc.   With
                     three  arguments,  the range must come first, and the
                     second and third arguments will then  be  interpreted
                     as  row and column, respectively, for indexing into a
                     two-dimensional table.

   @stindex(e1,r)
   @stindex(r,e1)
   @stindex(r,e1,e2) Use the values of expressions e1 and (optionally)  e2
                     to  index into the range r.  The string value at that
                     position is returned.  With two arguments, the  range
                     should be either a single row or a single column.  An
                     expression with the value 1 selects the first item in
                     the  range,  2  selects  the  second item, etc.  With
                     three arguments, the range must come first,  and  the
                     second  and  third arguments will then be interpreted
                     as row and column, respectively, for indexing into  a
                     two-dimensional table.

   Built-in Numeric Functions
   All  of these functions operate on floating point numbers (doubles) and
   return numeric values.  Most of them are standard 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.

   @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.  default: *.5 will be
                     rounded   up  to  the  next  integer;  doing  a  'set
                     rndtoeven' will cause it to be rounded to the closest
                     even  number instead (aka banker's round).  Round-to-
                     even has advantages over  the  default  rounding  for
                     some   applications.   For  example,  if  X+Y  is  an
                     integer, then X+Y = rnd(X)+rnd(Y) with round-to-even,
                     but  not  always with the defaulting rounding method.
                     This could be an advantage, for example, when  trying
                     to  split  an  odd amount of money evenly between two
                     people (it would determine who gets the extra penny).

   @round(e,n)       Round e to n decimal places.  n may  be  positive  to
                     round  off  the right side of the decimal or negative
                     to round off the left side.  See  @rnd(e)  above  for
                     rounding types.

   @abs(e)
   @fabs(e)          Return the absolute value of e.

   @pow(e1,e2)       Return e1 raised to the power of e2.

   @hypot(e1,e2)     Return  sqrt(e1e1+e2e2), taking precautions 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.

   @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.

   @err              Force an error.  This will force the expression which
                     contains it to result in an error.

   String Expressions
   String  expressions  are  made  up  of  constant  strings   (characters
   surrounded  by  double  quotation  marks), variables (cell names, which
   refer  to  the  cells's  label  strings  or  expressions),  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 or centered, 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

   @filename(e)      Return  the  current  default  filename, as specified
                     when the file was first loaded or created, or  during
                     the last save, with the Put command.  If e is 0, only
                     the actual filename will be returned, with  any  path
                     removed.  If non-zero, the full path specified on the
                     command line or in the last Get or Put  command  will
                     be  returned.  If the path begins with ``~'', it will
                     be expanded to the appropriate users home directory.

   @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, 8)

                     returns the string ``e jac''.

   @fmt(se,e)        Convert  a  number to a string.  The argument se must
                     be a valid printf(3) format string.  e  is  converted
                     according  to  the  standard rules.  For example, the
                     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 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 string value, the result is the  null  string.
                     You  can  use this for simple table lookups.  Be sure
                     the table doesn't move unexpectedly!

   @upper(se)
   @lower(se)        will case the string expression to upper or lower.

   @capital(se)      will convert the first letter of words  in  a  string
                     into  upper case and other letters to lower case (the
                     latter if all letters of the string are upper case).

   @ext(se,e)        Call an external function (program or  script).   The
                     purpose  is  to  allow arbitrary 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  build a command line (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).

   @coltoa(e)        Returns  a  string name for a column from the numeric
                     argument.  For example:

                          @coltoa(@mycol-1)        @nval(coltoa(@mycol-1),
                     @myrow+1)

   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 36
                     monthly payments of $100 at  6%  interest  (.005  per
                     month).   It  answers  the question: "How much will I
                     have in 36 months 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
                     ordinary  annuity  of 36 monthly payments of $1000 at
                     18% annual interest.  It answers the  question:  "How
                     much  can  I borrow at 18% for 3 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
   the  beginning  of  1970.   All  date and time functions except @date()
   return numbers, not strings.

   @now              Return the current time  encoded  as  the  number  of
                     seconds  since  the  beginning of the epoch (December
                     31, 1969, midnight, GMT).

   @dts(e1,e2,e3)    Convert a date to the  number  of  seconds  from  the
                     epoch  to  the  first  second  of the specified date,
                     local time.  Dates may be specified in either (m,d,y)
                     or  (y,m,d) format, although the latter is preferred,
                     since it's more universally recognized (m,d,y is only
                     used  in  America).   If  e2  >  12  or e3 > 31, then
                     (m,d,y) is assumed.  Otherwise, (y,m,d)  is  assumed.
                     For example, @date(@dts(1976,12,14)) yields

                          Tue Dec 14 00:00:00 1976

                     The  month should range from  1 to 12; the day should
                     range from 1 to the number of days in  the  specified
                     month;  and the year should include the century (e.g.
                     1999 instead of  99).   Any  date  capable  of  being
                     handled by the system is valid, typically 14 Dec 1901
                     to 18 Jan 2038 on a system that uses a 32 bit time_t.
                     Invalid  dates  or  dates  outside of this range will
                     return ERROR.  For rapid entry of  dates  using  only
                     the  numeric keypad, sc provides the alternate syntax
                     y.m.d or m.d.y, which is automatically  converted  to
                     the @dts(...) format above.  The year, month, and day
                     must be entered numerically in the alternate  syntax;
                     formulas are not allowed.

   @tts(e1,e2,e3)    @tts(8,20,45) converts the time 8:40:45 to the number
                     of seconds since midnight,  the  night  before.   The
                     hour  should  range  from  0  to  23; the minutes and
                     seconds should range from 0 to 59.

   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)
   @date(e,se)       Convert the time in seconds to a date string.  With a
                     single   numeric   argument,  the  date  will  be  24
                     characters long in the following form:

                          Sun Sep 16 01:03:52 1973

                     Note that you can extract parts of this  fixed-format
                     string  with  @substr().   A format string compatible
                     with the strftime() function may optionally be  given
                     as  a second argument to override the default format.
                     See the strftime(3) man page for details.

   @year(e)          Return  the  year.   Valid  years  begin  with  1970,
                     although many systems will return years prior to 1970
                     if e is negative.  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'').

   @numiter          Returns the number of iterations performed so far.

   Programmable Function Keys
   Function  keys  can  be  used in sc if your terminal supports them, and
   they are programmable.  To program the function keys, you use the  fkey
   command.   This command may be used in a .scrc file or a macro file, or
   it may be entered directly into sc's command  line.   Defined  function
   keys  will  be  saved with the file.  There is no shortcut, as there is
   with most commands, so the full command must  be  typed  in.   Pressing
   enter  when not editing a line will start you off with a blank line for
   this purpose.  The format of the fkey command is:

          fkey n = "command"

   where n is the function key number (n = 1 for F1, n = 2 for F2,  etc.),
   and command is the command to be run.  For example,

          fkey 2 = "merge \"|~/scmacros/macro1\""

   will run the macro called macro1 located in a subdirectory of your home
   directory called scmacros when  the  F2  key  is  pressed.   Note  that
   embedded quotes must be escaped by a backslash.  If you want to include
   the cell address of the current cell in the command line, you may do so
   by entering ``$$'' in its place in the command.  For example,

          fkey 5 = "fmt $$ \"^D%A\""

   will  cause  the  F5 key to format the current cell to display the full
   weekday name of the numeric date value stored there.  The ^D is a CTRL-
   D character, which denotes a date format.

   Although  it  may  be  overridden  by  the  fkey command, the F1 key is
   predefined by default to  execute  man  sc.   Unlike  the  user-defined
   function keys, this definition will also work in edit, insert, replace,
   and navigate modes.

   To undefine a function key, merely define it as the empty string  ("").
   Undefining the F1 key will restore the default behavior.

   Plugins
   There  are three ways in which external programs can be used as plugins
   with sc.  First, they can be used as external commands.  When  used  as
   an  external command, any command not recognized by sc will be searched
   for first in $HOME/.sc/plugins, and then in  /usr/share/doc/sc/plugins.
   If  found,  it  will be run with its standard input and standard output
   redirected back to sc.  These are used to send commands to, and receive
   responses back from sc in the same way that advanced macros do.

   The  second and third ways that programs can be used as plugins with sc
   are to automatically convert files to and from sc format based on their
   extensions.  In order to use them in this way, you must first associate
   a given extension to a corresponding plugin (for  reading)  or  plugout
   (for  writing)  using  the plugin and plugout commands.  These commands
   should be placed in your .scrc file, and have the following syntax:

          plugin "ext" = "programname"

   or

          plugout "ext" = "programname"

   where ext is the extension and programname is the name  of  the  plugin
   program  to  be used for filenames with that extension.  For input, the
   plugin merely reads the specified file, performs whatever conversion is
   necessary,  and  writes  the  resulting  data  to standard output.  For
   output, the plugin writes sc commands to standard output and reads  the
   replies  from  standard  input  in  the same way that an advanced macro
   would, and then converts the data to the appropriate format and  writes
   it to a file with the specified filename.

FILES

   /usr/share/doc/sc/tutorial.sc Tutorial spreadsheet.

   $HOME/.scrc                   Initialization commands.

   ./.scrc                       More initialization commands.

SEE ALSO

   bc(1), dc(1), crypt(1), 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.

   On some systems, if the cell cursor is in column 0 with topline 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.

AUTHORS

   This  is  a  much  modified  version  of  a  public domain spread sheet
   originally authored by James Gosling,  and  subsequently  modified  and
   posted  to  USENET  by  Mark Weiser under the name vc.  The program was
   subsequently renamed sc, and further modified by numerous contributors,
   Jeff  Buhrt  of  Proslink,  Inc.  and Robert Bond of Sequent, prominent
   among   them.     The    current    maintainer    is    Chuck    Martin
   (nrocinu@myrealbox.com).

   Other contributors include: Tom Anderson, Glenn T. Barry, Gregory Bond,
   Stephen (Steve)  M.  Brooks,  Peter  Brower,  John  Campbell,  Lawrence
   Cipriani,  Jim  Clausing,  Dave  Close,  Chris Cole, Jonathan Crompron,
   David I. Dalva, Glen  Ditchfield,  Sam  Drake,  James  P.  Dugal,  Paul
   Eggert,   Andy   Fyfe,  Jack  Goral,  Piercarlo  "Peter"  Grandi,  Henk
   Hesselink, Jeffrey C Honig, Kurt  Horton,  Jonathan  I.  Kamens,  Peter
   King,  Tom  Kloos,  Michael  Lapsley,  Casey  Leedom, Jay Lepreau, Dave
   Lewis, Rick Linck, Soren Lundsgaard, Tad  Mannes,  Rob  McMahon,  Chris
   Metcalf, Mark Nagel, Ulf Noren, Marius Olafsson, Gene H. Olson, Henk P.
   Penning, Rick Perry, Larry Philps, Eric Putz, Jim  Richardson,  Michael
   Richardson,  R.  P.  C.  Rodgers,  Kim  Sanders,  Mike  Schwartz,  Alan
   Silverstein, Lowell Skoog, Herr Soeryantono, Tim Theisen,  Tom  Tkacik,
   Andy  Valencia,  Adri  Verhoef,  Rick  Walker,  Petri  Wessman, and Tim
   Wilson.





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.