home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume35 / ss / part01 next >
Text File  |  1993-03-03  |  62KB  |  1,736 lines

  1. Newsgroups: comp.sources.misc
  2. From: art@cs.ualberta.ca (Art Mulder)
  3. Subject: v35i087:  ss - Simple Spreadsheet program, v1.2b, Part01/11
  4. Message-ID: <csm-v35i087=ss.091453@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: 221b475df622c1d8cb023527e06f9ce5
  6. Date: Mon, 22 Feb 1993 15:17:39 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: art@cs.ualberta.ca (Art Mulder)
  10. Posting-number: Volume 35, Issue 87
  11. Archive-name: ss/part01
  12. Environment: curses, sunos, sysv, ultrix, sgi, dec, mips, sun
  13.  
  14. ss is a spreadsheet program.  It is based upon the well known(?)
  15. public domain spreadsheet program ``sc'' version 6.19.
  16.  
  17. ss is curses based.  It should function on any ASCII terminal, or in
  18. any terminal window in a windowing environment.
  19.  
  20. ss is a major overhaul of the _user_interface_ of sc.  I tried to
  21. make it much more similar to the spreadsheets found on personal
  22. computers.  It makes use of hierarchical menus, and has a full range
  23. of `standard' spreadsheet functions.
  24.  
  25. THIS IS A BETA RELEASE.  CAVEAT EMPTOR.
  26.  
  27. I toyed around with starting off at version number 7.0, since I used
  28. sc 6.19 (and later 6.21) as my starting point, but I decided that
  29. would be a bit presumptuous.  So I hope this low release/version
  30. number doesn't scare away too many people.  There really is a *LOT*
  31. of work put in by a lot of people over a long period of time in the
  32. sc 6.19 code, which serves as the heart of ss.
  33.  
  34. This is an ASCII spreadsheet program.  This is not Lotus 1-2-3.  It
  35. is not Microsoft Excel.  It does not do graphs or charts.  It does
  36. not do drawings.  It does not use a mouse.
  37.  
  38. It _does_ do a fine job of manipulating rows and columns of numbers.
  39. Want a simple way of managing your student's grades, calculating class
  40. averages, etc?  No problem.  Want to figure out how much money you
  41. can borrow from the bank for a mortgage?  We can do that.
  42.  
  43. FTP:
  44. ss is available for anonymous ftp from ftp.cs.ualberta.ca 
  45. (129.128.4.241) in the directory pub/ss_1.2b.tar.Z.
  46.  
  47. Please ftp during off hours.  (We are located in Mountain Time Zone,
  48. which is 6-7 hours before Greenwich, depending on Daylight Savings
  49. time).
  50.  
  51.  ...art mulder ( art@cs.ualberta.ca )    | "Do not be conformed to this world,
  52.  Department of Computing Science         |  but be transformed by the renewal
  53.  University of Alberta, Edmonton, Canada |  of your mind, ..."  Romans 12:2
  54.  
  55.  ----------------------------------------------------------------------
  56. #! /bin/sh
  57. # This is a shell archive.  Remove anything before this line, then feed it
  58. # into a shell via "sh file" or similar.  To overwrite existing files,
  59. # type "sh file -c".
  60. # Contents:  ss_12b ss_12b/examples ss_12b/keys.h ss_12b/menu_rowcol.c
  61. #   ss_12b/sc_stuff ss_12b/ss.man.A ss_12b/sunfkeys
  62. # Wrapped by kent@sparky on Sat Feb 20 16:01:00 1993
  63. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  64. echo If this archive is complete, you will see the following message:
  65. echo '          "shar: End of archive 1 (of 11)."'
  66. if test ! -d 'ss_12b' ; then
  67.     echo shar: Creating directory \"'ss_12b'\"
  68.     mkdir 'ss_12b'
  69. fi
  70. if test ! -d 'ss_12b/examples' ; then
  71.     echo shar: Creating directory \"'ss_12b/examples'\"
  72.     mkdir 'ss_12b/examples'
  73. fi
  74. if test -f 'ss_12b/keys.h' -a "${1}" != "-c" ; then 
  75.   echo shar: Will not clobber existing file \"'ss_12b/keys.h'\"
  76. else
  77.   echo shar: Extracting \"'ss_12b/keys.h'\" \(2839 characters\)
  78.   sed "s/^X//" >'ss_12b/keys.h' <<'END_OF_FILE'
  79. X/*
  80. X * %W% %G%
  81. X *
  82. X *    ss    Art's Spread sheet program
  83. X *
  84. X *    Key Definition header file
  85. X *        - This is a prime candidate for an 'rc' file
  86. X */
  87. X
  88. X#define ctl(c) ((c)&037)
  89. X#define ESC 033
  90. X#define DEL 0177
  91. X
  92. X/*
  93. X * I set up this header file, to make it easy for customization
  94. X * of key bindings.  An "rc" file is the next step.
  95. X */
  96. X
  97. X/*
  98. X * CONTROL KEYS
  99. X *     I don't know how to disable flow control, so I don't use
  100. X *     control `s' or `q'.
  101. X *
  102. X * Checklist:
  103. X * A: kSTART    G: kGOTO    M: kABORT    S: n/a        Y: kCOPY
  104. X * B: kLEFT    H: kBS         N: kDOWN    T: kTOP        Z: kSTOP
  105. X * C: kBREAK    I: kTAB        O        U
  106. X * D: kDEL    J: kJUMP    P: kUP        V: kPGDN
  107. X * E: kFINISH    K: kEXP        Q: n/a        W: kMARK
  108. X * F: kRIGHT    L: kREDRAW    R: kVAL        X: Ctrl-X Prefix
  109. X */
  110. X
  111. X#define kLEFT    ctl('b')    /* Move Cursor Left */
  112. X#define kDOWN    ctl('n')    /* ... Down */
  113. X#define kUP    ctl('p')    /* ... Up */
  114. X#define kRIGHT    ctl('f')    /* ... Right */
  115. X    /* the main input routine [nmgetch()] converts the keypad keys to
  116. X     * control chars (defined here).  Hence, *at this time*
  117. X      * we cannot just use the curses definitions of the keys.
  118. X      */
  119. X
  120. X#define kTAB    ctl('i')    /* Tab key */
  121. X
  122. X#define kSTART    ctl('a')    /* Move to column A of current row */
  123. X#define kFINISH ctl('e')    /* Move to last valid column in curr. row */
  124. X
  125. X#define kSTOP    ctl('z')    /* Stop/Halt/Suspend program */
  126. X#define kBREAK    ctl('c')    /* Break */
  127. X#define kABORT    ctl('m')     /* Abort menus */
  128. X
  129. X#define kBS    ctl('h')    /* Backspace */
  130. X
  131. X#define kTOP    ctl('t')    /* Move to row 0 of current column */
  132. X#define kPGDN    ctl('v')    /* Move cursor down one page */
  133. X
  134. X#define kREDRAW    ctl('l')    /* Redraw screen */
  135. X#define kEXP    ctl('k')    /* Redraw, highlight Expression cells */
  136. X#define kVAL    ctl('r')    /* Redraw, highlight value cells */
  137. X
  138. X#define kJUMP    ctl('j')    /* Jump to the end of a specified range */
  139. X#define kGOTO    ctl('g')    /* Goto a Cell */
  140. X
  141. X#define kDEL    ctl('d')    /* Delete/Erase the current cell */
  142. X#define kMARK    ctl('w')    /* Mark a cell for copying */
  143. X#define kCOPY    ctl('y')    /* Copy a previously Marked Cell
  144. X                   to the current cell */
  145. X/*
  146. X * META KEYS
  147. X *     - in combination with the meta (ESC) keys
  148. X */
  149. X#define kMETA    ESC        /* Meta Prefix Key. */
  150. X
  151. X#define kHOME    '<'        /* Move cursor to cell A0 */
  152. X#define kEND    '>'        /* Move to last row of current column */
  153. X
  154. X#define kPGUP    'v'        /* Move cursor up one 'page' */
  155. X
  156. X#define kBACK    'b'        /* backward to prev. valid cell */
  157. X#define kFORW    'f'        /* forward to next valid cell */
  158. X
  159. X/*
  160. X * Ctrl-X KEYS
  161. X *     - in combination with the Ctrl-X key.
  162. X */
  163. X#define kCTRLX    ctl('x')    /* ^X- Prefix Key */
  164. X    /* Sort of silly, but constants are better than
  165. X     * "Magic" values/numbers scattered througout
  166. X     * your code.
  167. X     */
  168. X       
  169. X#define kPGRIGHT '>'        /* Move Right one page */
  170. X#define kPGLEFT  '<'        /* Move Left one page */
  171. X
  172. X#define kEDVAL   'v'        /* Edit the Cell Value */
  173. X#define kEDLABL  'l'        /* Edit the Cell Label */
  174. X/*******************
  175. X*    END
  176. X********************/
  177. END_OF_FILE
  178.   if test 2839 -ne `wc -c <'ss_12b/keys.h'`; then
  179.     echo shar: \"'ss_12b/keys.h'\" unpacked with wrong size!
  180.   fi
  181.   # end of 'ss_12b/keys.h'
  182. fi
  183. if test -f 'ss_12b/menu_rowcol.c' -a "${1}" != "-c" ; then 
  184.   echo shar: Will not clobber existing file \"'ss_12b/menu_rowcol.c'\"
  185. else
  186.   echo shar: Extracting \"'ss_12b/menu_rowcol.c'\" \(8286 characters\)
  187.   sed "s/^X//" >'ss_12b/menu_rowcol.c' <<'END_OF_FILE'
  188. X/**********************************************************************
  189. X* %M%
  190. X* Art Mulder ( art@cs.ualberta.ca )
  191. X* University of Alberta, Department of Computing Science.
  192. X***********************************************************************
  193. X* Row & Column Menu Operations
  194. X***********************************************************************
  195. X**********************************************************************/
  196. X#ifndef lint
  197. X  static char Sccsid[] = "%W% %G%";
  198. X#endif
  199. X
  200. X/*
  201. X * Include files
  202. X */
  203. X#include <stdio.h>
  204. X#include <string.h>
  205. X#include "curses_stuff.h"
  206. X
  207. X#include "ss.h"
  208. X#include "getinput.h"
  209. X#include "disprange.h"
  210. X#include "menu_rowcol.h"
  211. X
  212. X/*    Internal Macros & Data Structures
  213. X *----------------------------------------------------------------------
  214. X */
  215. Xstatic int minr;        /* To hold a range: min-row */
  216. Xstatic int minc;        /* ... min-column */
  217. Xstatic int maxr;        /* ... max-row */
  218. Xstatic int maxc;        /* ... max-column */
  219. X
  220. X/*    External Global variables
  221. X *----------------------------------------------------------------------
  222. X */
  223. X
  224. X
  225. X
  226. X/*    Externally Accessible Functions
  227. X ***********************************************************************
  228. X */
  229. X
  230. Xvoid RCInsert(IsRow)
  231. X/*----------------------------------------------------------------------
  232. X** Insert some Rows or Columns.  If a range is defined, insert the
  233. X** number of rows (columns) spanned by the range.  If no range is
  234. X** defined, insert just one row (column). 
  235. X**
  236. X** Rows (columns) will be inserted *BEFORE* the current one.
  237. X** In the case of a range, the 'current' row (column) will be the 
  238. X** topmost row (leftmost column).
  239. X*/
  240. X    int IsRow;            /* TRUE = a Row, FALSE = Column */
  241. X{
  242. X    RangeGetNum(&minr, &minc, &maxr, &maxc);         
  243. X
  244. X    if (IsRow) {        /* Insert row(s) */
  245. X    currow = minr;
  246. X    insertrow( (maxr - minr +1) );         /* # rows to insert */
  247. X    
  248. X    } else {            /* Insert Column(s) */
  249. X    curcol = minc;
  250. X    opencol(curcol, (maxc - minc +1) );  /* # cols to insert */
  251. X    }
  252. X} /* RCInsert() */
  253. X
  254. Xvoid RCDelete(IsRow)
  255. X/*----------------------------------------------------------------------
  256. X** Delete some Rows or Columns.  If a range is defined, the
  257. X** number of rows (columns) spanned by the range.  If no range is
  258. X** defined, delete just the row (column) where the cell cursor is. 
  259. X*/
  260. X    int IsRow;            /* TRUE = a Row, FALSE = Column */
  261. X{
  262. X    RangeGetNum(&minr, &minc, &maxr, &maxc);         
  263. X
  264. X    /*
  265. X     * Set up message to prompt user
  266. X     */
  267. X    if (IsRow) {        /* Deleting a Row */
  268. X    if (minr == maxr)    /* ...No Range */
  269. X        Sprintf(message, "** Delete the Current Row ?");
  270. X    else
  271. X        Sprintf(message, "** Delete the Rows %d:%d ?", minr, maxr);
  272. X
  273. X    } else {            /* Deleting a Column */
  274. X    if (minc == maxc)    /* ...No Range */
  275. X        Sprintf(message, "** Delete the Current Column ?");
  276. X    else {
  277. X        /* coltoa uses static storage, which we have to get around.  */
  278. X        Sprintf(message, "** Delete the Columns %s:", coltoa(minc) );
  279. X        Sprintf(message + strlen(message), "%s ?", coltoa(maxc) );
  280. X    }
  281. X    }
  282. X
  283. X    /*
  284. X     * Ask user...
  285. X     */
  286. X    if (yn_ask(message) == 1) {
  287. X    if (IsRow)        /* Delete Row(s) */
  288. X        deleterow(minr,maxr);
  289. X    else            /* Delete Column(s) */
  290. X        closecol(minc, maxc);
  291. X    }
  292. X} /* RCDelete() */
  293. X
  294. X
  295. Xvoid RCYank(IsRow)
  296. X/*----------------------------------------------------------------------
  297. X** Yank back previously deleted set of cells, making room for them by
  298. X** inserting enough rows, or columns.
  299. X*/
  300. X    int IsRow;            /* TRUE = a Row, FALSE = Column */
  301. X{
  302. X
  303. X  if (IsRow)            /* Yank Rows */
  304. X      pullcells('r');
  305. X  else                /* Yank Columns */
  306. X      pullcells('c');
  307. X
  308. X} /* RCYank() */
  309. X
  310. X
  311. Xvoid RCMerge()
  312. X/*----------------------------------------------------------------------
  313. X** Yank back previously deleted set of cells.
  314. X** DO NOT make room for them.  Overwrite the contents of
  315. X** any cells at the current cell-cursor position.
  316. X**
  317. X** NOTE: THIS IS IRRESPECTIVE OF "Row" or "Column".
  318. X** It really belongs on the "Edit" Menu, but leave here for now,
  319. X** to be by the "Yank" Command.
  320. X*/
  321. X{
  322. X    if (yn_ask("OVERWRITE current cells with Yanked cells?")) 
  323. X    pullcells('m');
  324. X    
  325. X} /* RCMerge() */
  326. X
  327. X
  328. Xvoid RCCopy(IsRow)
  329. X/*----------------------------------------------------------------------
  330. X** Make a copy (duplicate) of the current row (column), and insert
  331. X** it into the spreadsheet to the right (below) of the current
  332. X** row (column).
  333. X*/
  334. X    int IsRow;            /* TRUE = a Row, FALSE = Column */
  335. X{
  336. X
  337. X    if (IsRow)            /* Hide Row */
  338. X    duprow();
  339. X    else            /* Hide Column */
  340. X      dupcol();
  341. X
  342. X} /* RCCopy() */
  343. X
  344. Xvoid RCHide(IsRow)
  345. X/*----------------------------------------------------------------------
  346. X** Hide some rows (columns).  If a range is defined, hide the
  347. X** number of rows (columns) spanned by the range.  If no range is
  348. X** defined, hide just the current row (column). 
  349. X*/
  350. X    int IsRow;            /* TRUE = a Row, FALSE = Column */
  351. X{
  352. X    RangeGetNum(&minr, &minc, &maxr, &maxc);
  353. X    
  354. X    if (IsRow)            /* Show Hidden Row(s) */
  355. X    hiderow(minr,maxr);
  356. X    else            /* Show Hidden Column(s) */
  357. X    hidecol(minc,maxc);
  358. X
  359. X} /* RCHide() */
  360. X
  361. Xvoid RCShow(IsRow)
  362. X/*----------------------------------------------------------------------
  363. X** Show Hidden Row's (Columns)
  364. X** Shows the *first* hidden row(s) (columns) in the spreadsheet,
  365. X** starting at the left (top).
  366. X*/
  367. X    int IsRow;            /* TRUE = a Row, FALSE = Column */
  368. X{
  369. X    register int i,j;
  370. X
  371. X    
  372. X    if (IsRow) {            /* Show Hidden Row(s) */
  373. X    /**      rowshow_op(); **/
  374. X
  375. X    for (i=0; i<maxrows; i++)     /* STOLEN from "rowshow_op()" */
  376. X        if (row_hidden[i])        /* in "cmds.c" ... */
  377. X        break;
  378. X    for(j=i; j<maxrows; j++)
  379. X        if (!row_hidden[j]) 
  380. X        break;
  381. X    j--;
  382. X
  383. X    if (i>=maxrows) {
  384. X        error ("No hidden rows to show");
  385. X        return;
  386. X
  387. X    } else 
  388. X        Sprintf(line,"show %d:%d", i, j);
  389. X    
  390. X    } else {            /* Show Hidden Column(s) */
  391. X    /**      colshow_op(); **/
  392. X
  393. X    for (i=0; i<maxcols; i++)     /* STOLEN from "colshow_op()" */
  394. X        if (col_hidden[i])        /* in "cmds.c" */
  395. X        break;
  396. X    for(j=i; j<maxcols; j++)
  397. X        if (!col_hidden[j])
  398. X        break;
  399. X    j--;
  400. X
  401. X    if (i>=maxcols) {
  402. X        error ("No hidden columns to show");
  403. X        return;
  404. X    } else {
  405. X        Sprintf(line,"show %s:", coltoa(i));
  406. X        Sprintf(line + strlen(line),"%s",coltoa(j));
  407. X    }
  408. X    }
  409. X    PROCESS_line;
  410. X
  411. X} /* RCShow() */
  412. X
  413. Xvoid RCValueize(IsRow)
  414. X/*----------------------------------------------------------------------
  415. X** Valueize some rows (columns).  If a range is defined, Valueize the
  416. X** number of rows (columns) spanned by the range.  If no range is
  417. X** defined, valueize just the current row (column). 
  418. X*/
  419. X    int IsRow;            /* TRUE = a Row, FALSE = Column */
  420. X{
  421. X    RangeGetNum(&minr, &minc, &maxr, &maxc);
  422. X
  423. X    /*
  424. X     * Set up message to ask user...
  425. X     */
  426. X    if (IsRow) {        /* Valueizing a Row */
  427. X    if (minr == maxr)    /* ...No Range */
  428. X        Sprintf(message, "** Valueize the Current Row ?");
  429. X    else
  430. X        Sprintf(message, "** Valueize the Rows %d:%d ?", minr, maxr);
  431. X
  432. X    } else {            /* Valueizing a Column */
  433. X    if (minc == maxc)    /* ...No Range */
  434. X        Sprintf(message, "** Valueize the Current Column ?");
  435. X    else
  436. X        Sprintf(message, "** Valueize the Columns %s:%s ?",
  437. X            coltoa(minc), coltoa(maxc) );
  438. X    }
  439. X
  440. X    /*
  441. X     * Ask user...
  442. X     */
  443. X    if (yn_ask(message) == 1) {
  444. X    if (IsRow)        /* Valueize Row */
  445. X        valueize_area(minr, 0, maxr , maxcol);
  446. X    else {            /* Valueize Column */
  447. X        valueize_area(0, minc, maxrow, maxc );
  448. X/**        pullcells('c'); **/  /* I dunno *WHY* this is here?  Art M. */
  449. X    }
  450. X    modflg = 1;
  451. X    }
  452. X} /* RCValueize() */
  453. X
  454. X    
  455. Xvoid ColFormat()
  456. X/*----------------------------------------------------------------------
  457. X** Format the current column.  (This is primarily usefull for adjusting
  458. X** the column width.)  There seems to be some overlap here between
  459. X** this funciton and the format function in the edit menu.
  460. X**
  461. X** SHOULD BE FIXED UP
  462. X*/
  463. X{
  464. X    static char temp_str[MAXSTR];
  465. X
  466. X    Sprintf(temp_str, "%d %d %d", fwidth[curcol], precision[curcol],
  467. X        realfmt[curcol]);
  468. X    Sprintf(message,
  469. X        "** Enter format for column %s (width, precision, realfmt)",
  470. X        coltoa(curcol) );
  471. X
  472. X    Message(message);
  473. X    buff = gi_editline(temp_str);
  474. X    ABORT_AND_RETURN_IF_BUFF_NULL;
  475. X
  476. X    Sprintf( line, "format [for column] %s %s", coltoa(curcol), buff);
  477. X    PROCESS_line;
  478. X    
  479. X} /* ColFormat() */
  480. X
  481. X/**********************************************************************
  482. X*       End
  483. X**********************************************************************/
  484. X
  485. END_OF_FILE
  486.   if test 8286 -ne `wc -c <'ss_12b/menu_rowcol.c'`; then
  487.     echo shar: \"'ss_12b/menu_rowcol.c'\" unpacked with wrong size!
  488.   fi
  489.   # end of 'ss_12b/menu_rowcol.c'
  490. fi
  491. if test ! -d 'ss_12b/sc_stuff' ; then
  492.     echo shar: Creating directory \"'ss_12b/sc_stuff'\"
  493.     mkdir 'ss_12b/sc_stuff'
  494. fi
  495. if test -f 'ss_12b/ss.man.A' -a "${1}" != "-c" ; then 
  496.   echo shar: Will not clobber existing file \"'ss_12b/ss.man.A'\"
  497. else
  498.   echo shar: Extracting \"'ss_12b/ss.man.A'\" \(44116 characters\)
  499.   sed "s/^X//" >'ss_12b/ss.man.A' <<'END_OF_FILE'
  500. X'\" t
  501. X.\" Run through tbl first
  502. X.\" **********************************************************************
  503. X.\"              Copyright (c) 1992 by Arthur E. Mulder.
  504. X.\"
  505. X.\"         (See the end of this file for a copyright notice)
  506. X.\" **********************************************************************
  507. X.\" * %M%
  508. X.\" * ss    :       A SpreadSheet Program
  509. X.\" *
  510. X.\" * Art's Spreadsheet program.        Art Mulder ( art@cs.ualberta.ca )
  511. X.\" * University of Alberta, Department of Computing Science.
  512. X.\" **********************************************************************
  513. X.\" * Main Documentation (Man Page)
  514. X.\" **********************************************************************
  515. X.\"
  516. X.\" USAGE: tbl <this file> | nroff -man 
  517. X.\"
  518. X.\" WARNING:
  519. X.\"   1) The string "pname" is converted to the true program name
  520. X.\"      by the makefile, throughout this document.
  521. X.\"   2) The string "#LIBDIR#" is converted to the value of the variable
  522. X.\"     LIBDIR from the Makefile.
  523. X.\"   3) The string "#REVISION#" is converted to the revision number of
  524. X.\"      of the package, as stripped from 'version.c', by 'torev'.
  525. X.\"
  526. X.\" CONVENTIONS:
  527. X.\" - pname italicized and never uppercased (it's a proper name).
  528. X.\" - Refer to lists of commands in the same order as introduced.
  529. X.\" - Command and function names bold when introduced, italicized in all
  530. X.\"   other places if possible, or in `` '' if not.
  531. X.\" - Cell names italicized except when used in expressions; row numbers
  532. X.\"   and column names not italicized.
  533. X.\" - Use `` '' rather than " " except referring to literal input or output.
  534. X.\" - TPs use default indent except for function names, then 18.
  535. X.\" - Smallify uppercase strings.
  536. X.\" - Avoid passive voice and third person.
  537. X.\" $Revision: 6.19 $
  538. X.\" **********************************************************************
  539. X.\"
  540. X.TH PNAME\ #REVISION#\  L
  541. X.SH NAME
  542. Xpname \- simple spreadsheet program
  543. X.SH SYNOPSIS
  544. X.B pname
  545. X[
  546. X.B -c
  547. X]
  548. X[
  549. X.B -m
  550. X]
  551. X[
  552. X.B -r
  553. X]
  554. X[
  555. X.B -x
  556. X]
  557. X[
  558. X.B -C
  559. X]
  560. X[
  561. X.B -R
  562. X]
  563. X[
  564. X.I file
  565. X]
  566. X.\"
  567. X.\" **********************************************************************
  568. X.SH DESCRIPTION
  569. X.\" ***********
  570. X.I pname
  571. Xis a spreadsheet program (big surprise!).  
  572. X.LP
  573. XIt is not another Lotus 1-2-3(tm) or Excel(tm) or etc spreadsheet
  574. Xprogram that consumes megabytes of disk space and is full of whiz-bang
  575. Xgraphics and fonts and so on and so forth that the average user (IMHO)
  576. Xneeds and uses only infrequently.
  577. X.LP
  578. X.I pname
  579. Xis a character based program that should run on any standard ASCII
  580. Xterminal.  It is based on rectangular tables much like a financial
  581. Xspreadsheet.  When invoked it presents you with a table organized as
  582. Xrows and columns of cells \- just like any ``normal'' spreadsheet
  583. Xprogram.  
  584. X.\" ** .LP
  585. X.\" ** For a online tutorial, type the command:
  586. X.\" ** .IP
  587. X.\" ** pname #LIBDIR#/tutorial.pname
  588. X.\" ** .LP
  589. X.\" ** To print a quick reference card, type the command:
  590. X.\" ** .IP
  591. X.\" ** pnameqref | [your_printer_commmand]
  592. X.\"
  593. X.\" **********************************************************************
  594. X.SH OPTIONS
  595. X.\" ***********
  596. X.TP
  597. X.B \-c
  598. XStart the program with the recalculation being done in column order.
  599. X.\" ----------------------------------------------------------------------
  600. X.TP
  601. X.B \-m
  602. XStart the program with automatic recalculation disabled.  The
  603. Xspreadsheet will be recalculated only when the recalc command (see
  604. Xbelow) is used.
  605. X.\" ----------------------------------------------------------------------
  606. X.TP
  607. X.B \-r
  608. XStart the program with the recalculation being done in row order
  609. X(default option).
  610. X.\" ----------------------------------------------------------------------
  611. X.TP
  612. X.B \-x
  613. XCause the data files to be decrypted/encrypted when read/written.  (This
  614. Xoption may not be available at your site, depending on the capabilities
  615. Xof your computer system, check with your system administrator.)
  616. X.\" ----------------------------------------------------------------------
  617. X.TP
  618. X.B \-R
  619. XStart the program with automatic newline action set to increment the
  620. Xrow (see below).
  621. X.\" ----------------------------------------------------------------------
  622. X.TP
  623. X.B \-C
  624. XStart the program with automatic newline action set to increment the
  625. Xcolumn (see below).
  626. X.\" ----------------------------------------------------------------------
  627. X.TP
  628. X.B file
  629. XIf invoked without a
  630. X.I file
  631. Xargument, the table is initially empty.  Otherwise
  632. X.I file
  633. Xis read in.
  634. X.\" ----------------------------------------------------------------------
  635. X.PP
  636. XAll of these options can also be changed from within
  637. X.IR pname .
  638. XThose changes will then be saved when the current spreadsheet is saved,
  639. Xand reloaded when that spreadsheet is read in from disk.  Options
  640. Xspecified when
  641. X.I pname
  642. Xis invoked override options saved in the data file.
  643. X.\"
  644. X.\"
  645. X**********************************************************************
  646. X.SH INTRODUCTION
  647. X.\" ***********
  648. X.I pname
  649. Xis based upon the well-known (?)  public domain spreadsheet program
  650. X.RB `` sc '',
  651. Xversion 6.19.
  652. X.LP
  653. X.I pname
  654. Xis an ``un-moded'' program.  It does not have separate input and output
  655. Xmodes that you toggle between.  To enter numbers into your
  656. Xspreadsheet, go ahead and start typing.  You can enter text the same
  657. Xway, just do it (more detail on these operations below).
  658. X.LP
  659. XIf your keyboard has Arrow keys and/or Page-Up and Page-Down keys,
  660. Xthey should work as you expect them too.  If they don't, talk to
  661. Xwhomever installed this program on your system, it could be a simple
  662. Xterminfo/termcap problem.  If your keyboard doesn't have cursor
  663. Xmovement keys, relax.  When you use
  664. X.I pname 
  665. Xyou can also use the same cursor movement commands as emacs  (more
  666. Xon that below, also).
  667. X.LP
  668. XThere are a wide selection of financial and other ``standard''
  669. Xspreadsheet functions that you can use.  They are listed and explained
  670. Xin detail below.  (Wow, sure must be a lot of stuff below!)
  671. X.LP
  672. XFinally, instead of forcing you to memorize bazillions of different
  673. Xcommands, 
  674. X.I pname
  675. Xplaces most spreadsheet operations (Save, Move, etc) in menus.  These
  676. Xmenus are probably vaguely familiar to you, since they were inspired
  677. Xby a certain well-known DOS spreadsheet program.  Go ahead, hit the
  678. X``/'' key.  You probably will figure many things out without even
  679. Xreading on in this man page.
  680. X.LP
  681. XHowever, you probably should read on, because there's lot's to learn.
  682. XI'd also hate to have typed all this in for nothing!  :-)
  683. X.LP
  684. XNOTE: This man page assumes that the reader has a general familiarity
  685. Xwith spreadsheet programs.
  686. X.\" ----------------------------------------------------------------------
  687. X.SS Screen Layout
  688. X.\" ----------------------------------------------------------------------
  689. XThe screen is divided into four regions.  The top line is for entering
  690. Xcommands/data and displaying cell values.  The second line is for messages
  691. Xfrom
  692. X.IR pname .
  693. XThe third line and the first four columns show the column and row
  694. Xnumbers, from which are derived cell addresses, e.g.
  695. X.I A0
  696. Xfor the cell in column A, row 0.  Note that column names are
  697. Xcase-insensitive: Entering
  698. X.I A0
  699. Xis equivalent to
  700. X.IR a0 .
  701. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  702. X.PP
  703. XThe rest of the screen forms a window looking at a portion of the
  704. Xtable.  The total number of table rows and columns displayed is set
  705. Xby
  706. X.IR curses (3)
  707. Xand may be overridden by setting the LINES and COLUMNS environment
  708. Xvariables, respectively.
  709. X.PP
  710. X.RS
  711. XNote to X-Windows users; Yes you can resize your terminal windows.
  712. XThe next time a command is processed, or the screen is redrawn,
  713. X.I pname
  714. Xwill figure things out and adjust itself.
  715. X.RE
  716. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  717. X.PP
  718. XThe screen has two cursors:  a cell cursor, indicated by a highlighted
  719. Xcell and a ``<'' on the screen, and a character cursor, indicated by
  720. Xthe terminal's hardware cursor.  The cell and character cursors are
  721. Xoften the same.  They differ when you type a command on the top line.
  722. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  723. X.PP
  724. XIf a cell's numeric value is wider than the column width the cell is
  725. Xfilled with asterisks.  If a cell's label string is wider than the
  726. Xcolumn width, it is truncated at the start of the next non-blank cell
  727. Xin the row, if any.
  728. X.\" ----------------------------------------------------------------------
  729. X.SH How Input Is Processed
  730. X.\" ----------------------------------------------------------------------
  731. XLet's assume that you have just started
  732. X.IR pname ,
  733. Xso that you are at the ``top-level'' of input processing.  You enter
  734. Xa keystroke, a number or letter, arrow key or function key.  The
  735. Xprogram reads your input and processes it as follows:
  736. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  737. X.TP
  738. X.B Control-key, Arrow key, or Function key
  739. XThe appropriate function is performed  (ie: Move the cursor to
  740. Xthe next row).  See the section below entitled
  741. X.BR COMMANDS .
  742. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  743. X.TP
  744. X.B `/'
  745. XThe main top-level menu is displayed and the program enters
  746. X``menu-mode''.  See the section below entitled 
  747. X.BR MENUS .
  748. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  749. X.\" ** .IP `?'
  750. X.\" ** Pop-up help is invoked.  CURRENTLY DISABLED.
  751. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  752. X.TP
  753. X.B `0-9',`-',`.',`+',`@'
  754. XIt is assumed that you are entering a number (or a function, in the
  755. Xcase of `@'), into the current cell.
  756. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  757. X.TP
  758. X.B `='
  759. XThis is retained for compatibility with ``sc'' .  It signals that you
  760. Xwish to enter a number/function in the current cell.
  761. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  762. X.TP
  763. X.B `"',`>',`<'
  764. XThese characters indicate that you want to enter a centered,
  765. Xright-justified, or left-justified string into the cell.
  766. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  767. X.TP
  768. X.B Default:
  769. XThe entry of any other character is taken to be a signal that you wish
  770. Xto enter a left-justified string.
  771. X.\"
  772. X.\" **********************************************************************
  773. X.SH MENUS
  774. X.\" ***********
  775. XThe main (top-level) menu is invoked with the `/' key.  
  776. X.LP
  777. XMenus are displayed on the top line of the screen.  Each menu item is
  778. Xusually one (hopefully self-explanatory) word.  Each menu item begins
  779. Xwith a single highlighted letter.  By typing the key corresponding to
  780. Xthe letter \- case is unimportant \- you select that menu item.
  781. X.LP 
  782. XI tried to have all the highlighted letters match the first letter of
  783. Xtheir menu item, but unfortunately there had to be a few exceptions.
  784. XWatch for those!
  785. X.LP
  786. XBy typing a <Return> or a <Space> you will abort out of any menu (no
  787. Xmatter how deep you are into sub-menu's) back to the top-level of the
  788. Xprogram.
  789. X.\" ----------------------------------------------------------------------
  790. X.SS Main Menu
  791. X.BR F :File 
  792. X.BR E :Edit
  793. X.BR C :Cell
  794. X.BR R :Row
  795. X.BR O :Column
  796. X.BR M :Misc
  797. X.BR A :Macro
  798. X.BR Q :Quit
  799. X.LP
  800. XWith the exception of 
  801. X.BR Quit ,
  802. Xall menu items on the Main Menu invoke sub-menus.  See below for
  803. Xexplanations of those.
  804. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  805. X.TP
  806. X.I Quit
  807. XExit from the program.  If there have been any changes in the
  808. Xspreadsheet since the last Load or Save command
  809. X.I pname
  810. Xasks about saving your data before exiting.
  811. X.\" ----------------------------------------------------------------------
  812. X.SS File Sub-Menu
  813. X.BR N :New
  814. X.BR L :Load
  815. X.BR M :Merge
  816. X.BR S :Save
  817. X.BR A :Save As
  818. X.BR W :Write
  819. Xtxt
  820. X.BR T :Tbl
  821. X.RI save( mode )
  822. X.BR Q :Quit
  823. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  824. X.TP
  825. X.I New
  826. XErase the current spreadsheet from memory and start fresh with an
  827. Xempty table.
  828. X.I (Unimplemented)
  829. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  830. X.TP
  831. X.I Load
  832. XLoad (``get'') a new spreadsheet file from disk.  Enter the name of a
  833. Xspreadsheet file to load, followed by <CR>.  If encryption is enabled,
  834. Xthe file is decrypted before it is loaded into the spreadsheet.
  835. X.IP
  836. XNOTE: 
  837. X.I pname
  838. Xfiles are (currently) identical to ``sc'' data files.
  839. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  840. X.TP
  841. X.I Merge
  842. XMerge the spreadsheet from the named file into the current one.
  843. XValues and expressions defined in the named file are read into the
  844. Xcurrent spreadsheet, overwriting the existing entries at matching cell
  845. Xlocations.
  846. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  847. X.TP
  848. X.I Save
  849. XSave (``put'') the current spreadsheet into a file.
  850. XIf encryption is enabled, the file is encrypted before it is saved.
  851. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  852. X.TP
  853. X.I Save As
  854. XPrompt the user to enter a filename, and then save (``put'') the
  855. Xspreadsheet into a file with that name.  If a <CR> is entered, the
  856. Xcurrent default filename is used.  The newly entered filename becomes
  857. Xthe new default filename.  If encryption is enabled, the file is
  858. Xencrypted before it is saved.
  859. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  860. X.TP
  861. X.I Write Txt
  862. XWrite a text-only listing of the current spreadsheet (No functions,
  863. Xetc) into a file in a form that matches its appearance on the screen.
  864. X.IP
  865. XThis differs from the ``Save'' commands in that files saved with those
  866. Xcommands are intended to be reloaded with ``Load'', while ``Write
  867. Xtxt'' produces a file for people to look at.  Hidden rows or columns
  868. Xare not shown when the data is printed.
  869. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  870. X.TP
  871. X.I Table Save
  872. XWrite a text-only listing of the current spreadsheet to a file,
  873. Xbut include delimiters suitable for processing by the
  874. X.IR tbl ,
  875. X.IR LaTeX ,
  876. X.IR TeX ,
  877. Xor 
  878. X.I FrameMaker
  879. Xtable processors.
  880. X.IP
  881. XThe 
  882. X.I tblstyle
  883. Xoption (see the ``Settings'' item on the Misc menu) controls which
  884. Xdelimiters are output.  The delimiters are are a colon (:) for style
  885. X.I 0
  886. X(no style defined) or
  887. X.IR tbl ,
  888. Xand an ampersand (&) for style
  889. X.I LaTeX
  890. Xor
  891. X.IR TeX .
  892. X.IP
  893. XThe current setting of the 
  894. X.I tblstyle 
  895. Xoption is displayed in parentheses after the ``Tbl Save'' entry of the
  896. XFile menu.  A question mark (?) indicates that no style has been defined
  897. X(style 0).
  898. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  899. X.TP
  900. X.I Quit
  901. XExit from the program.  Identical to the Quit option on the main
  902. Xtop-most menu.  (Actually the Quit option on the main top-most
  903. Xmenu is identical to 
  904. X.I this
  905. Xoption, but that really is irrelevant).
  906. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  907. X.PP
  908. XWith the ``Save'', ``Write Text'', and ``Table Save'' commands,
  909. Xit is possible to save a write a subset of the spreadsheet to the
  910. Xoutput file.  To do that, a 
  911. X.I range
  912. Xmust be defined prior to invoking those commands.  See the section
  913. Xbelow on Ranges, for instructions on defining a range.
  914. X.PP
  915. XWith the ``Write Text'' and ``Table Save'' commands, if you try to
  916. Xwrite to the last file used with the ``Load'' or ``Save/Save As''
  917. Xcommands, or the file specified on the command line when
  918. X.I pname
  919. Xwas invoked, you are asked to confirm that the (potentially) dangerous
  920. Xoperation is really what you want.
  921. X.PP
  922. XThe four output commands, (``Save'', ``Save As'', ``Write Text'' and
  923. X``Table Save''), can pipe their (unencrypted only) output to a
  924. Xprogram.  To use this feature, enter ``| program'' to the prompt
  925. Xasking for a filename.  For example, to redirect the output of the
  926. X``Write Text'' command to the printer, you might enter ``| lpr -p''.
  927. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  928. X.\" ** Hmmm, now that I've changed the way input is processed, this 
  929. X.\" ** next feature is no longer available, since I put the "filename"
  930. X.\" ** in quotes.  Can a workaround be discovered somehow?  Hmmm.
  931. X.\" 
  932. X.\" The filename can also be obtained from a cell's label string or string
  933. X.\" expression.  In this case, delete the leading " with the backspace key
  934. X.\" and enter a cell name such as
  935. X.\" .I a22
  936. X.\" instead.  If the resulting string starts with ``|'', the rest of the
  937. X.\" string is interpreted as a
  938. X.\" .SM UNIX
  939. X.\" command, as mentioned above.
  940. X.\"
  941. X.\" ----------------------------------------------------------------------
  942. X.SS Edit Sub-Menu
  943. X.BR C :Copy 
  944. X.BR E :Erase
  945. X.BR N :Name
  946. X.BR L :Lock
  947. X.BR U :Unlck
  948. X.BR F :Format
  949. X.BR I :Fill
  950. X.BR V :Valueize
  951. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  952. X.TP
  953. X.I Copy 
  954. XCopy a source range to a destination range.  The source and
  955. Xdestination may be different sizes.  The result is always one or more
  956. Xfull copies of the source.  Copying a row to a row yields a row.
  957. XCopying a column to a column yields a column.  Copying a range to
  958. Xanything yields a range.  Copying a row to a column or a column to a
  959. Xrow yields a range with as many copies of the source as there are
  960. Xcells in the destination.  This command can be used to duplicate a
  961. Xcell through an arbitrary range by making the source a single cell
  962. Xrange such as
  963. X.IR b20:b20 .
  964. X.IP
  965. XThe Source Range must be defined before selecting this command.
  966. XYou will be prompted to enter a destination range.
  967. X.IP
  968. X.I BUG: 
  969. XYou MUST enter a range, and the range WILL be copied.  If you
  970. Xwant to abort this operation the only current solution is to select
  971. Xyour source range to also be your destination range.  Then there will
  972. Xbe a net effect of zero.  This should be addressed in the next release.
  973. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  974. X.TP
  975. X.I Erase
  976. XClear a range.  Cells cleared with this command may be recalled with
  977. Xthe ``Yank'' or ``Merge'' commands under the Row or Column menus.
  978. X(This is, of course, less than ideal \- this awkwardness is an example
  979. Xof some of the problems that arose in converting from ``sc''.)
  980. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  981. X.TP
  982. X.I Name
  983. XInvoke the Name sub-menu.
  984. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  985. X.TP
  986. X.I Lock
  987. XThis command will lock the current cell -- or a range of cells, if a
  988. Xrange of cells is specified.  Locking will make them immune to any
  989. Xtype of editing. A locked cell can't be changed in anyway until it is
  990. Xunlocked.
  991. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  992. X.TP
  993. X.I UnLock
  994. XIn light of the previous command, the necessity of this command is
  995. Xobvious.  This command will unlock a locked cell and make it editable.
  996. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  997. X.TP
  998. X.I Format
  999. XUse this command to assign a value format string to a range of cells.
  1000. XSee the section ``Formatting Cell Contents'' for details.
  1001. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1002. X.TP
  1003. X.I Fill
  1004. XFill a range with constant values starting with a given value and
  1005. Xincreasing by a given increment.  Each row is filled before moving on
  1006. Xto the next row, if row order recalculation is set.  Column order fills
  1007. Xeach column in the range before moving on to the next column.  The
  1008. Xstart and increment numbers may be positive or negative.  To fill all
  1009. Xcells with the same value, give an increment of zero.
  1010. X.IP
  1011. X.I Example:
  1012. XA Starting value and Increment of "2 5"  (2 is the starting value, 5
  1013. Xis the increment)  will result in the defined range being filled with
  1014. Xthe values 2 7 12 17 22 27 ...
  1015. X.IP
  1016. XA Range must be defined or this command will abort.  (Filling a single
  1017. Xcell is rather a silly thing to do).
  1018. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1019. X.TP
  1020. X.I Valueize
  1021. XValues only.
  1022. XThis command removes the expressions from a range of cells,
  1023. Xleaving just the values of the expressions.
  1024. X.IP
  1025. X.I Example:
  1026. XA cell contains a function which currently evaluates to 12.
  1027. XValueizing that cell would result in the function being removed, and
  1028. Xthe constant value 12 being inserted into the cell.
  1029. X.IP
  1030. X.I BUG:
  1031. X``Valueize'' is almost certainly not a real word.
  1032. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1033. X.LP
  1034. XThe Copy and Erase parts of this section are rather klunky &
  1035. Xkludgy.  It needs work.  One hoped for improvement is to re-do this
  1036. Xsection into a more Macintosh-like setup, with a CUT/COPY/PASTE type of
  1037. Xinterface.  Hopefully this section will be cleaned up in the next
  1038. Xrelease. 
  1039. X.\"
  1040. X.\" ----------------------------------------------------------------------
  1041. X.SS Cell Sub-Menu
  1042. X.BR E :Erase
  1043. X.BR G :Goto
  1044. X.BR M :Mark
  1045. X.BR C :Copy
  1046. Xmarked cell
  1047. X.BR L :edit
  1048. XLabel 
  1049. X.BR V :edit
  1050. XValue
  1051. X.LP
  1052. XThis menu deals with operations that affect the current cell only.
  1053. XAll of these menu items have direct Control- or Function-Key
  1054. Xequivalents.  I suspect that the direct keyboard equivalents will
  1055. Xprove to be more used than this menu.  In which case, this menu will
  1056. Xdisappear with the next release.
  1057. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1058. X.\" ** Erasing a single cell can be accomplished by the Erase
  1059. X.\" ** option of the edit menu, when called WITHOUT a range.
  1060. X.\" ** Hence, it it redundant here.
  1061. X.\" .TP
  1062. X.\" .I Erase
  1063. X.\" Clear the current cell.  Deletes the numeric value, label string,
  1064. X.\" and/or numeric or string expression.  Cells cleared with this command
  1065. X.\" may be recalled with any of the ``pull'' commands (see below).
  1066. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1067. X.\" .TP
  1068. X.\" .I Format
  1069. X.\" Enter a format string into the current cell.  This format string
  1070. X.\" overrides the precision specified with the ``Edit/Format'' command.
  1071. X.\" The format only applies to numeric values.  See the Section on 
  1072. X.\" .B Format
  1073. X.\" for details.
  1074. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1075. X.TP 
  1076. X.I Goto
  1077. XGo to a cell.
  1078. X.I pname
  1079. Xprompts for a cell's name, a regular expression surrounded by quotes,
  1080. Xor a number.  
  1081. X.IP
  1082. XIf a cell's name such as ``ae122 '' or the name of a
  1083. Xdefined range is given, the cell cursor goes directly to that cell.
  1084. XIf a quoted regular expression such as "Tax Table" or "^Jan [0-9]*$"
  1085. Xis given,
  1086. X.I pname
  1087. Xsearches for a cell containing a string matching the regular
  1088. Xexpression.  Note that you must use double quotes (") around a regular
  1089. Xexpression.  See
  1090. X.I regex(3)
  1091. Xor
  1092. X.I ed(1)
  1093. Xfor more details on the form of regular expressions.  
  1094. X.IP
  1095. XIf a number is given,
  1096. X.I pname
  1097. Xwill search for a cell containing that number.
  1098. XSearches for either strings or numbers proceed forward from the
  1099. Xcurrent cell, wrapping back to a0 at the end of the table, and
  1100. Xterminate at the current cell if the string or number is not found.
  1101. X.IP
  1102. XYou may also go to a cell with an ERROR (divide by zero, etc in this
  1103. Xcell) or INVALID (references a cell containing an ERROR).  Entering
  1104. X``error'' (No quotes!  Case unimportant) will take you to the next
  1105. XERROR, while ``invalid'' takes you to the next invalid.  The last goto
  1106. Xcommand is saved, and can be re-issued by entering <return> at the
  1107. XGoto prompt.
  1108. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1109. X.TP 
  1110. X.I Mark
  1111. XMark a cell to be used as the source for the ``Copy Marked Cell''
  1112. Xcommand.
  1113. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1114. X.TP
  1115. X.I Copy Marked Cell
  1116. XCopy the last cell marked with the ``Mark'' command to the current
  1117. Xcell, updating row and column references in its numeric or string
  1118. Xexpression, if any.
  1119. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1120. X.TP
  1121. X.I Edit Label
  1122. XEdit the string associated with the current cell.  A subset of
  1123. X``emacs'' commands are used in this mode.  See ``Emacs Command/Entry
  1124. XEditing'' below.
  1125. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1126. X.TP
  1127. X.I Edit Value
  1128. XEdit the value associated with the current cell.  A subset of
  1129. X``emacs'' commands are used in this mode.
  1130. X.\" ----------------------------------------------------------------------
  1131. X.SS Row & Column Sub-Menu's
  1132. X.BR I :Insert
  1133. X.BR D :Delete
  1134. X.BR Y :Yank
  1135. X.BR M :Merge
  1136. X.BR C :Copy
  1137. X.BR H :Hide
  1138. X.BR S :Show
  1139. X.BR V :Valueize
  1140. X.BR F :Fmt
  1141. X.LP
  1142. XWith the exception of the ``Fmt'' item, the Row and Column Menus are
  1143. Xidentical.  Fmt appears on the Column Menu only.  The operations on
  1144. Xthe two menus are also identical, with the obvious explanation that
  1145. XRow menu commands operate on Rows, and Column menu commands operate on
  1146. XColumns. 
  1147. X.LP
  1148. XCommands which move or copy cells
  1149. Xalso modify the row and column references in affected cell expressions.
  1150. XThe references may be frozen by using the
  1151. X.I fixed
  1152. Xoperator or using the
  1153. X.I $
  1154. Xcharacter in the reference to the cell.
  1155. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1156. X.TP
  1157. X.I Insert
  1158. XInsert some Rows or Columns.  If a range is defined, insert the number
  1159. Xof rows (columns) spanned by the range.  If no range is defined,
  1160. Xinsert just one row (column).  The new row (column) is empty.
  1161. X.IP
  1162. XRows (columns) will be inserted before the current one.
  1163. XIn the case of a range, the 'current' row (column) will be the 
  1164. Xtop-most row (leftmost column).
  1165. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1166. X.TP
  1167. X.I Delete
  1168. XDelete some Rows or Columns.  If a range is defined, delete the 
  1169. Xrows (columns) spanned by the range.  If no range is defined, delete
  1170. Xjust the row (column) where the cell cursor is.
  1171. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1172. X.TP
  1173. X.I Yank
  1174. XYank (Pull) back a previously deleted set of cells, making room for
  1175. Xthem by inserting enough rows, or columns.  They are inserted at the
  1176. Xcurrent cursor location.
  1177. X.IP
  1178. X.I Note:
  1179. XUsing the Row menu to Yank back a deleted Column will insert as many
  1180. Xrows as were in the deleted column.  The same is true of using the
  1181. XColumn menu to yank back a deleted Row.  These ``Features'' are
  1182. Xprobably bugs.
  1183. X.IP
  1184. X.I Bug:
  1185. X(Feature?) This operation will also yank back cells erased with the
  1186. X``Erase'' command on the Edit menu.  In most of those cases though,
  1187. Xyou will probably want to use the Merge command to do that.
  1188. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1189. X.TP
  1190. X.I Merge
  1191. XThis command also yanks back previously deleted cells.  However, it
  1192. Xdoes NOT insert rows or columns to make room for the yanked back
  1193. Xmaterial.  The present contents of any cells (beginning at the current
  1194. Xcell cursor location) will be overwritten.
  1195. X.IP
  1196. XUnlike the yank command, a merged-back column will start at the
  1197. Xcurrent cell cursor location, it will NOT start in row 0.  The same is
  1198. Xtrue of merged-back rows.
  1199. X.IP
  1200. XThis command is the same, whether you select it through the Row menu
  1201. Xor the Column menu.
  1202. X.IP
  1203. XThis operation will also yank back cells erased with the
  1204. X``Erase'' command on the Edit menu. 
  1205. X.IP
  1206. X.I Note:
  1207. XThis command really belongs on the Edit menu.  However, it is
  1208. Xtemporarily staying here, to be by the Yank command, to which it is a
  1209. X``partner''. 
  1210. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1211. X.TP 
  1212. X.I Copy
  1213. XMake a copy (a duplicate really) of the current row (column), and
  1214. Xinsert it into the spreadsheet to the right (below) of the current row
  1215. X(column).
  1216. X.IP
  1217. XThis command operates on only one row (column) at a time.  Any defined
  1218. Xrange is ignored.
  1219. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1220. X.TP 
  1221. X.I Hide
  1222. XHide some rows (columns).  If a range is defined, hide the number of
  1223. Xrows (columns) spanned by the range.  If no range is defined, hide
  1224. Xjust the current row (column).
  1225. X.IP
  1226. XThis keeps a row (column) from being displayed but keeps it in the
  1227. Xspreadsheet.  The status of the rows and columns is saved with the
  1228. Xsheet so hidden rows and columns will be still be hidden when you 
  1229. Xreload the spreadsheet.  Hidden rows or columns are not printed by the
  1230. X``Write Txt'' command.
  1231. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1232. X.TP
  1233. X.I Show
  1234. XShow Hidden Row's (Columns).  Shows the first hidden row(s) (columns)
  1235. Xin the spreadsheet, starting at the left (top).
  1236. X.\" ** in ``sc'' you could enter a range of rows/columns to be
  1237. X.\" ** shown.  Perhaps that can be added back in, for the next release.
  1238. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1239. X.TP
  1240. X.I Valueize
  1241. XValueize some rows (columns).  If a range is defined, Valueize the
  1242. Xnumber of rows (columns) spanned by the range.  If no range is
  1243. Xdefined, valueize just the current row (column).
  1244. X.IP
  1245. XSee the section on ``Valueize'' under the Edit Menu (above) for more
  1246. Xinformation.
  1247. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1248. X.TP
  1249. X.I Fmt (Format)
  1250. XThis option appears on the Column menu only.
  1251. X.IP
  1252. XFormat the current column.  (This is primarily useful for adjusting
  1253. Xthe column width.)  There seems to be some overlap here between this
  1254. Xfunction and the format function in the edit menu.  (as you might have
  1255. Xguessed, this function is a holdover from ``sc'' that I have not
  1256. Xexplored in any great depth.)
  1257. XSHOULD BE FIXED UP.
  1258. X.IP
  1259. X.I (Here's the ``sc'' definition)
  1260. XSet the output format to be used for printing the numeric values in
  1261. Xeach cell in the current column.  Enter three numbers: the total width
  1262. Xin characters of the column, the number of digits to follow decimal
  1263. Xpoints, and the format type.  Format types are 0 for fixed point, 1
  1264. Xfor scientific notation, 2 for engineering notation, and 3 for dates.
  1265. XValues are rounded off to the least significant digit displayed.  The
  1266. Xtotal column width affects displays of strings as well as numbers.  A
  1267. Xpreceding count can be used to affect more than one column. 
  1268. X.\" ----------------------------------------------------------------------
  1269. X.SS Misc Sub-Menu
  1270. X.BR ! :Shell
  1271. XCmd
  1272. X.BR O :Options
  1273. X.BR S :Settings
  1274. X.BR V :show
  1275. XValues
  1276. X.BR E :show
  1277. XExpr.
  1278. X.BR R :Recalc
  1279. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1280. X.TP
  1281. X.I Shell Command
  1282. X.I pname
  1283. Xprompts for a shell command to run.  End the command line with the
  1284. X<RETURN> key.  If the environment variable SHELL is defined, that
  1285. Xshell is run.  If not, /bin/sh is used.  Giving a null command line
  1286. Xstarts the shell in interactive mode.  A second ``!'' repeats the
  1287. Xprevious command.
  1288. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1289. X.TP
  1290. X.I Options
  1291. XInvoke the Options sub-menu.
  1292. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1293. X.TP 
  1294. X.I Settings
  1295. XSet options.  This command allows you to set various options.
  1296. XA small menu lists some of the options that can be changed here.
  1297. X.IP
  1298. XAt the prompt, enter one of the following commands to change a
  1299. Xspreadsheet setting.
  1300. X.RS
  1301. X.TP
  1302. X.\" - - - - - - - - - -
  1303. X.BR byrows /  bycols
  1304. XSpecify the order of cell evaluation when updating.  These options
  1305. Xalso affect the order in which cells are filled (see the Fill command
  1306. Xon the Edit menu).
  1307. X.\" ** and whether a row or column is cleared by an
  1308. X.\" ** .I x
  1309. X.\" ** command.
  1310. X.\" - - - - - - - - - -
  1311. X.TP
  1312. X.BI iterations =n
  1313. XSet the maximum number of recalculations before the screen is
  1314. Xdisplayed again.  Iterations is set to 10 by default.
  1315. X.\" - - - - - - - - - -
  1316. X.TP
  1317. X.BI tblstyle =s
  1318. XControl the output of the Table Save command.
  1319. X.I s
  1320. Xcan be:
  1321. X.B 0
  1322. X(default) to give colon delimited fields, with no 
  1323. X.I tbl
  1324. Xcontrol lines;
  1325. X.B tbl
  1326. Xto give colon delimited fields, with
  1327. X.IR tbl (1)
  1328. Xcontrol lines;
  1329. X.B latex
  1330. Xto give a
  1331. X.I LaTeX
  1332. Xtabular environment; 
  1333. X.B slatex
  1334. Xto give a
  1335. X.I SLaTeX (Scandinavian LaTeX)
  1336. Xtabular environment; 
  1337. X.B tex
  1338. Xto give a
  1339. X.I TeX
  1340. Xsimple tabbed alignment with ampersands as delimiters; and
  1341. X.B frame
  1342. Xto produce a file suitable for reading into 
  1343. X.BR FrameMaker .
  1344. X.\" - - - - - - - - - -
  1345. X.PP
  1346. XOther options are normally used only in
  1347. X.I pname
  1348. Xdata files since they are available through the Options sub-menu.
  1349. XHowever, they can also be set here.  (``sc'' holdover).
  1350. X.TP
  1351. X.BR autocalc / !autocalc
  1352. XSet/clear auto recalculation mode.
  1353. X.\" - - - - - - - - - -
  1354. X.TP
  1355. X.BR prescale / !prescale
  1356. XSet/clear numeric prescale mode.
  1357. X.\" - - - - - - - - - -
  1358. X.TP
  1359. X.BR extfun / !extfun
  1360. XEnable/disable external functions.
  1361. X.\" - - - - - - - - - -
  1362. X.TP
  1363. X.BR cellcur / !cellcur
  1364. XSet/clear current cell highlighting mode.
  1365. X.\" - - - - - - - - - -
  1366. X.TP
  1367. X.BR toprow /  !toprow
  1368. XSet/clear top row display mode.
  1369. X.\" - - - - - - - - - -
  1370. X.TP
  1371. X.BR rndinfinity /  !rndinfinity
  1372. Xdefault: round-to-even (banker's round), *.5 will round to the closest even
  1373. Xnumber; doing a 'set rndinfinity' will round *.5 up to the next integer
  1374. X(rounding to infinity).
  1375. X.\" - - - - - - - - - -
  1376. X.TP
  1377. X.BI craction =n
  1378. XSet the newline action.
  1379. X.I n
  1380. Xcan be:
  1381. X.B 0
  1382. X(default) to give no action;
  1383. X.B 1
  1384. Xto move down after each entry; or
  1385. X.B 2
  1386. Xto move right after each entry.
  1387. X.\" - - - - - - - - - -
  1388. X.TP
  1389. X.BI rowlimit =n
  1390. XSet the remembered limit for the maximum row below which
  1391. Xthe current cell will be moved to the top of the next column
  1392. Xif the newline action is set to move the current cell down.
  1393. X.I n
  1394. Xcan be
  1395. X.B -1
  1396. X(default) to disable this facility.
  1397. X.\" - - - - - - - - - -
  1398. X.TP
  1399. X.BI collimit =n
  1400. XSet the remembered limit for the maximum column to the right of which
  1401. Xthe current cell will be moved to the left of the next row
  1402. Xif the newline action is set to move the current cell right.
  1403. X.I n
  1404. Xcan be
  1405. X.B -1
  1406. X(default) to disable this facility.
  1407. X.RE
  1408. X.\" - - - - - - - - - -
  1409. X.IP
  1410. XNOTE: this menu option is a holdover from the ``sc'' spreadsheet.
  1411. XIt's 
  1412. X.I feel
  1413. Xreally does not match the current user interface, and should be
  1414. Xreworked / replaced for the next release.
  1415. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1416. X.TP 
  1417. X.I Show Values
  1418. XRedraw the screen with special highlighting of cells to be filled in.
  1419. XThis is useful for finding values you need to provide or update in a
  1420. Xform with which you aren't familiar or of which you have forgotten the
  1421. Xdetails.
  1422. X.IP
  1423. XIt's also useful for checking a form you are creating.  All cells
  1424. Xwhich contain constant numeric values (not the result of a numeric
  1425. Xexpression) are highlighted temporarily, until the next screen change,
  1426. Xhowever minor.  To avoid ambiguity, the current range (if any) and
  1427. Xcurrent cell are not highlighted.
  1428. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1429. X.TP
  1430. X.I Show Expr.
  1431. XThis command is similar to
  1432. X.I Show 
  1433. X.IR Values ,
  1434. Xbut highlights cells which have expressions.  It also displays the
  1435. Xexpressions in the highlighted cells as left-flushed strings, instead
  1436. Xof the numeric values and/or label strings of those cells.  This
  1437. Xcommand makes it easier to check expressions, at least when they fit
  1438. Xin their cells or the following cell(s) are blank so the expressions
  1439. Xcan slop over (like label strings).  In the latter case, the slop over
  1440. Xis not cleared on the next screen update, so you may want redraw the
  1441. Xscreen (via
  1442. X.IR ^L )
  1443. Xafter this command in order to clean up the screen.
  1444. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1445. X.TP
  1446. X.I Recalc
  1447. XRecalculates the spreadsheet.
  1448. X.\" ----------------------------------------------------------------------
  1449. X.SS Macro Sub-Menu
  1450. X.BR R :Run
  1451. X.BR D :Define
  1452. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1453. X.TP
  1454. X.I Run
  1455. X(Run macros) Since
  1456. X.I pname
  1457. Xfiles are saved as ASCII files, it is possible to use them as
  1458. Xprimitive macro definition files.  The ``Run'' command makes this
  1459. Xeasier.  It's like the ``File/Merge'' command, but prints a saved path
  1460. Xname as the start of the filename to merge in.  The string to use is
  1461. Xset with the ``Define'' command.  To write macros, you must be
  1462. Xfamiliar with the file format written by the ``File/Save'' commands.
  1463. X.B This facility is still primitive
  1464. X.B and could be much improved.
  1465. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1466. X.TP
  1467. X.I Define
  1468. XDefine a path for the ``Run'' command to use.
  1469. X.\" ----------------------------------------------------------------------
  1470. X.SS Name Sub-Menu
  1471. X.BR D :Define
  1472. XName
  1473. X.BR E :Erase
  1474. XName
  1475. X.BR S :Show
  1476. XNames
  1477. X.LP
  1478. XThis menu is invoked from the Edit menu.
  1479. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1480. X.TP 
  1481. X.I Define Name
  1482. XDefine a Name for a range of cells.  If no range is currently defined,
  1483. Xthen define a name for the current cell.
  1484. X.IP
  1485. XNames defined in this fashion are used by the program in future
  1486. Xprompts, may be entered in response to prompts requesting a cell or
  1487. Xrange name, and are saved when the spreadsheet is saved.  Names
  1488. Xdefined must be more than two alpha characters long to differentiate
  1489. Xthem from a column names, and must not have embedded special
  1490. Xcharacters.  Names may include the character ``_'' or numerals as long
  1491. Xas they occur after the first three alpha characters.
  1492. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1493. X.TP
  1494. X.I Erase Name
  1495. XErase the name assigned to a range of cells.  If no range is currently
  1496. Xdefined, then prompt for a cell name to erase.
  1497. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1498. X.TP
  1499. X.I Show Names
  1500. XList all Names that have been assigned to cells, or ranges of cells.
  1501. XPipe the output to 'sort' and then to a pager.  Therefore the list of
  1502. Xnames is sorted, and it will not run off the top of your display.
  1503. XIf the environment variable PAGER is set, its value is used as your
  1504. Xpager, otherwise a (sytem dependent) default pager is used.
  1505. X\" ----------------------------------------------------------------------
  1506. X.SS Options Sub-Menu
  1507. X.BR X :Encrypt
  1508. X.BR A :Auto
  1509. X.BR C :Cell
  1510. X.BR E :Ext
  1511. Xfn's
  1512. X.BR L :Label
  1513. X.BR R :Return
  1514. X.BR T :Top
  1515. X.BR Z :Limits
  1516. X.BR $ :Pre-Scale
  1517. X.LP
  1518. XThis menu is invoked from the Misc Menu.
  1519. X.LP
  1520. XThe items listed on this menu are all ``Toggle'' Options.  Choosing
  1521. Xone of them will toggle that option to be on or off.  The options
  1522. Xselected are saved when the data and formulas are saved so that you
  1523. Xwill have the same setup next time you enter the spreadsheet.
  1524. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1525. X.TP
  1526. X.I Encrypt
  1527. XTurn encryption of files on/off.
  1528. X.IP
  1529. XNOTE: Encryption may not be available at your sight.  See the ``-x''
  1530. Xitem under
  1531. X.B OPTIONS
  1532. Xabove for further details.
  1533. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1534. X.TP 
  1535. X.I Auto
  1536. XAutomatic Recalculation.  When set, each change in the spreadsheet
  1537. Xcauses the entire spreadsheet be recalculated.  Normally this is not
  1538. Xnoticeable, but for very large spreadsheets, it may be faster to clear
  1539. Xautomatic recalculation mode and update the spreadsheet via explicit
  1540. Xrequests to recalculate the spreadsheet.  (DEFAULT: automatic
  1541. Xrecalculation on)
  1542. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1543. X.TP
  1544. X.I Cell
  1545. XCurrent cell highlighting.  If enabled, the current cell is highlighted
  1546. X(using the terminal's standout mode, if available) in addition to being
  1547. Xmarked by the cell cursor.  (DEFAULT: cell highlighting on)
  1548. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1549. X.TP
  1550. X.I Ext Fn's
  1551. XExternal function execution.  When disabled, external functions (see
  1552. X.IR @ext ()
  1553. Xbelow) are not called.  This saves a lot of time at each screen
  1554. Xupdate.  If disabled, and external functions are used anywhere, a
  1555. Xwarning is printed each time the screen is updated, and the result of
  1556. X.IR @ext ()
  1557. Xis the value from the previous call, if any, or a null string.
  1558. X(DEFAULT: external function execution disabled)
  1559. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1560. X.TP
  1561. X.I Label
  1562. XAutolabeling.  If enabled, using the Define command (on the Name
  1563. Xsub-menu) causes a label to be automatically generated in the cell to
  1564. Xthe left of the defined cell.  This is only done if the cell to the
  1565. Xleft is empty.  (DEFAULT: autolabeling enabled)
  1566. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1567. X.TP
  1568. X.I Return
  1569. XNewline action.  This option toggles between three cases.  The default
  1570. Xis no action.  If this option is used once, after each command which is
  1571. Xterminated by a newline character is completed, the current cell will
  1572. Xbe moved down one row.  If this option is used again, after each
  1573. Xcommand which is terminated by a newline character is completed, the
  1574. Xcurrent cell will be moved right one column.  Another use of this
  1575. Xoption will restore the default action.
  1576. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1577. X.TP
  1578. X.I Top
  1579. XTop line display.  If enabled, the name and value of the current cell
  1580. Xis displayed on the top line.  If there is an associated label string,
  1581. Xthe first character of the string value is ``|'' for a centered
  1582. Xstring, ``<'' for a leftstring or ``>'' for a rightstring (see below),
  1583. Xfollowed by "\fIstring\fP" for a constant string or
  1584. X.RI { expr }
  1585. Xfor a string expression.  A constant string may be preceded with a
  1586. Xbackslash (`\\').  In this case the constant string will be used as a
  1587. X``wheel'' to fill a column, e.g. "\\-" for a line in a column, and
  1588. X"\\Yeh\ " for "Yeh\ Yeh\ Ye".  If the cell has a numeric value, it
  1589. Xfollows as
  1590. X.RI [ value ],
  1591. Xwhich may be a constant or expression.  (DEFAULT: top line display
  1592. Xenabled)
  1593. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1594. X.TP
  1595. X.I Limits
  1596. XSet newline action limits.  This option sets limits to the newline
  1597. Xaction option above.  When this option is invoked, the row and column
  1598. Xof the current cell are remembered.  If a later newline action would
  1599. Xtake the current cell to the right of the remembered column, then the
  1600. Xcurrent cell is instead moved to the first column of the next row.  If
  1601. Xa newline action would take the current cell below the remembered row,
  1602. Xthen the current cell is instead moved to the top row of the next
  1603. Xcolumn.
  1604. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1605. X.TP
  1606. X.I Pre-Scale
  1607. XDollar prescale.  If enabled, all numeric constants (not expressions)
  1608. Xwhich you enter are multiplied by 0.01 so you don't have to keep typing
  1609. Xthe decimal point if you enter lots of dollar figures.
  1610. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1611. X.LP
  1612. XThe ``newline action'' and ``set newline action limits'' options can
  1613. Xbe combined to allow very quick entry of large amounts of data.  If
  1614. Xall the data to be entered is in a single row or column then setting
  1615. Xthe appropriate newline action will allow the numbers to be entered
  1616. Xwithout any explicit commands to position the current cell.
  1617. X.LP
  1618. XIf the data entry involves several entries in each row for many rows,
  1619. Xthen setting the quick numeric entry option, setting the newline
  1620. Xaction to move right after each entry and setting the newline action
  1621. Xlimits on the last column on which data should be entered will allow
  1622. Xthe data to entered quickly.  If necessary, columns which do not need
  1623. Xdata to be entered can be hidden.  Similar arrangements can be made
  1624. Xfor entering several rows of data in each column.
  1625. X.RE
  1626. X.\"
  1627. X.\" **********************************************************************
  1628. X.SH COMMANDS
  1629. X.\" ***********
  1630. X.LP 
  1631. XA number of commands are accessible directly from the keyboard, via
  1632. XControl-keys, or Function-keys.  These are primarily cursor movement
  1633. Xcommands (ie: up-arrow key, etc), but there are also a small number of
  1634. Xcontrol-keys which access other functions.
  1635. X.LP
  1636. X.I NOTE:
  1637. XIn the following 
  1638. X.RB `` ^ ''
  1639. Xindicates the use of the Control key.  Hence,
  1640. X.B ^A
  1641. Xmeans ``Hold down the Control key, while typing the `A' key''.  Also,
  1642. X.B < >
  1643. Xare used to identify ``named'' keys.  So, 
  1644. X.B <Delete>
  1645. Xstands for the Delete Key.
  1646. X.LP
  1647. XThere are also a few commands that are invoked by two keystrokes in
  1648. Xsuccession.  For example, `` ^X v '' means ``Type Control-X, then v''
  1649. X(Case is unimportant, V or v is fine).  Also, ``<Esc> v'' means ``Type
  1650. X<Esc>, then v''.
  1651. XIn some cases, there exists more than one command sequence for the
  1652. Xsame thing.  (Like ^B and <Left Arrow>).  Both commands are then
  1653. Xlisted together, separated by a comma.
  1654. X.\" ----------------------------------------------------------------------
  1655. X.SS Cursor Movement
  1656. XThese key sequences all move the cell cursor.  When possible, I strove
  1657. Xto use the same control-key sequences as the emacs text editor \- no
  1658. Xpoint in reinventing the wheel!
  1659. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1660. X.LP
  1661. XMoving Short Distances:
  1662. X.\" - - - - - - - - - -
  1663. X.RS .15in
  1664. X.TP 2in         .\" the 2in indent stays in effect until the next .RE
  1665. X.B ^B, <Left Arrow>
  1666. XMove left one cell.
  1667. X.TP
  1668. X.B ^F, <Right Arrow>
  1669. XMove right one cell.
  1670. X.TP
  1671. X.B ^P, <Up Arrow>
  1672. XMove up one cell.
  1673. X.TP
  1674. X.B ^N, <Down Arrow>
  1675. XMove down one cell.
  1676. X.\"
  1677. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1678. X.LP
  1679. XMoving Longer Distances:
  1680. X.\" - - - - - - - - - -
  1681. X.RS .15in
  1682. X.TP 1in
  1683. X.B <Esc> <, <Home>
  1684. XJump to cell A0.
  1685. X.TP
  1686. X.B <Esc> >, <End>
  1687. XJump to the last row of the current column.
  1688. X.TP
  1689. X.B ^T
  1690. XJump to row 0 of the current column.
  1691. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1692. X.TP
  1693. X.B ^A
  1694. XJump to the first cell in the current row (Column A).
  1695. X.TP
  1696. X.B ^E
  1697. XJump to the last valid cell in the current row.
  1698. X.\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1699. X.TP
  1700. END_OF_FILE
  1701.   if test 44116 -ne `wc -c <'ss_12b/ss.man.A'`; then
  1702.     echo shar: \"'ss_12b/ss.man.A'\" unpacked with wrong size!
  1703.   elif test -f 'ss_12b/ss.man.B'; then
  1704.     echo shar: Combining  \"'ss_12b/ss.man'\" \(80770 characters\)
  1705.     cat 'ss_12b/ss.man.A' 'ss_12b/ss.man.B' > 'ss_12b/ss.man'
  1706.     if test 80770 -ne `wc -c <'ss_12b/ss.man'`; then
  1707.       echo shar: \"'ss_12b/ss.man'\" combined with wrong size!
  1708.     else
  1709.       rm sss_12b/s.man.A sss_12b/s.man.B
  1710.     fi
  1711.   fi
  1712.   # end of 'ss_12b/ss.man.A'
  1713. fi
  1714. if test ! -d 'ss_12b/sunfkeys' ; then
  1715.     echo shar: Creating directory \"'ss_12b/sunfkeys'\"
  1716.     mkdir 'ss_12b/sunfkeys'
  1717. fi
  1718. echo shar: End of archive 1 \(of 11\).
  1719. cp /dev/null ark1isdone
  1720. MISSING=""
  1721. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  1722.     if test ! -f ark${I}isdone ; then
  1723.     MISSING="${MISSING} ${I}"
  1724.     fi
  1725. done
  1726. if test "${MISSING}" = "" ; then
  1727.     echo You have unpacked all 11 archives.
  1728.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1729. else
  1730.     echo You still must unpack the following archives:
  1731.     echo "        " ${MISSING}
  1732. fi
  1733. exit 0
  1734. exit 0 # Just in case...
  1735.