home *** CD-ROM | disk | FTP | other *** search
- /*
- * Help functions for sc
- * R. Bond, 1988
- * $Revision: 6.8 $
- */
-
- #include <curses.h>
- #include "sc.h"
-
- char *intro[] = {
- " ",
- " Overview:",
- " ",
- " A: This overview",
- " B: Options",
- " C: Cursor movement commands",
- " D: Cell entry and editing commands",
- " E: Line Editing",
- " F: File commands",
- " G: Row and column commands",
- " H: Range commands",
- " I: Miscellaneous commands",
- " J: Variable names/Expressions",
- " K: Range functions",
- " L: Numeric functions",
- " M: String functions",
- " N: Financial functions",
- " O: Time and date functions",
- " ",
- " Q: Return to main spreadsheet",
- (char *)0
- };
-
- char *options[] = {
- " ",
- " B: Options",
- " ",
- " ^To Toggle options. Toggle one option selected by o:",
- " ",
- " a Recalculate automatically or on ``@'' commands.",
- " c Current cell highlighting enable/disable.",
- " e External function execution enable/disable.",
- " n If enabled, a digit starts a numeric value.",
- " t Top line display enable/disable.",
- " x Encrypt/decrypt database and listing files.",
- " $ Dollar prescale. If enabled, all numeric constants.",
- " (not expressions) entered are multipled by 0.01.",
- " ",
- " S Set options. Options include:",
- " ",
- " byrows Recalculate in row order. (default)",
- " bycols Recalculate in column order.",
- " iterations=n Set the number of iterations allowed. (10)",
- " tblstyle=xx Set ``T'' output style to:",
- " 0 (none), tex, latex, or tbl.",
- (char *)0
- };
-
- char *cursor[] = {
- " ",
- " C: Cell cursor movement (always OK):",
- " ",
- " ^N ^P ^B ^F Down, up, back, forward",
- " ^Ed Go to end of range. Follow ^E by a direction indicator",
- " such as ^P or j.",
- " Arrow keys (if the terminal and termcap support them.)",
- " ",
- " Cell cursor movement if no prompt active:",
- " j,k,l,h Down, up, right, left",
- " SPACE Forward",
- " ^H Back",
- " TAB Forward, otherwise starts/ends a range",
- " ^ Up to row 0 of the current column.",
- " # Down to the last valid row of the current column.",
- " 0 Back to column A. Preface with ^U if numeric mode.",
- " $ Forward to the last valid column of the current row.",
- " b Back then up to the previous valid cell.",
- " w Forward then down to the next valid cell.",
- " g Go to a cell. Cell name, range name, quoted string,",
- " or a number specify which cell.",
- (char *)0
- };
-
-
- char *cell[] = {
- " ",
- " D: Cell entry and editing commands:",
- " ",
- " = Enter a numeric constant or expression.",
- " < Enter a left justified string or string expression.",
- " \",> Enter a right justified string or string expression.",
- " e Edit the current cell's numeric value.",
- " E Edit the current cell's string part.",
- " x Clear the current cell.",
- " c Copy the last marked cell to the current cell.",
- " m Mark a cell to be used as the source for ``c''",
- " + Increment numeric part",
- " - Decrement numeric part",
- " ",
- " In numeric mode, a decimal digit, ``+'', ``-'', and ``.'' all start",
- " a new numeric constant or expression.",
- (char *)0
- };
-
-
- char *vi[] = {
- " ",
- " E: Line Editor",
- " ",
- " Hitting the ESC key while entering any command on the top line",
- " will start a one-line vi-style editor. Supported commands:",
- " ",
- " ESC q Abort command entry.",
- " h l Move cursor forward, backward.",
- " 0 $ Move cursor to the beginning, end of the line.",
- " b w Move cursor forward/back one word.",
- " fc Move cursor to character c.",
- " tc Move the cursor the the character before c.",
- " i a Enter insert mode before/after the cursor.",
- " I Move to cursor column 0 and enter insert mode.",
- " x X Delete the character under/before the cursor.",
- " rc Replace the character under the cursor with c.",
- " cm Change - m = b,f,h,l,t or w.",
- " dm Delete - m = b,f,h,l,t or w.",
- " R Enter replace (overstrike) mode.",
- " + j - k / Forward/backward/search the command history.",
- " n Repeat last history search.",
- " . u Repeat/undo the last command.",
- (char *)0
- };
-
- char *file[] = {
- " ",
- " F: File commands:",
- " ",
- " G Get a new database from a file. ",
- " M Merge a new file into the current database.",
- " P Put the current database into a file.",
- " W Write a listing of the current database into a file in",
- " a form that matches its appearance on the screen.",
- " T Write a listing of the current database to a file, but",
- " put delimiters between each pair of fields.",
- " Optionally brackets output with control lines for ``tbl'',",
- " ``LaTeX'', or ``TeX''.",
- " ",
- " If encryption mode is set, file I/O will be encrypted/decrypted.",
- " ``\"| program\"'' for a file name will pipe (unencrypted) output to",
- " a program for Put, Write and Table. If a cell name is used",
- " as the file name, the cell's string part will be used as the",
- " file name.",
- (char *)0
- };
-
-
- char *row[] = {
- " ",
- " G: Row and column commands:",
- " ",
- " ir, ic Insert a new, empty row (column)",
- " ar, ac Append a new copy of the current row (column)",
- " dr, dc Delete the current row (column)",
- " pr, pc, pm Pull deleted cells back into the spreadsheet",
- " Insert rows, columns or merge the cells.",
- " vr, vc Remove expressions from the affected rows (columns),",
- " leaving only the values.",
- " zr, zc Hide (``zap'') the current row (column)",
- " sr, sc Show hidden rows (columns)",
- " f Set the output format to be used with the values of",
- " each cell in this column. Enter field width and",
- " number of fractional digits. A preceding count can be",
- " used to change more than one column.",
- " ",
- " Commands which move or copy cells also modify the row and column ",
- " references in the new cell expressions. Use ``fixed'' or the",
- " ``$'' style cell reference to supress the change.",
- (char *)0
- };
-
-
- char *range[] = {
- " ",
- " H: Range commands:",
- " ",
- " /x Clear a range. ",
- " /v Remove the expressions from a range of cells, leaving ",
- " just the values.",
- " /c Copy a source range to a destination range.",
- " /f Fill a range with constant values starting with a given",
- " value and increasing by a given increment.",
- " /d Assign a name to a cell or a range of cells. Give the",
- " the name, surrounded by quotes, and either a cell name such",
- " as ``A10'' or a range such as ``a1:b20''.",
- " /s Shows the currently defined range names. Pipe output to",
- " sort, then to less.",
- " /u Use this command to undefine a previously defined range",
- " name.",
- " ",
- " Range operations affect a rectangular region on the screen",
- " defined by the upper left and lower right cells in the region.",
- " A range is specified by giving the cell names separated by ``:'',",
- " such as ``a20:k52''. Another way to refer to a range is to use",
- " a name previously defined using ``/d''.",
- (char *)0
- };
-
-
- char *misc[] = {
- " ",
- " I: Miscellaneous commands:",
- " ",
- " Q q ^C Exit from the program.",
- " ^G ESC Abort entry of the current command.",
- " ? Help",
- " ! Shell escape. Enter a command to run. ``!!'' repeats",
- " the last command. Just ``!'' starts an interactive shell.",
- " ^L Redraw the screen.",
- " ^R Redraw the screen. Highlight cells with values but no",
- " expressions.",
- " ^X Redraw the screen. Show formulas, not values.",
- " @ Recalculate the spreadsheet.",
- " ^V Type, in the command line, the name of the current cell.",
- " ^W Type, in the command line, the current cell's expression.",
- " ^A Type, in the command line, the current cell's numeric value.",
- " TAB When the character cursor is on the top line TAB can be used",
- " to start or stop the display of the default range.",
- (char *)0
- };
-
- char *var[] = {
- " ",
- " J: Variable names:",
- " ",
- " K20 Row and column can vary on copies.",
- " $K$20 Row and column stay fixed on copies.",
- " $K20 Row can vary; column stays fixed on copies.",
- " K$20 Row stays fixed; column can vary on copies.",
- " fixed holds following expession fixed on copies.",
- " Cells and ranges can be given a symbolic name via ``/d''.",
- " ",
- " Expressions:",
- " -e Negation e<=e Less than or equal",
- " e+e Addition e=e Equal",
- " e-e Subtraction e!=e Not Equal",
- " e*e Multiplication e>=e Greater than or equal",
- " e/e Division e>e Greater than",
- " e%e Modulo e<e Less than",
- " e^e Exponentiation e&e Boolean operator AND.",
- " ~e Boolean operator NOT e|e Boolean operator OR",
- " e?e1:e2 or @if(e,e1,e2)",
- " Conditional: If e is non zero then then e1, else e2.",
- " Terms may be constants, variables, and parenthesized expressions.",
- (char *)0
- };
-
- char *rangef[] = {
- " ",
- " K: Range functions:",
- " ",
- " @sum(r) Sum all valid cells in the range.",
- " @prod(r) Multiply together all valid cells in the range.",
- " @avg(r) Average all valid cells in the range.",
- " @count(r) Count all valid cells in the range.",
- " @max(r) Return the maximum value in the range.",
- " @min(r) Return the minimum value in the range.",
- " @stddev(r) Return the sample standard deviation of ",
- " the cells in the range.",
- " @index(e,r) @stindex(e,r)",
- " Return the numeric (string) value of the cell at",
- " index e into range r.",
- " @lookup(e,r) @hlookup(e,r,n) @vlookup(e,r,n)",
- " Search through the range r for a value that",
- " matches e. If e is numeric, the last value <= e",
- " matches; if string, an exact match is required.",
- " @lookup searches a single row (column) and returns",
- " the value from the next column (row); @hlookup",
- " (@vlookup) searches the first row (column) in r and",
- " returns the value n columns (rows) from the match.",
- (char *)0
- };
-
- char *numericf[] = {
- " ",
- " L: Numeric functions:",
- " ",
- " @atan2(e1,e2) Arc tangent of e1/e2.",
- " @ceil(e) Smallest integer not less than e.",
- " @eqs(se1,se2) 1 if string expr se1 has the same value as se2.",
- " @exp(e) Exponential function of e.",
- " @abs(e) @fabs(e) Absolute value of e.",
- " @floor(e) The largest integer not greater than e.",
- " @hypot(x,y) Sqrt(x*x+y*y).",
- " @max(e1,e2,...) The maximum of the values of the e's.",
- " @min(e1,e2,...) The minimum of the values of the e's",
- " @nval(se,e) The numeric value of a named cell.",
- " pi A constant quite close to pi.",
- " @pow(e1,e2) e1 raised to the power of e2.",
- " @rnd(e) Round e to the nearest integer.",
- " @round(e,n) Round e to n decimal places.",
- " @sqrt(e) Square root of e.",
- " @ston(se) Convert string expr se to a numeric",
- " @ln(e) @log(e) Natural/base 10 logarithm of e.",
- " @dtr(e) @rtd(e) Convert degrees to/from radians.",
- " @cos(e) @sin(e) @tan(e) Trig functions of radian arguments.",
- " @asin(e) @acos(e) @atan(e) Inverse trig function.",
- (char *)0
- };
-
- char *stringf[] = {
- " ",
- " M: String functions:",
- " ",
- " # Concatenate strings. For example, the",
- " string expression ``A0 # \"zy dog\"'' yields",
- " ``the lazy dog'' if A0 is ``the la''.",
- " @substr(se,e1,e2) Extract characters e1 through e2 from the",
- " string expression se. For example,",
- " ``@substr(\"Nice jacket\" 4, 7)'' yields ",
- " ``e jac''.",
- " @fmt(se,e) Convert a number to a string using sprintf(3).",
- " For example, ``@fmt(\"*%6.3f*\",10.5)'' yields",
- " ``*10.500*''. Use formats are e, E, f, g, and G.",
- " @sval(se,e) Return the string value of a cell selected by name.",
- " @ext(se,e) Call an external function (program or",
- " script). Convert e to a string and append it",
- " to the command line as an argument. @ext yields",
- " a string: the first line printed to standard",
- " output by the command.",
- " String expressions are made up of constant strings (characters",
- " surrounded by quotes), variables, and string functions.",
- (char *)0
- };
-
-
- char *finf[] = {
- " ",
- " N: Financial functions:",
- " ",
- " @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",
- " of 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 com-",
- " pounded 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 30 years if I",
- " pay $1000 per month?''",
- (char *)0
- };
-
-
- char *timef[] = {
- " ",
- " O: Time and date functions:",
- " ",
- " @now Return the time encoded in seconds since 1970.",
- " @dts(m,d,y) Return m/d/y encoded in seconds since 1970.",
- " @tts(h,m,s) Return h:m:s encoded in seconds since midnight.",
- " ",
- " All of the following take an argument expressed in seconds:",
- " ",
- " @date(e) Convert the time in seconds to a date",
- " string 24 characters long in the following",
- " form: ``Sun Sep 16 01:03:52 1973''. Note",
- " that you can extract pieces of this fixed format",
- " string with @substr.",
- " @year(e) Return the year. Valid years begin with 1970.",
- " @month(e) Return the month: 1 (Jan) to 12 (Dec).",
- " @day(e) Return the day of the month: 1 to 31.",
- " @hour(e) Return the number of hours since midnight: 0 to 23.",
- " @minute(e) Return the number of minutes since the",
- " last full hour: 0 to 59.",
- " @second(e) Return the number of seconds since the",
- " last full minute: 0 to 59.",
- (char *)0
- };
- void
- help()
- {
- int option;
- char **ns = intro;
-
- while((option = pscreen(ns)) != 'q' && option != 'Q') {
- switch (option) {
- case 'a': case 'A': ns = intro; break;
- case 'b': case 'B': ns = options; break;
- case 'c': case 'C': ns = cursor; break;
- case 'd': case 'D': ns = cell; break;
- case 'e': case 'E': ns = vi; break;
- case 'f': case 'F': ns = file; break;
- case 'g': case 'G': ns = row; break;
- case 'h': case 'H': ns = range; break;
- case 'i': case 'I': ns = misc; break;
- case 'j': case 'J': ns = var; break;
- case 'k': case 'K': ns = rangef; break;
- case 'l': case 'L': ns = numericf; break;
- case 'm': case 'M': ns = stringf; break;
- case 'n': case 'N': ns = finf; break;
- case 'o': case 'O': ns = timef; break;
- default: ns = intro; break;
- }
- }
- FullUpdate++;
- (void) move(1,0);
- (void) clrtobot();
- }
-
- pscreen(screen)
- char *screen[];
- {
- int line;
- int dbline;
-
- (void) move(1,0);
- (void) clrtobot();
- dbline = 1;
- for (line = 0; screen[line]; line++) {
- (void) move(dbline++, 4);
- (void) addstr (screen[line]);
- (void) clrtoeol();
- }
- (void) move(0,0);
- (void) printw("Which Screen? [a-n, q]");
- (void) clrtoeol();
- (void) refresh();
- return(nmgetch());
- }
-