Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SC(1)			    General Commands Manual			 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 com-
       mand 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  in-
       terpreted 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 af-
       ter 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	 file-
       name  of	- meaning standard input as noted above).  In addition,	an ar-
       gument 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  /wrkdirs/usr/ports/math/sc/work/stage/usr/local/share/sc/tu-
	      torial.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)  en-
	      abled.

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

       -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 ex-
	      pressions	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 de-
	      crypt 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 for-
	      matting 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  out-
	      putting 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 be-
       low)  while  sc is running.  Options specified when sc is invoked over-
       ride 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  set-
       ting  certain  defaults.	 Any options set which have equivalent command
       line options may	be overridden by the command line.  If that file  con-
       tains  the  command  ``set scrc'',  sc will then	look for a file	called
       .scrc in	the current directory, and if found, load that file into  mem-
       ory, 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  ex-
	      tension  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 op-
	      tion 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 ex-
	      tension.	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  ex-
	      ists,  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	exten-
	      sion.   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	exten-
	      sion.   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 ex-
	      ists, 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 ta-
       ble.  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 high-
       lighted cell or a ``<'' on the screen, and a  character	cursor,	 indi-
       cated 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 recalcu-
		     lated.  Normally this is not  noticeable,	but  for  very
		     large  spreadsheets,  it may be faster to clear automatic
		     recalculation mode	and update  the	 spreadsheet  via  ex-
		     plicit  ``@''  commands.  Default is automatic recalcula-
		     tion 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 func-
		     tions  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  in-
		     serted, thus enlarging the	range and allowing you to con-
		     tinue entering data into the row/column without overwrit-
		     ing  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	 (bot-
		     tom 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 por-
		     tion 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 as-
		     sumed 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 nu-
		     meric  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 en-
		     abled, expressions	which evaluate to a constant are auto-
		     matically optimized upon entry.  For example, if you  en-
		     ter  @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 ac-
		     tual 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),  fol-
		     lowed  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 di-
		     rection 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	press-
		     ing  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 differ-
		     ent  or  not.  If cslop is	enabled, strings may slop over
		     even if the next cell is in a different color range, car-
		     rying 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 in-
		     voked, the	row and	column of the current cell are	remem-
		     bered.   If a later newline action	would take the current
		     cell to the right of the remembered column, then the cur-
		     rent 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 IN-
		     VALID  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 en-
	      tered 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 en-
	      try in a frame (see "Framed Ranges" below), and setting the  au-
	      towrap  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 (de-
		     fault) to give colon delimited fields, with no  tbl  con-
		     trol  lines;  tbl	to  give  colon	delimited fields, with
		     tbl(1) control lines; latex to give a LaTeX tabular envi-
		     ronment; 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 com-
		     mands.   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  interac-
	      tively.

	      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; do-
		     ing 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 inte-
		     ger, 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 de-
		     termine 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	facil-
		     ity.

	      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 ef-
		     fect.  On a slow connection, turning off  color  can  no-
		     ticeably 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 IN-
		     VALID 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 sav-
	      ing a file, but are instead intended for use in a	 user's	 .scrc
	      file.

	      braille/!braille
		     Set/clear	braille	 enhancement  mode.   When braille en-
		     hancement 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 tem-
		     porarily, and then	switched back on after the color oper-
		     ation 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 or-
		     der  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  be-
		     ginning  of  that message.	 After this message goes away,
		     the cursor	will revert to its former behavior.  The easi-
		     est 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	bound-
		     aries 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	depen-
		     dent 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 over-
		     ridden by command line options.  Setting this could be  a
		     potential	security  risk,	 since starting	sc with	an un-
		     known .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 com-
	      mands, 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  com-
	      plete  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 appropri-
	      ate termcap entry.  Some terminals have arrow  keys  which  con-
	      flict  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 expres-
	      sion 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 cur-
	      sor 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 regu-
	      lar 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 exam-
	      ple,  although  they  are	somewhat slower	than searching through
	      ordinary strings,	since all numbers must be formatted or expres-
	      sions 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 ta-
	      ble, 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  con-
	      taining  an  ERROR).   g error  will take	you to the next	ERROR,
	      while g invalid take you to the next INVALID.  The last  g  com-
	      mand  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	desti-
	      nation 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 com-
	      mand is useful when specifying ranges of adjacent	cells (see be-
	      low), especially when the	range is bigger	than the visible  win-
	      dow.

	      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	 with-
	      out 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 edit-
	      ing 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 cur-
	      rently 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 be-
	      fore 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 posi-
	      tion on the screen as when it was	marked.	 It does this  by  re-
	      membering	 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,	 leav-
       ing  only the previously	computed constant label	string.	 Likewise, en-
       tering 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 num-
	      ber in response to the prompt on the top line.   The  quick  nu-
	      meric 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 ex-
	      pression in the current cell, but	you want to start out in navi-
	      gate 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 cre-
	      ate 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 ei-
		     ther side of the decimal point than there are `#' charac-
		     ters 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	place-
		     holders on	the left side of the decimal point, then those
		     digits are	displayed.

	      0	     Digit placeholder.	 Same as for `#' except	that the  num-
		     ber  is  padded with zeroes on either side	of the decimal
		     point.  The number	of zeroes used in  padding  is	deter-
		     mined  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 dig-
		     its 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 num-
		     ber.   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 deci-
		     mal 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  num-
		     ber  to  be  formatted  with a `,'	separating each	set of
		     three digits in the integer part of the number with  num-
		     bering  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 for-
		     mat string	will be	ignored.

	      &	     Precision.	 When this character is	present	in  the	 frac-
		     tional  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 spe-
		     cial 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	place-
		     holder 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 for-
		     mat 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 informa-
	      tion  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	 iden-
	      tical  to	``='' except that the command line starts out contain-
	      ing 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	 navi-
		     gate 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 al-
		     phanumeric	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	inter-
		     vening  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 in-
		     serted  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 cur-
		     rent  cell	 (the one at the cell cursor) into the command
		     line.  This is useful when	entering expressions which re-
		     fer 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	delim-
		     ited 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  cur-
		     rently 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, in-
		     sert 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 iden-
	      tical  to	 ``<'',	 ``\'',	 or ``>'' except that the command line
	      starts out containing the	old string value or expression associ-
	      ated 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 fa-
       cilitate	the rapid entry	of expressions which add  and  subtract	 large
       numbers	of  cells and sums of ranges of	cells, so read them over care-
       fully 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  recalcula-
	      tion  order  is set.  Cells cleared with this command may	be re-
	      called 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	refer-
	      ence  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	speci-
	      fied, the	current	cell is	set as the default  source  range  for
	      the  range  copy	(rc) command, and then the copy	command	is en-
	      tered 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 (de-
	      fault 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'' ex-
	      pression,	the string ``@sum('' will be inserted, followed	by the
	      highlighted  range,  followed  by	 ``)+''.   If a	range is high-
	      lighted 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  in-
	      serted, 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 ex-
	      pression 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'' ex-
	      pression,	the string ``@sum('' will be inserted, followed	by the
	      highlighted  range,  followed  by	 ``)-''.   If a	range is high-
	      lighted 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  in-
	      serted, followed by  ``)-''.

       RETURN If  you are not editing a	cell (top line is empty), pressing RE-
	      TURN 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 ta-
	      ble 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 (poten-
       tially) dangerous operation is really what you want.

       The three output	commands, Put, Write, and Table, can pipe their	(unen-
       crypted only) output to a program.  To use this feature,	enter ``| pro-
       gram'' 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 data-
	      base.  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	opera-
	      tions (the single	key commands are shortcuts which switch	to in-
	      put  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 file-
	      name to merge in.	 The string to use is set with the Define com-
	      mand.  To	write macros, you must be familiar with	the file  for-
	      mat 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	infor-
	      mation,  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 file-
       name.   The filename can	also be	obtained from a	cell's label string or
       string expression.  In this case, delete	the leading " with  the	 back-
       space  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 com-
       mand 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 RE-
       TURN  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  un-
	      touched.

       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 af-
	      ter 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.  Ap-
	      pending 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	(simi-
	      lar  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 differ-
	      ence  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 ac-
	      tual data	untouched.  This makes it easy to  copy	 cell  formats
	      from  one	 part  of the spreadsheet to another, such as when ex-
	      panding 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  be-
	      ginning  at the current cell cursor location like	pp, but	trans-
	      poses 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, ex-
	      cept that	it switches to navigate	mode and allows	you to	define
	      the destination range to be used.	 This works like the copy com-
	      mand  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 por-
	      tion 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 (col-
	      umn) 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 pre-
	      cision,  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  su-
	      persede  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 col-
	      umn 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  col-
	      umn 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, respec-
	      tively.	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 com-
       mands 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  in-
       formational only	and may	be erased with the backspace key.

       Prompts	requesting  variable names may be satisfied with either	an ex-
       plicit 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 con-
       trol  commands  (^P or ^N) or the arrow keys.  The cells	in the default
       range are highlighted (using the	terminal's standout  mode,  if	avail-
       able).

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

       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 des-
	      tination	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 destina-
	      tion, 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	desti-
	      nation.

       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.  Un-
	      like the rc command, the destination of a	move is	a single cell,
	      which will be the	upper lefthand corner of the source range  af-
	      ter 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 charac-
	      ters.  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 ei-
	      ther one or two characters, and must be alphabetic (case	insen-
	      sitive),	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 left-
	      most 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	 posi-
	      tive  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 re-
	      sponse to	prompts	requesting a cell or range name, and are saved
	      when the spreadsheet is saved with the Put command.   Names  de-
	      fined  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 se-
	      lect 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 cor-
	      responding 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 high-
	      lighted, 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	 high-
	      lighted,	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	previ-
	      ously 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 fore-
	      ground/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  spread-
       sheet  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  pre-
       ceded  with  an	``*''.	If color is available and turned on, the ``*''
       will be displayed with color 4.	Also, the note address	will  be  dis-
       played  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 cir-
       cumstances, but may also	be used	explicitly at the same time.  For  ex-
       ample,  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	signi-
       fies 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  de-
	      fined,  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 fore-
	      ground/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 ap-
       pear as brown on	many displays, especially those	based on the VGA stan-
       dard.

       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	opera-
       tor 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  al-
       lows 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 some-
       thing 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	previ-
       ous example, and	the background color to	be either red or blue, depend-
       ing 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 re-
       sult 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 manu-
       ally.

       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 sum-
	      maries  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 com-
	      pletely 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 ab-
	      breviation 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  ab-
	      breviation  is  a	 single	character, and must be alphanumeric or
	      ``_''.

	      When using abbreviations,	the first type must be at  the	begin-
	      ning  of the line, or must be preceded by	any character which is
	      not alphanumeric or ``_''.  The second type must be at  the  be-
	      ginning  of  the line, or	must be	preceded either	by an alphanu-
	      meric character, ``_'', or a space.  Single character  abbrevia-
	      tions  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 abbrevi-
	      ation  (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 abbrevia-
	      tions, 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  dis-
	      able  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	abbre-
	      viations.

       ^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 pro-
	      vide 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 high-
	      lighted 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, parenthe-
       sized expressions, and negated terms.  Ranges may be operated upon with
       range functions such as sum (@sum()) and	average	(@avg()).   Terms  may
       be combined using binary	operators.

       -e     Negation.

       e+e    Addition.

       e-e    Subtraction.

       e*e    Multiplication.

       e/e    Division.

       e1%e2  e1 mod e2.

       e^e    Exponentiation.

       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  evalua-
       tion  for each cell, the	expression is first converted as if it was be-
       ing 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	opera-
       tion,  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 hon-
       ored 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 ad-
       justed 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 re-
       fer 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  op-
			 tional	 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 expres-
			 sion 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  expres-
			 sion  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  spe-
			 cific	cells  in the range when calculating the stan-
			 dard 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  expres-
			 sion  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  re-
			 turned	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 nu-
			 meric 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  expres-
			 sion, the string portions of the cells	in the row are
			 searched  for	an  exact string match.	 The value re-
			 turned	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	rndto-
			 even' 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 ap-
			 plications.   For example, if X+Y is an integer, then
			 X+Y = rnd(X)+rnd(Y) with round-to-even, but  not  al-
			 ways 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(e1*e1+e2*e2), 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 as-
			 sure 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  sur-
       rounded	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 sub-
			 string	indexed	by character number e1 through charac-
			 ter 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 ex-
			 pression 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 out-
			 put,  or  output  to  standard	 error,	 messes	up the
			 screen.  @ext() returns a null	string and  prints  an
			 appropriate  warning  if  external functions are dis-
			 abled,	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 dis-
			 abled 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 argu-
			 ment 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 spread-
       sheets 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() re-
       turn numbers, not strings.

       @now		 Return	the current time encoded as the	number of sec-
			 onds 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,  lo-
			 cal  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  han-
			 dled 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 re-
			 turn 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 sec-
			 onds 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 charac-
			 ters 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,  al-
			 though	 many  systems will return years prior to 1970
			 if e is negative.  The	last legal year	is system  de-
			 pendent.

       @month(e)	 Return	 the  month, encoded as	1 (January) to 12 (De-
			 cember).

       @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 en-
       ter  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	embed-
       ded  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	prede-
       fined by	default	to execute man sc.  Unlike the	user-defined  function
       keys, this definition will also work in edit, insert, replace, and nav-
       igate 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
       /wrkdirs/usr/ports/math/sc/work/stage/usr/local/share/sc/plugins.    If
       found, it will be run with its standard input and standard output redi-
       rected back to sc.  These are used to send commands to, and receive re-
       sponses 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  out-
       put,  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
       /wrkdirs/usr/ports/math/sc/work/stage/usr/local/share/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 re-
       laxation	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	origi-
       nally  authored	by James Gosling, and subsequently modified and	posted
       to USENET by Mark Weiser	under the name vc.   The  program  was	subse-
       quently 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	Cipri-
       ani, 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.

SC 7.16			       19 September 2002			 SC(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=sc&sektion=1&manpath=FreeBSD+Ports+14.3.quarterly>

home | help