GENCALC by David F.M. Carmichael from ZX Computing Feb/Mar.1985 A brilliant program from David F M Carmichael of Glasgow. This program has been devised so that the ZX Spectrum and ZX printer can be used to carry out and annotate a wide range of calculations without the necessity of having to write specialised programs for each case. The program operates in a number of different modes which can be selected by codes entered at the key board. The main operating modes (with their appropriate codes) are:- "type": Typewriting mode allowing full typewriting facilities in columns 1-30 of the display with various delete options. "calc": Calculator mode allowing typewriting facilities similar to the above but only in columns 1-15, while allowing the right-hand side of the screen to be used as a calculator. Easy interchange is possible between the typing and calculating sub-modes. "table": User defined formula driven table calculator which can be used with complex arithmetical expressions with up to 3 variables. Optional total facility is available. Two other modes are available: "copy": Copies the screen and gives option to take a further copy if required. "newpage": Copies the screen as above but on completion scrolls the display to the next page. All the above codes are initialised in the program so that in the event of a crash or break in the program, it can be restarted without disturbing the display by using the command GO TO "(whatever code appropriate)". On running the program the prompt "Enter required mode" will appear and the appropriate code should be entered from the keyboard. The computer will not accept spurious codes and will beep to indicate the fact. (Indeed all through the program spurious entries will get the same treatment, with one notable exception in "table" mode). Detailed instructions for each mode are as follows: "type": Flashing "T" cursor displayed initially. Simulates typewriter for all key entries (except for those below). A warning beep is given when the cursor reaches column 25 and a double beep at column 30. The cursor automatically moves on to the next line but there is no autorepeat for key entry. Special key entries (with shift where appropriate) are:- 'DELETE' : Autorepeat backspace/delete 'ENTER' : Autorepeat new line 'EDIT' : Gives "Enter required mode" prompt 'STOP' : Stop program 'Cursor : Gives line delete cursor Left' (flashing "*" in column 0). With line delete cursor the following key entries (with shift where appropriate) can be used. Cursor Up Moves cursor in appropriate Cursor Down direction (autorepeat). 'DELETE' Deletes whole line to the right of the cursor. Cursor Right Returns to normal typewriter state with "T" cursor on column 1 of the line to the right of the cursor. NOTE: When the bottom of the screen is reached either by normal typing or by use of the newline command the screen prompt "Screen full - go to next page?" will appear. If the 'N' key is pressed this prompt will disappear and the option of obtaining and using the delete cursor is open. If the 'Y' key is pressed an automatic copy/newpage sequence is initiated. 'note' Flashing 'N' cursor shows initially. Simulates typewriter sub-mode as in "type" mode but only in left hand side of screen. The delete cursor is a flashing "+" and will only delete one half of the line. All control key entries are the same as for "type" mode with the following additions: "N" Cursor right goes to 'calculator' sub-mode. A flashing cursor "<" cursor will appear on the right of the screen marking the print line. "+" Provided that no calculation is in progress the key cursor entry "Cursor Left" will move the delete cursor (behind the screen as it were) to the right side of the screen. Here it can be used to delete any entries on that side. At this point "Cursor Right" will return the cursor to the left hand side of the screen. It is not possible to go to the calculator sub-mode directly with the "+" cursor on the right hand side. "Calculator" sub-mode The prompt will ask for number or operator entry. Number of entries must be no more than 8 characters long. Spurious entries will be beeped. Relevant operators are: "+" for addition "-" for subtraction "*" for multiplication "/" for division "+%" calculates % and adds result to running total "-%" calculates % and subtracts result from running total "sub" gives subtotal (marked with symbol ">") "total" gives total "note" returns to "note" sub-mode. Notes The calculator will only work if numbers are displayed in normal notation. Where subtotals or totals are such that the computer would require to use exponent notation for display then a series of beeps will occur and the total or subtotal will appear as a line of asterisks. Automatic subtotalling takes place where this will clarify the display. Where the screen is filled in the 'note' sub-mode the option to continue or to select the line delete cursor is given as for 'type'. However if the screen is filled in 'calculator' sub-mode the copy/newpage sequence is automatically initiated. 2, 3 or 4 columns can be chosen and after entering the number required the code letters for the columns are displayed ('a' 'b' 'c' and 'd' with the right hand column always being 'd'). Column descriptions up to seven characters long can now be systematically entered (and corrected if necessary). The formula is now entered. This can be any arithmetical expression up to 30 characters long but must use the code letters of the columns. The computer will display "d =" and only the right hand side of the equation is entered. The calculator is normally set to give a max of six decimal places but the opportunity is now given to alter this. Entry prompts will now appear systematically (using the column descriptions already entered). Entries with more than seven characters will be refused (and beeped). Any non numeric entry will also be beeped but will be accepted (for reasons noted below). The opportunity is given to check all entries before computation of the value in column (d) is carried out. Non numeric entries are acceptable provided the column is not being included in the calculation (eg. if formula is d = b * c then column (a) can be used as columns used for computation will result in an error. As in "calc" any total in column (d) outwith normal numeric display will be printed as asterisks (with appropriate beeps). After each line the opportunity is given to continue the calculation or to stop and if the latter the option of a total of column (d) is given. Unlike the intermediate line totals the total of column (d) can be displayed in either normal or exponent notation and thus can be any number within the range of the computer. On completion of all calculations the computer displays the "Enter required mode" prompt. NOTE: If on first selecting the "table" mode the print cursor is below line 15 the computer will automatically give a new page. Subsequent automatic copy/newpage sequences will take place at line 19 and the current column headings will be displayed automatically at the top of the new page. Technical notes 'Descriptive' variables are used throughout the program and most of these are self explanatory. Various flags are also used and these are noted below: notec : Determines which prompt is given in 'calculator' sub-mode of "calc" when changing from 'note' sub-mode. (If 0 then 'number' is prompted. If 1 then 'operator' is prompted). subtf : Controls whether automatic subtotalling will take place on entry of certain operators. If 0 then no subtotalling takes place. The subtotal routine automatically resets this flag to 0. calcf : Controls whether automatic subtotalling takes place after calculation. In the case of addition + subtraction this remains 0 but other operators such as "*" or "/" set this to 1. Like subtf this is reset to 0 after subtotalling. cursf : Is set to 1 as soon as calculation starts and controls movement of line delete cursor to right hand side of screen (which can only happen when this flag = 0). totf : Determines whether total is in normal or exponent notation and sets print position accordingly. nof : Set at 1 by "no check" routine (Line 9700) if entry is non-numeric; otherwise 0. Variables The following non-descriptive variables are used: a$,b$ General purpose non-dimensioned. d$(4,7) Column descriptions in 'table' mode. e$(4,7) Input information in 'table' mode. a,b,c,d,e,f General purpose variables. t 'table' total x,y General print position controls. z Special print position control used in 'table' mode (see line 4220 and similar). Functions Two used defined functions are included: Line 9800 Controls no. of decimal points. Line 9810 % function used in 'calc' mode. -- Another Fine Product transcribed by: Jim Grimwood (jimg@globalnet.co.uk), Weardale, England --