Programs for Real Applications

Products:
Developer(s): Randle Hurley
Date: 198x
Type: Cassette
Platform(s): TS 1000

This collection comprises several interconnected BASIC programs from The Sinclair ZX81: Programming for Real Applications by Randle Hurley, covering cash handling routines, a word processor, a school banking system, personal finance management, exam results analysis, a rank-order scoring system, and a bulk data storage and retrieval system. The cash handling subroutines (lines 10–74) are designed as reusable modules that can be embedded in other programs, using a balance variable BL with debit/credit logic and rounding via INT(BL*100+.5)/100 to handle two decimal place currency arithmetic. The Word Juggler word processor stores paragraph text as 160-character fixed-width strings in BASIC line data (using paired GOSUB/RETURN lines as a data table), then writes paragraphs directly into display file memory using POKE with addresses derived from PEEK(16396) and PEEK(16397). The Record program encodes up to four attributes per item into single numeric variables by multiplying each field value by powers of ten (B=10 through H=10000000), packing multiple data fields into one number and later extracting them by string slicing on STR$. The exam analysis and rank-order programs use DIM arrays for student records and support batch score entry, subject-code searching, and grade-range filtering entirely in BASIC without machine code.


Program Analysis

This collection consists of seven distinct programs, each saved as a separate tape track. They share a common set of subroutines for cash input, confirmation, and date entry (lines 10–74), which are duplicated verbatim across several programs. Most programs are designed to be modular: subroutines can be called from host programs the user writes themselves.

Shared Utility Subroutines (Lines 10–74)

These subroutines appear identically in at least five of the programs:

  • GOSUB 10: Prompts for a monetary amount into AJ, confirms via GOSUB 70, loops until confirmed.
  • GOSUB 30: Negates AJ and adds to balance BL (debit).
  • GOSUB 35: Adds AJ directly to BL (credit).
  • GOSUB 45: Prints balance, showing “OVERDRAWN BY” in inverse video if BL<0, else “IN CREDIT”. Rounds using INT(BL*100+.5)/100.
  • GOSUB 60: Three-field date entry (day, month, two-digit year) into D1, D2, D3, confirmed via GOSUB 70.
  • GOSUB 70: Generic “KEY C IF OK” confirmation prompt, result in A$.

Program 1: Cash Handling Routines (CASH 1)

A short demonstration program containing only the shared subroutines. Line 1 redirects with GOTO 200, but no line 200 exists in this program — it is intended as a subroutine library to be incorporated into other programs, not run standalone.

Program 2: Load Check

A trivial tape-verification program. It prints a confirmation message and halts with STOP. Line 30 saves itself and line 40 restarts the display loop. Its sole function is to confirm that a LOAD operation succeeded.

Program 3: Safe Numerical Input (SAFE)

A robust numeric input subroutine that accepts only digit characters and at most one decimal point. It uses CODE A$ to inspect the first character of the input string, consuming the string one character at a time via A$(2 TO ). Digits 1–9 map to A-28 (ZX81 character codes 29–37), and the decimal point (code 27) sets a position marker X. Values are reconstructed using positional arithmetic with 10**(X-J) and 10**(X-J-1). The letters I and O (which visually resemble 1 and 0) are not explicitly substituted in this version, contrary to the catalog description.

Program 4: Word Juggler (WORD 1 and WORD 2)

A full-screen word processor storing text as 160-character fixed-width strings distributed across even-numbered BASIC lines from 100 to 216 (WORD 1) or 210 (WORD 2), with each paragraph occupying three consecutive string-assignment lines. The display engine (subroutine at line 910) calls these lines dynamically using computed GOSUB P*2+98, GOSUB P*2+100, and GOSUB P*2+102 — an elegant dispatch table technique using paired LET/RETURN lines as data records.

The memory address of the current display line is found at line 900 using PEEK(16396)+PEEK(16397)*256, the system variable holding the display file start address. Text is written character-by-character via POKE at offset A+C. The current cursor character is shown in inverse video by adding 128 to its character code. FAST/SLOW mode is toggled around POKE-heavy operations for speed.

WORD 2 adds a readability index, tracking word count (WD), sentence count (ST), and letter count (LT) in the line-store loop (lines 1331–1337), displaying ratios words-per-sentence and letters-per-word at line 20. It also adds a period character substitution at line 1150 (code 11 → period glyph).

FeatureWORD 1WORD 2
Max paragraphs5754
Readability indexNoYes (WD, ST, LT)
Menu options67
Read start paragraph12

The deletion routine (line 4000) zeroes 192 bytes of memory via POKE for the selected paragraph and increments P to continue deleting. This is an iterative delete-forward design with no compaction of subsequent paragraphs. The filing routine saves the entire program (including text data embedded in BASIC lines) with SAVE.

Program 5: School Banking System (BANK)

Manages up to 200 accounts in array A(200). Interest is calculated at line 540–560 using a day-count loop that correctly accounts for month lengths (28/30/31 days) and year rollovers, with the formula A(J)+A(J)*D8*R/36500 (daily rate from annual percentage). Accounts below 10 units are excluded from interest. The system supports deposits, withdrawals, withdrawal notices (printed via LPRINT), end-of-business statements, monthly balance sheets listing all 200 accounts two per line, and opening of new accounts by scanning for a zero-balance slot. The entire program state (including all account balances) is preserved by saving the program with SAVE "BANK".

Program 6: Personal Finances — CASH 2 and CASH 3

Both programs track a personal bank balance with standing orders encoded in three arrays: M(10) for monthly amounts, Q(10) for quarterly (amount packed as fractional part × 1000 + start month in integer part), and N(10) similarly for annual orders. This packing technique stores two values in one floating-point variable. The quarterly trigger logic at lines 120–150 tests seven possible quarterly offsets from the base month to handle wrap-around across year boundaries.

CASH 2 includes a full setup routine (line 300) and cheque book tracking (C, C1, C2) with paying-in slip numbers (C3). CASH 3 omits the setup routine (the “KEY S” option is removed from the menu), assuming the user will set variables directly in programming mode, saving roughly half a minute of load time.

Program 7: Exam Results Analysis (EXAM)

Stores student exam data in two string arrays: G$(G, 2*X+6) for girls and B$(B, 2*X+6) for boys, where X is the maximum number of exams. Each row holds a 6-character date-of-birth field followed by exam code/grade pairs packed into two characters each. Searches include DOB sort (filtering on the second digit of the birth year at position 2), subject search with grade-range filtering using CODE comparisons, and O-level pass counting (grades A, B, C, or 1). An interim save option at line 6000 saves mid-entry and resumes data entry at the current student.

A notable anomaly: the DOB sort at line 3050 only prints students whose second DOB digit equals “5” — this appears to be a hardcoded birth-decade filter for a specific cohort rather than a general sort routine.

Program 8: Rank Order (RANK)

Accepts scores for up to any number of students across multiple tests in blocks of 10, using array Y(10) as a 10-element input buffer. Scores of C+1 (one above maximum) represent absent/missing data and are excluded from totals and test counts stored in E(N) and F(N). Final percentages are calculated as E(N)*(100/C)/(F(N)+.001), the +.001 preventing division by zero for students with no scores. Results are printed in ascending order by iterating P from 0 to 100, printing matching students at each level — an O(100×N) scan rather than a sort. After filing, line 1060 uses IF X<>1 THEN RUN to re-enter the results loop; since X is set to 1 at line 1010, this branch never executes after a normal save.

Program 9: Bulk Data Storage (RECORD)

Stores up to 16 named attributes per item by packing multiple values into four numeric variables (A(J) through D(J)) using multiplier constants B=10 through H=10000000. Each variable holds four attributes separated by three orders of magnitude. Retrieval uses STR$ to convert the packed number back to a string, then VAL A$(X TO Y) to extract specific digit positions defined by lookup table logic at lines 1300–1420. A sentinel value of +H (10000000) is added to mark the last field in each group (lines 260, 480, 610, 830), so that extraction offsets work correctly.

Search operates in two modes: initial search (line 1500) scans all Z items and sets E(J)=1 for matches; subsequent search (line 1700) filters only items already flagged E(J)=1, enabling progressive narrowing. The menu uses LET R=VAL A$ and sequential IF tests rather than ON/GOTO. Notably, line 2160 sends option 3 (Store Data) to line 100 which is the data entry loop — this appears to be a bug; the store/save function is at line 2190 and option 3 was presumably intended to save, not re-enter data.

Notable Techniques Across the Collection

  • Computed GOSUB using arithmetic expressions (GOSUB P*2+98) as a data dispatch table — avoids ON/GOSUB and works within ZX81 BASIC constraints.
  • Packing two values into one floating-point number (integer part = one value, fractional part × 1000 = another) used in standing order encoding.
  • Direct display file manipulation via PEEK(16396)/PEEK(16397) for word processor cursor rendering.
  • Currency rounding via INT(X*100+.5)/100 throughout.
  • Program state persistence by saving the entire BASIC program including array data with SAVE.
  • FAST/SLOW bracketing of POKE-intensive loops for performance.

Content

Appears On

Related Products

Related Articles

Related Content

Image Gallery

Source Code

   1 GOTO 200
  10 PRINT "KEY THE AMOUNT ";TAB 20;"EG.£%4%9%.%0%4"
  11 INPUT AJ
  12 CLS 
  13 PRINT "£";AJ
  14 GOSUB 70
  15 IF A$<>"C" THEN GOTO 10
  16 RETURN 
  30 LET AJ=AJ*-1
  35 LET BL=BL+AJ
  36 RETURN 
  45 IF BL<0 THEN PRINT "%O%V%E%R%D%R%A%W%N% %B%Y ";
  46 PRINT "£";INT (BL*100+.5)/100;
  47 IF BL>=0 THEN PRINT " %I%N% %C%R%E%D%I%T"
  48 PRINT 
  49 RETURN 
  60 PRINT "KEY THE DATE, DAY NO. FIRST"
  61 INPUT D1
  62 PRINT "NEXT THE MONTH NO."
  63 INPUT D2
  64 PRINT "THE LAST 2 DIGITS OF THE YEAR?"
  65 INPUT D3
  66 PRINT D1;"/";D2;"/";D3
  67 GOSUB 70
  68 IF A$<>"C" THEN GOTO 60
  69 RETURN 
  70 PRINT 
  71 PRINT "KEY C IF THIS IS OK,OTHERWISE   NEWLINE"
  72 INPUT A$
  73 CLS 
  74 RETURN 
 
   5 PRINT "% % % % % % % % % % % %L%O%A%D% %C%H%E%C%K% % % % % % % % % % % "
  10 PRINT "THIS PROGRAM HAS NO FUNCTON     APART FROM CONFIRMING THAT      *LOAD* IS WORKING"
  20 STOP 
  30 SAVE "LOAD CHEC%K"
  40 GOTO 5
   1 GOTO 500
  10 INPUT A$
  20 IF A$="" THEN GOTO 10
  30 LET Y=LEN A$
  40 DIM Z(Y)
  50 LET X=0
  60 FOR J=1 TO Y
  70 LET A=CODE A$
  80 IF A<27 OR A>37 THEN GOTO 210
  90 IF A=27 THEN GOTO 230
 100 LET Z(J)=A-28
 110 LET A$=A$(2 TO )
 120 NEXT J
 130 LET A=0
 140 IF X=0 THEN LET X=Y+1
 150 FOR J=1 TO Y
 160 IF J>X THEN LET A=A+Z(J)*10**(X-J)
 170 IF J<X THEN LET A=A+Z(J)*10**(X-J-1)
 180 NEXT J
 190 PRINT A
 200 RETURN 
 210 PRINT " ERROR "
 220 GOTO 10
 230 IF X<>0 THEN GOTO 210
 240 LET X=J
 250 GOTO 110
 
   1 GOTO 3000
 100 LET A$="        ***THE  ZX81***                 PROGRAMMING FOR                REAL APPLICATIONS                                        (C) RANDLE HURLEY,1981          PUBLISHED BY MACMILLAN PRESS LTD"
 101 RETURN 
 102 LET A$="ISBN O 333 33131 1                                              THIS TAPE CONTAINS THE PROGRAMS FROM THE BOOK. THE TEXT CONTAINSFULL DOCUMENTATION OF THESE     PROGRAMS AND A FULL ACCOUNT OF  "
 103 RETURN 
 104 LET A$="THE IDEAS AND TECHNIQUES USED INTHEIR DEVELOPMENT.                                                                              PRESS NEWLINE TO READ ON.                                       "
 105 RETURN 
 106 LET A$="THERE ARE TEN TRACKS ON THE TAPEAND THE DETAILS OF EACH IS GIVENON A PAGE OF THIS CATALOGUE.                                    THE CATALOGUE IS WRITTEN ON THE *WORD JUGGLER* WORD PROCESSOR.  "
 107 RETURN 
 108 LET A$="ACCESS TO THE PROGRAM IS GAINED BY PRESSING THE BREAK KEY AND   THEN KEYING *GO TO 3OOO*.                                       THE SECOND VERSION OF *WORD     JUGGLER*, WHICH INCORPORATES THE"
 109 RETURN 
 110 LET A$="READABILITY INDEX, IS THE SECONDTRACK: LOAD *WORD 2*.                                                                                                                                           "
 111 RETURN 
 112 LET A$="SAFE ENTRY OF NUMERICAL DATA.                                   LOAD *SAFE*.                                                    THIS IS A SUB-ROUTINE WHICH CAN BE BUILT INTO ANY PROGRAMS WHICH"
 113 RETURN 
 114 LET A$="CALL FOR NUMERICAL INPUT AND    WHICH MAY BE USED BY INEXPERT   USERS. THE ROUTINE PROTECTS THE PROGRAMS FROM CRASHES WHICH MAY RESULT IF INAPPROPRIATE KEYS AREPRESSED. THE LETTERS *I* AND *O*"
 115 RETURN 
 116 LET A$="CAN BE USED IN PLACE OF THE     DIGITS *1* AND ZERO; MORE THAN  ONE DECIMAL POINT CAN BE KEYED. INAPPROPRIATE DATA GENERATES AN ERROR MESSAGE AND THE COMPUTER  ASKS FOR THE DATA AGAIN.        "
 117 RETURN 
 118 LET A$="CASH HANDLING.                                                  LOAD *CASH 1*                                                   THIS IS A SERIES OF ROUTINES    WHICH CAN BE INCORPORATED INTO  "
 119 RETURN 
 120 LET A$="PROGRAMS WHERE CASH IS HANDLED. THE SYSTEM COVERS MOST TYPES OF TRANSACTION. USE OF THE SYSTEM  WILL RELEASE THE PROGRAMMER FROMTHE CHORE OF WRITING CODE TO    COPE WITH THE MONEY AND ALLOW   "
 121 RETURN 
 122 LET A$="HIM OR HER TO CONCENTRATE ON THEMORE INTERESTING POINTS.                                                                                                                                        "
 123 RETURN 
 124 LET A$="PERSONAL FINANCES                                               LOAD *CASH 2*                                                   A PROGRAM WHICH REMEMBERS ALL   THE EASILY FORGOTTEN DETAILS.   "
 125 RETURN 
 126 LET A$="ALL STANDING ORDERS ARE DEDUCTEDAUTOMATICALLY AS THEY FALL DUE, EVEN ANNUAL AND QUARTERLY ONES. THE SYSTEM MAY BE LEFT FOR YEARSAND WILL STILL REMEMBER TO ASK  FOR ALL THE INFORMATION IT NEEDS"
 127 RETURN 
 128 LET A$="TO KEEP YOUR FINANCES IN GOOD   ORDER.                                                          CHANGES IN THE STANDING ORDERS  CAN BE EASILY AND QUICKLY MADE.                                 "
 129 RETURN 
 130 LET A$="PERSONAL FINANCES(SHORT VERSION)                                LOAD *CASH 3*                                                   THIS VERSION IS MORE CONVENIENT FOR ANY USER WITH THE SLIGHTEST "
 131 RETURN 
 132 LET A$="EXPERIENCE OF THE ZX81. A FEW   DIRECT COMMANDS SAVE A LOT OF   SPACE IN THE PROGRAM. THIS MEANSA SAVING OF ALMOST HALF A MINUTEIN THE TIME THE PROGRAM TAKES TOLOAD AND SAVE.                  "
 133 RETURN 
 134 LET A$="                                THE FIRST VERSION CAN BE USED BYAN ABSOLUTE BEGINNER BUT THE 2NDPROGRAM REQUIRES THE SETTING UP TO BE DONE IN PROGRAMMING MODE.                                 "
 135 RETURN 
 136 LET A$="SCHOOL BANKING SYSTEM.                                          LOAD *BANK*.                                                    AS SET UP, THIS PROGRAM WILL    HANDLE 2OO ACCOUNTS BUT THERE IS"
 137 RETURN 
 138 LET A$="SCOPE FOR MANY MORE. INTEREST ISPAID ON ACCOUNTS HOLDING A SET  MINIMUM AMOUNT AND THIS IS ADDEDEACH TIME THE PROGRAM IS USED.                                  DAILY BUSINESS STATEMENTS ARE   "
 139 RETURN 
 140 LET A$="PRINTED AND MONTHLY ACCOUNTS IN THE FORM OF A BALANCE SHEET ARE PRODUCED. INDIVIDUAL STATEMENTS OF ACCOUNT ARE BUILT INTO THE   BALANCE SHEET. A FLOAT CHECK IS MADE BEFORE AND AFTER BUSINESS. "
 141 RETURN 
 142 LET A$="BULK DATA STORAGE.                                              LOAD *RECORD*.                                                  THIS PROGRAM ALLOWS THE STORAGE OF MORE PIECES OF INFORMATION   "
 143 RETURN 
 144 LET A$="THAN THERE ARE STORAGE BYTES IN THE COMPUTER... AND ALLOWS THE  DATA TO BE ACCESSED IN MANY WAYSSO THAT CORRELATIONS MAY BE     FOUND.                                                          "
 145 RETURN 
 146 LET A$="PROBABLY THE MOST POWERFUL OF   ALL THE PROGRAMS IN THE BOOK,   THE BASIC TECHNIQUE CAN BE USED IN AN ENORMOUS VARIETY OF WAYS  TO SUIT THE NEEDS OF THE USER.                                  "
 147 RETURN 
 148 LET A$="RANK ORDER.                                                     LOAD *RANK*.                    A SIMPLE SYSTEM FOR TOTALLING,  AVERAGING AND THEN SETTING IN   RANK ORDER, THE SCORES GAINED BY"
 149 RETURN 
 150 LET A$="STUDENTS FOLLOWING A COURSE.                                    MISSED SCORES ARE ALLOWED FOR   AND REPORTED IN THE FINAL PRINT-OUT.                                                            "
 151 RETURN 
 152 LET A$="THE NUMBER OF STUDENTS ON THE   COURSE IS SET AT THE BEGINNING  TOGETHER WITH THE NUMBER OF THE TESTS AND THE MAXIMUM SCORE.    THE SCORES CAN BE ENTERED IN    BATCHES AT ANY TIME.            "
 153 RETURN 
 154 LET A$="EXAM RESULTS ANALYSIS.                                          LOAD *EXAM*.                                                    FULL ANALYSIS OF A SET OF EXAM  RESULTS ACCORDING TO CRITERIA   "
 155 RETURN 
 156 LET A$="SET DURING THE PROGRAM RUN. THE INFORMATION REQUIRED BY THE DES IS PRESENTED. OTHER SEARCHES    PRODUCE INFORMATION NEEDED BY   HEADS OF SCHOOL, HEADS OF DEPT. BOARDS OF GOVERNORS, PARENTS,   "
 157 RETURN 
 158 LET A$="THE LOCAL PRESS AND ANY OTHER   INTERESTED PARTIES.                                                                                                                                             "
 159 RETURN 
 160 LET A$="(C) RANDLE HURLEY,1981                                          THIS RECORDING IS COPYRIGHT,AND MUST NOT BE COPIED OR REPRODUCEDBY ANY MEANS.                   COPYRIGHT CLEARANCE IS GRANTED, "
 161 RETURN 
 162 LET A$="FOR THE PURCHASER ONLY, AND FOR HIS OR HER OWN USE ONLY, FOR    SAVING THESE PROGRAMS ON TAPE INORDER TO RETAIN DATA FILES      GENERATED BY THE PROGRAMS.                                      "
 163 RETURN 
 164 LET A$="ALL OTHER RIGHTS RESERVED.                                                                                                                                                                      "
 165 RETURN 
 166 LET A$="                                                                                                                                                                                                "
 167 RETURN 
 168 LET A$="                                                                                                                                                                                                "
 169 RETURN 
 170 LET A$="                                                                                                                                                                                                "
 171 RETURN 
 172 LET A$="                                                                                                                                                                                                "
 173 RETURN 
 174 LET A$="                                                                                                                                                                                                "
 175 RETURN 
 176 LET A$="                                                                                                                                                                                                "
 177 RETURN 
 178 LET A$="                                                                                                                                                                                                "
 179 RETURN 
 180 LET A$="                                                                                                                                                                                                "
 181 RETURN 
 182 LET A$="                                                                                                                                                                                                "
 183 RETURN 
 184 LET A$="                                                                                                                                                                                                "
 185 RETURN 
 186 LET A$="                                                                                                                                                                                                "
 187 RETURN 
 188 LET A$="                                                                                                                                                                                                "
 189 RETURN 
 190 LET A$="                                                                                                                                                                                                "
 191 RETURN 
 192 LET A$="                                                                                                                                                                                                "
 193 RETURN 
 194 LET A$="                                                                                                                                                                                                "
 195 RETURN 
 196 LET A$="                                                                                                                                                                                                "
 197 RETURN 
 198 LET A$="                                                                                                                                                                                                "
 199 RETURN 
 200 LET A$="                                                                                                                                                                                                "
 201 RETURN 
 202 LET A$="                                                                                                                                                                                                "
 203 RETURN 
 204 LET A$="                                                                                                                                                                                                "
 205 RETURN 
 206 LET A$="                                                                                                                                                                                                "
 207 RETURN 
 208 LET A$="                                                                                                                                                                                                "
 209 RETURN 
 210 LET A$="                                                                                                                                                                                                "
 211 RETURN 
 212 LET A$="                                                                                                                                                                                                "
 213 RETURN 
 214 LET A$="                                                                                                                                                                                                "
 215 RETURN 
 216 LET A$="% %*%*%E%N%D%*%*% %D%O% %N%O%T% %U%S%E% %T%H%I%S% %S%P%A%C%E% "
 217 RETURN 
 900 LET A=198+PEEK (16396)+PEEK (16397)*256
 901 RETURN 
 910 CLS 
 911 IF P>57 THEN GOTO 2990
 913 GOSUB P*2+98
 914 PRINT A$
 915 GOSUB P*2+100
 916 PRINT A$
 917 GOSUB P*2+102
 918 PRINT A$
 919 PRINT AT 20,0;"PARAGRAPH ";P
 922 RETURN 
 930 LET P=P+1
 931 GOSUB 910
 932 GOSUB 900
 933 RETURN 
 1000 LET P=0
 1030 GOSUB 930
 1040 LET C=1
 1050 LET L=1
 1070 POKE A+C,PEEK (A+C)+128
 1080 IF INKEY$<>"" THEN GOTO 1080
 1090 IF INKEY$="" THEN GOTO 1090
 1100 LET A$=INKEY$
 1110 IF A$="""" THEN GOTO 2990
 1120 IF CODE A$>63 THEN GOTO 1080
 1130 IF A$=">" THEN GOTO 1500
 1140 IF A$="0" THEN LET A$=" "
 1170 POKE A+C,CODE (A$)
 1180 LET C=C+1
 1190 IF C=33 THEN GOTO 1300
 1200 GOTO 1060
 1300 FAST 
 1310 LET C=1
 1320 SCROLL 
 1330 FOR J=1 TO 32
 1340 POKE 16501+J+L*32+P*209,PEEK (A-33+J)
 1350 NEXT J
 1360 LET L=L+1
 1370 IF L=7 THEN GOSUB 930
 1380 IF L=7 THEN LET L=1
 1390 SLOW 
 1400 GOTO 1060
 1500 PRINT AT 20,16;"% %C%U%R%S%O%R% "
 1530 IF INKEY$<>"" THEN GOTO 1530
 1540 IF INKEY$="" THEN GOTO 1540
 1550 LET A$=INKEY$
 1560 PRINT AT 20,16;"        "
 1570 GOSUB 900
 1580 POKE A+C,PEEK (A+C)-128
 1590 IF A$="5" THEN LET C=C-1
 1600 IF A$="8" THEN LET C=C+1
 1610 IF A$="9" THEN LET C=C+5
 1620 IF C<1 OR C>32 THEN LET C=1
 1630 IF A$="N" THEN LET L=1
 1640 IF A$="N" THEN GOSUB 930
 1650 IF A$="7" THEN LET P=P-2
 1660 IF A$="7" THEN LET L=1
 1670 IF A$="7" THEN GOSUB 930
 1680 IF A$="6" THEN SCROLL 
 1690 IF A$="6" THEN LET L=L+1
 1700 IF L=7 THEN GOSUB 930
 1710 IF L=7 THEN LET L=1
 1720 POKE A+C,PEEK (A+C)+128
 1730 IF A$=">" THEN GOTO 1074
 1740 GOTO 1500
 2990 CLS 
 3000 PRINT AT 0,7;"% %W%O%R%D% %J%U%G%G%L%E%R% "
 3006 LET LT=1
 3007 LET ST=1
 3010 PRINT 
 3020 PRINT "KEY 1 TO WRITE TEXT"
 3030 PRINT "KEY 2 TO EDIT"
 3040 PRINT "KEY 3 TO READ"
 3050 PRINT "KEY 4 TO DELETE PARAGRAPH"
 3060 PRINT "KEY 5 TO FILE TEXT"
 3070 PRINT "KEY 6 TO PRINT TEXT"
 3100 INPUT A$
 3110 IF A$="1" THEN GOTO 1000
 3120 IF A$="2" THEN GOTO 3200
 3130 IF A$="3" THEN GOTO 3500
 3140 IF A$="4" THEN GOTO 4000
 3150 IF A$="5" THEN GOTO 5000
 3160 IF A$="6" THEN GOTO 4500
 3200 CLS 
 3210 PRINT TAB 10;"% %E%D%I%T%I%N%G% "
 3220 PRINT AT 5,0;"KEY PARAGRAPH NUMBER"
 3230 INPUT A
 3240 LET P=A-1
 3250 LET A$="N"
 3260 LET C=1
 3270 GOTO 1610
 3500 LET P=1
 3510 GOSUB 910
 3520 IF INKEY$="" THEN GOTO 3520
 3590 LET P=P+3
 3600 GOTO 3510
 4000 CLS 
 4010 PRINT TAB 10;"% %D%E%L%E%T%I%O%N% "
 4020 PRINT 
 4030 PRINT "WHICH PARAGRAPH?"
 4040 INPUT P
 4050 PRINT "KEY D TO DELETE PARA. ";P
 4060 INPUT A$
 4070 IF A$<>"D" THEN GOTO 2990
 4075 FAST 
 4080 FOR J=1 TO 192
 4090 POKE 16533+J+P*209,0
 4100 NEXT J
 4105 SLOW 
 4110 LET P=P+1
 4120 GOTO 4050
 4500 CLS 
 4510 PRINT "KEY THE LAST PARAGRAPH TO PRINT"
 4520 INPUT A
 4530 CLS 
 4540 PRINT AT 10,10;"% %P%R%I%N%T%I%N%G% "
 4550 FOR J=1 TO A
 4560 GOSUB J*2+100
 4570 LPRINT A$
 4580 NEXT J
 4600 PRINT AT 10,10;"% %F%I%N%I%S%H%E%D% "
 4610 PRINT "KEY NEWLINE"
 4620 INPUT A$
 4630 GOTO 2990
 5000 PRINT "% %P%R%E%P%A%R%E% %T%A%P%E% %F%O%R% %R%E%C%O%R%D%I%N%G% ","KEY NEWLINE"
 5010 INPUT A$
 5020 CLS 
 5030 SAVE "WORD %1"
 5040 GOTO 3000
 
   1 GOTO 3000
 100 LET A$="          WORD JUGGLER                    ************                                          54 PARA.  VERSION                                                V  PARAGRAPH ONE STARTS HERE.   "
 101 RETURN 
 102 LET A$="                                                                                                                                                                                                "
 103 RETURN 
 104 LET A$="                                                                                                                                                                                                "
 105 RETURN 
 106 LET A$="                                                                                                                                                                                                "
 107 RETURN 
 108 LET A$="                                                                                                                                                                                                "
 109 RETURN 
 110 LET A$="                                                                                                                                                                                                "
 111 RETURN 
 112 LET A$="                                                                                                                                                                                                "
 113 RETURN 
 114 LET A$="                                                                                                                                                                                                "
 115 RETURN 
 116 LET A$="                                                                                                                                                                                                "
 117 RETURN 
 118 LET A$="                                                                                                                                                                                                "
 119 RETURN 
 120 LET A$="                                                                                                                                                                                                "
 121 RETURN 
 122 LET A$="                                                                                                                                                                                                "
 123 RETURN 
 124 LET A$="                                                                                                                                                                                                "
 125 RETURN 
 126 LET A$="                                                                                                                                                                                                "
 127 RETURN 
 128 LET A$="                                                                                                                                                                                                "
 129 RETURN 
 130 LET A$="                                                                                                                                                                                                "
 131 RETURN 
 132 LET A$="                                                                                                                                                                                                "
 133 RETURN 
 134 LET A$="                                                                                                                                                                                                "
 135 RETURN 
 136 LET A$="                                                                                                                                                                                                "
 137 RETURN 
 138 LET A$="                                                                                                                                                                                                "
 139 RETURN 
 140 LET A$="                                                                                                                                                                                                "
 141 RETURN 
 142 LET A$="                                                                                                                                                                                                "
 143 RETURN 
 144 LET A$="                                                                                                                                                                                                "
 145 RETURN 
 146 LET A$="                                                                                                                                                                                                "
 147 RETURN 
 148 LET A$="                                                                                                                                                                                                "
 149 RETURN 
 150 LET A$="                                                                                                                                                                                                "
 151 RETURN 
 152 LET A$="                                                                                                                                                                                                "
 153 RETURN 
 154 LET A$="                                                                                                                                                                                                "
 155 RETURN 
 156 LET A$="                                                                                                                                                                                                "
 157 RETURN 
 158 LET A$="                                                                                                                                                                                                "
 159 RETURN 
 160 LET A$="                                                                                                                                                                                                "
 161 RETURN 
 162 LET A$="                                                                                                                                                                                                "
 163 RETURN 
 164 LET A$="                                                                                                                                                                                                "
 165 RETURN 
 166 LET A$="                                                                                                                                                                                                "
 167 RETURN 
 168 LET A$="                                                                                                                                                                                                "
 169 RETURN 
 170 LET A$="                                                                                                                                                                                                "
 171 RETURN 
 172 LET A$="                                                                                                                                                                                                "
 173 RETURN 
 174 LET A$="                                                                                                                                                                                                "
 175 RETURN 
 176 LET A$="                                                                                                                                                                                                "
 177 RETURN 
 178 LET A$="                                                                                                                                                                                                "
 179 RETURN 
 180 LET A$="                                                                                                                                                                                                "
 181 RETURN 
 182 LET A$="                                                                                                                                                                                                "
 183 RETURN 
 184 LET A$="                                                                                                                                                                                                "
 185 RETURN 
 186 LET A$="                                                                                                                                                                                                "
 187 RETURN 
 188 LET A$="                                                                                                                                                                                                "
 189 RETURN 
 190 LET A$="                                                                                                                                                                                                "
 191 RETURN 
 192 LET A$="                                                                                                                                                                                 ##              "
 193 RETURN 
 194 LET A$="                                                                                                                                                                                                "
 195 RETURN 
 196 LET A$="                                                                                                                                                                                                "
 197 RETURN 
 198 LET A$="                                                                                                                                                                                                "
 199 RETURN 
 200 LET A$="                                                                                                                                                                                                "
 201 RETURN 
 202 LET A$="                                                                                                                                                                                                "
 203 RETURN 
 204 LET A$="                                                                                                                                                                                                "
 205 RETURN 
 206 LET A$="                                                                                                                                                                                                "
 207 RETURN 
 208 LET A$="                                                                                                                                                                                                "
 209 RETURN 
 210 LET A$="% %*%*%E%N%D%*%*% %D%O% %N%O%T% %U%S%E% %T%H%I%S% %S%P%A%C%E% "
 211 RETURN 
 900 LET A=198+PEEK (16396)+PEEK (16397)*256
 901 RETURN 
 910 CLS 
 911 IF P>54 THEN GOTO 2990
 912 FAST 
 913 GOSUB P*2+98
 914 PRINT A$
 915 GOSUB P*2+100
 916 PRINT A$
 917 GOSUB P*2+102
 918 PRINT A$
 919 PRINT AT 19,0;"PARAGRAPH ";P
 920 PRINT AT 20,0;"% %W%D%/%S%E%N%   ";INT (10*WD/ST)/10,,"% %L%E%T%/%W%D%   ";INT (10*LT/WD)/10
 921 SLOW 
 922 RETURN 
 930 LET P=P+1
 931 GOSUB 910
 932 GOSUB 900
 933 RETURN 
 1000 LET P=0
 1030 GOSUB 930
 1040 LET C=1
 1050 LET L=1
 1070 POKE A+C,PEEK (A+C)+128
 1080 IF INKEY$<>"" THEN GOTO 1080
 1090 IF INKEY$="" THEN GOTO 1090
 1100 LET A$=INKEY$
 1110 IF A$="""" THEN GOTO 2990
 1120 IF CODE A$>63 THEN GOTO 1080
 1130 IF A$=">" THEN GOTO 1500
 1140 IF A$="0" THEN LET A$=" "
 1150 IF CODE A$=11 THEN LET A$=". "
 1170 POKE A+C,CODE (A$)
 1180 LET C=C+1
 1190 IF C=33 THEN GOTO 1300
 1200 GOTO 1060
 1300 FAST 
 1310 LET C=1
 1320 SCROLL 
 1330 LET S=0
 1331 FOR J=1 TO 32
 1332 LET R=PEEK (A-33+J)
 1333 IF R>=28 AND R<=63 THEN LET LT=LT+1
 1334 IF R=27 THEN LET ST=ST+1
 1335 IF R=0 AND S=0 THEN LET WD=WD+1
 1336 IF R=0 THEN LET S=1
 1337 IF R<>0 THEN LET S=0
 1340 POKE 16501+J+L*32+P*209,R
 1350 NEXT J
 1360 LET L=L+1
 1370 IF L=7 THEN GOSUB 930
 1380 IF L=7 THEN LET L=1
 1390 SLOW 
 1400 GOTO 1060
 1500 PRINT AT 20,16;"% %C%U%R%S%O%R% "
 1530 IF INKEY$<>"" THEN GOTO 1530
 1540 IF INKEY$="" THEN GOTO 1540
 1550 LET A$=INKEY$
 1560 PRINT AT 20,16;"        "
 1570 GOSUB 900
 1580 POKE A+C,PEEK (A+C)-128
 1590 IF A$="5" THEN LET C=C-1
 1600 IF A$="8" THEN LET C=C+1
 1610 IF A$="9" THEN LET C=C+5
 1620 IF C<1 OR C>32 THEN LET C=1
 1630 IF A$="N" THEN LET L=1
 1640 IF A$="N" THEN GOSUB 930
 1650 IF A$="7" THEN LET P=P-2
 1660 IF A$="7" THEN LET L=1
 1670 IF A$="7" THEN GOSUB 930
 1680 IF A$="6" THEN SCROLL 
 1690 IF A$="6" THEN LET L=L+1
 1700 IF L=7 THEN GOSUB 930
 1710 IF L=7 THEN LET L=1
 1720 POKE A+C,PEEK (A+C)+128
 1730 IF A$=">" THEN GOTO 1074
 1740 GOTO 1500
 2990 CLS 
 3000 PRINT AT 0,7;"% %W%O%R%D% %J%U%G%G%L%E%R% "
 3010 PRINT 
 3020 PRINT "KEY 1 TO WRITE TEXT"
 3030 PRINT "KEY 2 TO EDIT"
 3040 PRINT "KEY 3 TO READ"
 3050 PRINT "KEY 4 TO DELETE PARAGRAPH"
 3060 PRINT "KEY 5 TO FILE TEXT"
 3070 PRINT "KEY 6 TO PRINT TEXT"
 3080 PRINT "KEY 7 TO RE-SET READABILITY"
 3100 INPUT A$
 3110 IF A$="1" THEN GOTO 1000
 3120 IF A$="2" THEN GOTO 3200
 3130 IF A$="3" THEN GOTO 3500
 3140 IF A$="4" THEN GOTO 4000
 3150 IF A$="5" THEN GOTO 5000
 3160 IF A$="6" THEN GOTO 4500
 3170 IF A$="7" THEN GOTO 4700
 3180 GOTO 2990
 3200 CLS 
 3210 PRINT TAB 10;"% %E%D%I%T%I%N%G% "
 3220 PRINT AT 5,0;"KEY PARAGRAPH NUMBER"
 3230 INPUT A
 3240 LET P=A-1
 3250 LET A$="N"
 3260 LET C=1
 3270 GOTO 1610
 3500 LET P=2
 3510 GOSUB 910
 3520 IF INKEY$="" THEN GOTO 3520
 3590 LET P=P+3
 3600 GOTO 3510
 4000 CLS 
 4010 PRINT TAB 10;"% %D%E%L%E%T%I%O%N% "
 4020 PRINT 
 4030 PRINT "WHICH PARAGRAPH?"
 4040 INPUT P
 4050 PRINT "KEY D TO DELETE PARA. ";P
 4060 INPUT A$
 4070 IF A$<>"D" THEN GOTO 2990
 4075 FAST 
 4080 FOR J=1 TO 192
 4090 POKE 16533+J+P*209,0
 4100 NEXT J
 4105 SLOW 
 4110 LET P=P+1
 4120 GOTO 4050
 4500 CLS 
 4510 PRINT "KEY THE LAST PARAGRAPH TO PRINT"
 4520 INPUT A
 4530 CLS 
 4540 PRINT AT 10,10;"% %P%R%I%N%T%I%N%G% "
 4550 FOR J=1 TO A
 4560 GOSUB J*2+100
 4570 LPRINT A$
 4580 NEXT J
 4600 PRINT AT 10,10;"% %F%I%N%I%S%H%E%D% "
 4610 PRINT "KEY NEWLINE"
 4620 INPUT A$
 4630 GOTO 2990
 4700 LET WD=1
 4710 LET ST=WD
 4720 LET LT=WD
 4730 CLS 
 4740 PRINT "% %R%E%A%D%A%B%I%L%I%T%Y% %R%E%-%S%E%T% "
 4750 GOTO 4610
 5000 PRINT "% %P%R%E%P%A%R%E% %T%A%P%E% %F%O%R% %R%E%C%O%R%D%I%N%G% ","KEY NEWLINE"
 5010 INPUT A$
 5020 CLS 
 5030 SAVE "WORD %2"
 5040 GOTO 3000
 5050 REM .'.'.'% %W%O%R%D% %J%U%G%G%L%E%R% '.'.'.
 
   1 GOTO 200
  10 PRINT "KEY THE AMOUNT ";TAB 20;"EG.£%4%9%.%0%4"
  11 INPUT AJ
  12 CLS 
  13 PRINT "£";AJ
  14 GOSUB 70
  15 IF A$<>"C" THEN GOTO 10
  16 RETURN 
  30 LET AJ=AJ*-1
  35 LET BL=BL+AJ
  36 RETURN 
  45 IF BL<0 THEN PRINT "%O%V%E%R%D%R%A%W%N% %B%Y ";
  46 PRINT "£";INT (BL*100+.5)/100;
  47 IF BL>=0 THEN PRINT " %I%N% %C%R%E%D%I%T"
  48 PRINT 
  49 RETURN 
  60 PRINT "KEY THE DATE, DAY NO. FIRST"
  61 INPUT D1
  62 PRINT "NEXT THE MONTH NO."
  63 INPUT D2
  64 PRINT "THE LAST 2 DIGITS OF THE YEAR?"
  65 INPUT D3
  66 PRINT D1;"/";D2;"/";D3
  67 GOSUB 70
  68 IF A$<>"C" THEN GOTO 60
  69 RETURN 
  70 PRINT 
  71 PRINT "KEY C IF THIS IS OK,OTHERWISE   NEWLINE"
  72 INPUT A$
  73 CLS 
  74 RETURN 
 200 PRINT "% %T%H%R%E%A%D%N%E%E%D%L%E% %S%T%R%E%E%T% %S%C%H%O%O%L% %B%A%N%K"
 210 PRINT 
 220 PRINT D4;"/";D5;"/";D6
 230 PRINT "FLOAT AT CLOSE OF BUSINESS WAS  £";INT (BL*100+.5)/100
 240 PRINT AT 8,0;"ANY DEPOSITS TO THE MAIN BANK?"
 250 GOSUB 10
 260 LET AS=AS+AJ
 270 GOSUB 30
 280 PRINT "ANY WITHDRAWALS FROM THE MAIN   BANK?"
 290 GOSUB 10
 300 LET AS=AS-AJ
 310 GOSUB 35
 320 PRINT "FLOAT SHOULD BE £";INT (BL*100+.5)/100
 330 PRINT 
 340 PRINT "IF RATE OF INTEREST HAS CHANGED FROM ";R;" THEN KEY 1.OTHERWISE KEY NEWLINE"
 350 INPUT A$
 360 IF A$="1" THEN GOSUB 600
 370 CLS 
 380 GOSUB 60
 400 FAST 
 410 LET D8=0
 420 IF D5=D2 AND D6=D3 THEN GOTO 530
 430 LET D7=0
 440 IF D5=4 OR D5=6 OR D5=9 OR D5=11 THEN LET D7=30
 450 IF D5=2 THEN LET D7=28
 460 IF D7=0 THEN LET D7=31
 470 LET D8=D8+D7
 475 LET D8=D8-D4
 480 LET D5=D5+1
 490 LET D4=0
 500 IF D5>12 THEN LET D6=D6+1
 510 IF D5>12 THEN LET D5=D5-12
 520 GOTO 420
 530 LET D8=D8+D1-D4
 540 FOR J=1 TO 200
 550 IF A(J)<10 THEN GOTO 570
 560 LET A(J)=A(J)+A(J)*D8*R/36500
 570 NEXT J
 580 SLOW 
 590 GOTO 1000
 600 CLS 
 610 PRINT "KEY THE NEW RATE OF INTEREST"
 620 INPUT A
 630 PRINT A;"PERCENT PER YEAR"
 640 GOSUB 70
 650 IF A$<>"C" THEN GOTO 600
 660 LET R=A
 670 RETURN 
 1000 CLS 
 1010 PRINT "% %T%H%R%E%A%D%N%E%E%D%L%E% %S%T%R%E%E%T% %S%C%H%O%O%L% %B%A%N%K"
 1020 PRINT AT 5,0;;"SELECT OPERATION"
 1030 PRINT 
 1040 PRINT "TRANSACTION KEY 1"
 1050 PRINT "WITHDRAWAL NOTICE KEY 2"
 1060 PRINT "END OF BUSINESS KEY 3"
 1070 PRINT "MONTHLY ACCOUNTS KEY 4"
 1080 PRINT "TO OPEN NEW ACCOUNT KEY 5"
 1100 INPUT A$
 1110 IF A$="1" THEN GOTO 1500
 1120 IF A$="2" THEN GOTO 3000
 1130 IF A$="3" THEN GOTO 4000
 1140 IF A$="4" THEN GOTO 5000
 1150 IF A$="5" THEN GOTO 5500
 1160 GOSUB 1175
 1170 GOTO 1000
 1175 CLS 
 1180 PRINT AT 10,0;"SORRY, I DONT UNDERSTAND"
 1190 PRINT "KEY AGAIN"
 1200 FOR J=1 TO 50
 1210 NEXT J
 1220 RETURN 
 1500 CLS 
 1510 PRINT "KEY ACCOUNT NO."
 1520 INPUT N
 1530 PRINT AT 5,0;"ACCOUNT ";N
 1540 GOSUB 70
 1550 IF A$<>"C" THEN GOTO 1500
 1555 CLS 
 1560 IF A(N)<0 THEN PRINT "% %O%V%E%R%D%R%A%W%N% %B%Y% £";INT (A(N)*100+.5)/100
 1570 IF A(N)>=0 THEN PRINT "£";INT (A(N)*100+.5)/100;" IN CREDIT"
 1580 PRINT "WITHDRAWAL KEY 1"
 1590 PRINT "DEPOSIT KEY 2"
 1600 INPUT M
 1610 IF M<>1 AND M<>2 THEN GOSUB 1175
 1620 IF M<>1 AND M<>2 THEN GOTO 1560
 1625 CLS 
 1630 IF M=1 THEN PRINT "WITHDRAWAL"
 1640 IF M=2 THEN PRINT "DEPOSIT"
 1650 GOSUB 10
 1700 IF M=1 THEN GOTO 1770
 1710 LET A(N)=A(N)+AJ
 1720 GOSUB 35
 1730 PRINT "BALANCE NOW STANDS AT £";INT (A(N)*100+.5)/100
 1740 PRINT "KEY %N%/%L"
 1750 INPUT A$
 1760 GOTO 1000
 1770 IF AJ>=INT (A(N)*100+.5)/100 THEN GOTO 1850
 1780 LET A(N)=A(N)-AJ
 1790 GOSUB 30
 1800 PRINT "BALANCE NOW STANDS AT £";INT (A(N)*100+.5)/100
 1810 PRINT "KEY %N%/%L"
 1820 INPUT A$
 1830 GOTO 1000
 1850 IF AJ<>INT (A(N)*100+.5)/100 THEN GOTO 2000
 1860 CLS 
 1870 PRINT "THIS WITHDRAWAL CLOSES THE A/C"
 1880 GOSUB 70
 1890 IF A$<>"C" THEN GOTO 1000
 1900 PRINT "ACCOUNT ";N;" CLOSED BY A PAYMENT","OF £";INT (A(N)*100+.5)/100
 1910 LET A(N)=0
 1920 GOSUB 30
 1930 PRINT "KEY %N%/%L"
 1940 INPUT A$
 1950 GOTO 1000
 2000 CLS 
 2010 PRINT "NOT ENOUGH IN ACCOUNT"
 2020 PRINT "KEY %N%/%L"
 2030 INPUT A$
 2040 GOTO 1000
 3000 CLS 
 3010 PRINT "KEY ACCOUNT NO."
 3020 INPUT N
 3030 PRINT "KEY AMOUNT NEEDED"
 3040 INPUT M
 3050 LPRINT "£";M;" REQUIRED FOR ACCOUNT NO. ";N
 3060 LET W=W+M
 3080 GOTO 1000
 4000 CLS 
 4010 PRINT "END OF BUSINESS STATEMENT FOR",D1;"/";D2;"/";D3
 4020 LET D4=D1
 4030 LET D5=D2
 4040 LET D6=D3
 4050 PRINT 
 4060 PRINT "TOTAL REQUIRED FOR WITHDRAWALS  £";W
 4070 PRINT 
 4080 PRINT "FLOAT SHOULD CONTAIN £";INT (BL*100+.5)/100
 4090 COPY 
 4100 PRINT "KEY %N%/%L"
 4110 INPUT A$
 4120 GOTO 6000
 5000 CLS 
 5010 PRINT "% %T%H%R%E%A%D%N%E%E%D%L%E% %S%T%R%E%E%T% %S%C%H%O%O%L% %B%A%N%K"
 5020 PRINT 
 5030 PRINT "MONTHLY ACCOUNTS AS AT ";D1;"/";D2;"/";D3
 5040 PRINT 
 5050 PRINT "KEY ANY INTEREST RECEIVED FROM  THE MAIN BANK"
 5060 COPY 
 5070 GOSUB 10
 5080 LET AS=AS+AJ
 5090 CLS 
 5100 PRINT "£";AJ
 5110 PRINT "TOTAL ASSETS HELD"
 5120 PRINT "£";INT (AS*100+.5)/100;" ON DEPOSIT AT BANK"
 5130 PRINT "£";INT (BL*100+.5)/100;" HELD IN TILL"
 5135 PRINT "''''''''''''''"
 5140 PRINT "£";INT (BL*100+.5)/100+INT (AS*100+.5)/100;" TOTAL"
 5150 COPY 
 5200 CLS 
 5210 PRINT "TOTAL LIABILITIES"
 5220 PRINT 
 5230 PRINT "A/C";TAB 8;"BAL";TAB 16;"A/C";TAB 24;"BAL"
 5240 LET LI=0
 5250 LET K=0
 5260 FOR J=1 TO 200
 5270 PRINT J;TAB 8;INT (A(J)*100+.5)/100;
 5280 LET LI=LI+A(J)
 5290 LET J=J+1
 5300 PRINT ;TAB 16;J;TAB 24;INT (A(J)*100+.5)/100
 5310 LET LI=LI+A(J)
 5320 LET K=K+1
 5330 IF K=18 THEN COPY 
 5340 IF K=18 THEN CLS 
 5350 IF K=18 THEN LET K=0
 5360 NEXT J
 5370 PRINT 
 5380 PRINT "TOTAL LIABILITIES=£";INT (LI*100+.5)/100
 5390 COPY 
 5400 GOTO 1000
 5500 CLS 
 5505 LET X=1
 5510 IF A(X)=0 THEN PRINT "ACCOUNT NO. ";X;" IS FREE"
 5520 IF A(X)=0 THEN GOTO 5550
 5530 LET X=X+1
 5535 IF X=201 THEN PRINT "NO VACENT ACCOUNTS"
 5540 IF X=201 THEN GOTO 5550
 5545 GOTO 5510
 5550 PRINT "KEY %N%/%L"
 5560 INPUT A$
 5570 GOTO 1000
 6000 LET W=0
 6010 CLS 
 6020 PRINT AT 10,10;"% %S%T%A%R%T% %T%A%P%E% "
 6030 PRINT TAB 10;"KEY NEWLINE"
 6040 INPUT A$
 6050 CLS 
 6060 SAVE "BAN%K"
 6070 GOTO 200
 
   1 GOTO 200
  10 PRINT "KEY THE AMOUNT ";TAB 20;"EG.£%4%9%.%0%4"
  11 INPUT AJ
  12 CLS 
  13 PRINT "£";AJ
  14 GOSUB 70
  15 IF A$<>"C" THEN GOTO 10
  16 RETURN 
  30 LET AJ=AJ*-1
  35 LET BL=BL+AJ
  36 RETURN 
  45 IF BL<0 THEN PRINT "%O%V%E%R%D%R%A%W%N% %B%Y ";
  46 PRINT "£";INT (BL*100+.5)/100;
  47 IF BL>=0 THEN PRINT " %I%N% %C%R%E%D%I%T"
  48 PRINT 
  49 RETURN 
  60 PRINT "KEY THE DATE, DAY NO. FIRST"
  61 INPUT D1
  62 PRINT "NEXT THE MONTH NO."
  63 INPUT D2
  64 PRINT "THE LAST 2 DIGITS OF THE YEAR?"
  65 INPUT D3
  66 PRINT D1;"/";D2;"/";D3
  67 GOSUB 70
  68 IF A$<>"C" THEN GOTO 60
  69 RETURN 
  70 PRINT 
  71 PRINT "KEY C IF THIS IS OK,OTHERWISE   NEWLINE"
  72 INPUT A$
  73 CLS 
  74 RETURN 
  80 PRINT "% %S%T%A%N%D%I%N%G% %O%R%D%E%R%S% "
  81 LET Z=100000
  82 PRINT "NO.";TAB 4;"£ MONTH";TAB 13;"£ QUARTER";TAB 24;"£ ANNUAL"
  83 FOR J=1 TO 10
  84 PRINT J;TAB 4;M(J);TAB 13;(INT (Q(J)*Z+.5)-INT Q(J)*Z)/100;TAB 20;INT Q(J);TAB 24;(INT (N(J)*Z+.5)-INT N(J)*Z)/100;TAB 30;INT N(J)
  85 NEXT J
  86 RETURN 
  90 FOR J=1 TO 10
  91 LET AJ=M(J)
  92 GOSUB 30
  93 NEXT J
  95 FOR J=1 TO 10
  96 GOTO 120
  97 LET AJ=(Q(J)-INT Q(J))*1000
  98 GOSUB 30
  99 NEXT J
 100 FOR J=1 TO 10
 101 IF INT N(J)<>D5 THEN GOTO 104
 102 LET AJ=(N(J)-INT N(J))*1000
 103 GOSUB 30
 104 NEXT J
 105 RETURN 
 120 LET A=INT Q(J)
 130 IF D5=A OR D5=A+3 OR D5=A+6 OR D5=A+9 OR D5=A-3 OR D5=A-6 OR D5=A-9 THEN GOTO 97
 140 LET A=0
 150 GOTO 99
 200 CLS 
 210 PRINT TAB 6;"% %P%E%R%S%O%N%A%L% %F%I%N%A%N%C%E%S% "
 220 PRINT 
 230 PRINT "TO UPDATE THE BALANCE      KEY U"
 240 PRINT "TO SET UP THE SYSTEM       KEY S"
 250 PRINT "TO CHANGE STANDING ORDERS  KEY C"
 260 PRINT "TO FILE                    KEY F"
 270 INPUT A$
 280 IF A$="U" THEN GOTO 2000
 282 IF A$="S" THEN GOTO 300
 284 IF A$="C" THEN GOTO 1200
 286 IF A$="F" THEN GOTO 3000
 290 GOTO 200
 300 CLS 
 310 LET BL=0
 330 LET D$="MONTH DUE"
 340 PRINT "ARE YOU IN CREDIT OR OVERDRAWN  AT THE BANK? C/O"
 350 INPUT B$
 360 GOSUB 10
 370 IF B$="0" THEN GOSUB 30
 380 IF B$="C" THEN GOSUB 35
 390 IF B$<>"C" AND B$<>"O" THEN GOTO 300
 400 DIM Q(10)
 410 DIM N(10)
 420 DIM M(10)
 430 FOR K=1 TO 3
 440 FOR J=1 TO 10
 450 IF K=1 THEN PRINT "MONTHLY";
 460 IF K=2 THEN PRINT "QUARTERLY";
 470 IF K=3 THEN PRINT "ANNUAL";
 480 PRINT " STANDING ORDER NO. ";J
 490 GOSUB 10
 500 IF AJ=0 THEN NEXT K
 510 IF K=2 THEN GOTO 590
 520 IF K=3 THEN GOTO 690
 530 IF K=4 THEN GOTO 800
 540 LET M(J)=AJ
 570 NEXT J
 580 NEXT K
 590 PRINT D$
 620 INPUT A
 630 PRINT TAB 8;"MONTH ";A
 640 GOSUB 70
 650 IF A$<>"C" THEN GOTO 590
 660 LET Q(J)=AJ/1000+A
 670 NEXT J
 680 NEXT K
 690 PRINT D$
 710 INPUT A
 730 LET N(J)=AJ/1000+A
 740 NEXT J
 750 NEXT K
 800 CLS 
 810 GOSUB 80
 820 GOSUB 70
 830 IF A$<>"C" THEN GOTO 400
 840 CLS 
 900 GOSUB 60
 910 LET D4=D1
 920 LET D5=D2
 930 LET D6=D3
 940 CLS 
 1000 CLS 
 1010 PRINT "KEY THE NO. OF YOUR CHEQUE BOOK"
 1020 INPUT C
 1030 PRINT C
 1040 PRINT "NOW THE NEXT CHEQUE NO."
 1050 INPUT C1
 1060 PRINT C1
 1070 PRINT "NEXT THE LAST CHEQUE NO IN BOOK"
 1080 INPUT C2
 1090 PRINT C2
 1100 PRINT "AND THE NEXT PAYING-IN SLIP NO."
 1110 INPUT C3
 1120 PRINT C3
 1130 GOSUB 70
 1140 IF A$<>"C" THEN GOTO 1000
 1150 GOTO 200
 1200 CLS 
 1210 PRINT "% %R%E%V%I%S%I%N%G% "
 1220 GOSUB 80
 1230 PRINT 
 1240 PRINT "WHICH S.O.;"
 1250 INPUT J
 1260 PRINT J
 1270 PRINT "MONTH(1)QUARTER(2) OR YEAR(3)?"
 1280 INPUT A
 1290 CLS 
 1300 PRINT "GIVE REVISED FIGURE"
 1310 GOSUB 10
 1320 IF A=2 THEN GOTO 1380
 1330 IF A=3 THEN GOTO 1430
 1340 LET M(J)=AJ
 1350 GOTO 200
 1380 PRINT D$
 1390 INPUT A
 1400 LET Q(J)=AJ/1000+A
 1410 GOTO 200
 1430 PRINT D$
 1440 INPUT A
 1450 LET N(J)=AJ/1000+A
 1460 GOTO 200
 2000 CLS 
 2010 PRINT "TRANSACTIONS SINCE ";D4;"/";D5;"/";D6
 2020 PRINT 
 2030 GOSUB 60
 2040 IF (D3-D6)*365+(D2-D5)*30+D1-D4<0 THEN GOTO 2030
 2050 PRINT D1;"/";D2;"/";D3
 2060 IF D5=D2 AND D6=D3 THEN GOTO 2180
 2070 IF D4<25 THEN GOSUB 2130
 2080 LET D4=1
 2090 LET D5=D5+1
 2100 IF D5>12 THEN LET D6=D6+1
 2110 IF D5>12 THEN LET D5=D5-12
 2120 GOTO 2060
 2130 PRINT "KEY SALARY FOR MONTH ";D5;"/";D6
 2140 GOSUB 10
 2150 GOSUB 35
 2160 GOSUB 90
 2170 RETURN 
 2180 IF D4>24 OR D1<25 THEN GOTO 2200
 2190 GOSUB 2130
 2200 CLS 
 2210 GOSUB 45
 2220 PRINT "CHEQUE BOOK NO. ";C
 2230 PRINT "KEY THE VALUE OF CHEQUE NO.";C1
 2240 GOSUB 10
 2250 GOSUB 30
 2260 IF AJ=0 THEN GOTO 2450
 2270 IF C1=C2 THEN PRINT "IF YOU HAVE DETAILS OF BOOK"
 2280 IF C1=C2 THEN PRINT C+1;" THEN KEY D, OTHERWISE KEY %N%/%L"
 2290 IF C1=C2 THEN INPUT A$
 2300 IF C1=C2 AND A$="D" THEN GOTO 2340
 2310 IF C1=C2 THEN GOTO 2475
 2320 LET C1=C1+1
 2330 GOTO 2200
 2340 LET C=C+1
 2350 CLS 
 2360 PRINT "KEY THE FIRST CHEQUE NO IN BOOK ";C
 2370 INPUT C1
 2380 PRINT C1
 2390 PRINT "NOW THE LAST"
 2400 INPUT C2
 2410 PRINT C2
 2420 GOSUB 70
 2430 IF A$<>"C" THEN GOTO 2350
 2440 GOTO 2200
 2450 PRINT "IF THAT WAS A CANCELLED CHEQUE  KEY C OTHERWISE KEY %N%/%L"
 2460 INPUT A$
 2470 IF A$="C" THEN LET C1=C1+1
 2475 CLS 
 2480 IF A$="C" THEN GOTO 2200
 2490 GOSUB 45
 2500 PRINT "% %P%A%Y%M%E%N%T%S% %I%N%T%O% %A%C%C%O%U%N%T% "
 2510 PRINT 
 2520 PRINT "KEY VALUE OF PAYING-IN SLIP NO. ";C3
 2530 GOSUB 10
 2540 IF AJ=0 THEN GOTO 2600
 2550 GOSUB 35
 2560 LET C3=C3+1
 2570 GOTO 2500
 2600 CLS 
 2610 GOSUB 45
 2620 PRINT "ANY SPECIAL PAY-OUTS? Y/N"
 2630 INPUT A$
 2640 IF A$<>"Y" THEN GOTO 2690
 2650 GOSUB 10
 2660 GOSUB 30
 2670 GOTO 2600
 2690 CLS 
 2700 PRINT "ANY SPECIAL DEPOSITS? Y/N"
 2710 INPUT A$
 2720 IF A$<>"Y" THEN GOTO 200
 2730 GOSUB 10
 2740 GOSUB 35
 2750 GOTO 2690
 3000 CLS 
 3010 PRINT TAB 8;"% %F%I%N%A%L% %B%A%L%A%N%C%E% "
 3020 PRINT 
 3030 GOSUB 45
 3040 PRINT AT 10,10;"% %S%T%A%R%T% %T%A%P%E% "
 3045 PRINT TAB 10;"KEY NEWLINE"
 3050 INPUT A$
 3060 LET D4=D1
 3070 LET D5=D2
 3080 LET D6=D3
 3090 CLS 
 3100 SAVE "CASH %2"
 3110 GOTO 200
 
   1 GOTO 200
  10 PRINT "KEY THE AMOUNT ";TAB 20;"EG.£%4%9%.%0%4"
  11 INPUT AJ
  12 CLS 
  13 PRINT "£";AJ
  14 GOSUB 70
  15 IF A$<>"C" THEN GOTO 10
  16 RETURN 
  30 LET AJ=AJ*-1
  35 LET BL=BL+AJ
  36 RETURN 
  45 IF BL<0 THEN PRINT "%O%V%E%R%D%R%A%W%N% %B%Y ";
  46 PRINT "£";INT (BL*100+.5)/100;
  47 IF BL>=0 THEN PRINT " %I%N% %C%R%E%D%I%T"
  48 PRINT 
  49 RETURN 
  60 PRINT "KEY THE DATE, DAY NO. FIRST"
  61 INPUT D1
  62 PRINT "NEXT THE MONTH NO."
  63 INPUT D2
  64 PRINT "THE LAST 2 DIGITS OF THE YEAR?"
  65 INPUT D3
  66 PRINT D1;"/";D2;"/";D3
  67 GOSUB 70
  68 IF A$<>"C" THEN GOTO 60
  69 RETURN 
  70 PRINT 
  71 PRINT "KEY C IF THIS IS OK,OTHERWISE   NEWLINE"
  72 INPUT A$
  73 CLS 
  74 RETURN 
  80 PRINT "% %S%T%A%N%D%I%N%G% %O%R%D%E%R%S% "
  81 LET Z=100000
  82 PRINT "NO.";TAB 4;"£ MONTH";TAB 13;"£ QUARTER";TAB 24;"£ ANNUAL"
  83 FOR J=1 TO 10
  84 PRINT J;TAB 4;M(J);TAB 13;(INT (Q(J)*Z+.5)-INT Q(J)*Z)/100;TAB 20;INT Q(J);TAB 24;(INT (N(J)*Z+.5)-INT N(J)*Z)/100;TAB 30;INT N(J)
  85 NEXT J
  86 RETURN 
  90 FOR J=1 TO 10
  91 LET AJ=M(J)
  92 GOSUB 30
  93 NEXT J
  95 FOR J=1 TO 10
  96 GOTO 120
  97 LET AJ=(Q(J)-INT Q(J))*1000
  98 GOSUB 30
  99 NEXT J
 100 FOR J=1 TO 10
 101 IF INT N(J)<>D5 THEN GOTO 104
 102 LET AJ=(N(J)-INT N(J))*1000
 103 GOSUB 30
 104 NEXT J
 105 RETURN 
 120 LET A=INT Q(J)
 130 IF D5=A OR D5=A+3 OR D5=A+6 OR D5=A+9 OR D5=A-3 OR D5=A-6 OR D5=A-9 THEN GOTO 97
 140 LET A=0
 150 GOTO 99
 200 CLS 
 210 PRINT TAB 6;"% %P%E%R%S%O%N%A%L% %F%I%N%A%N%C%E%S% "
 220 PRINT 
 230 PRINT "TO UPDATE THE BALANCE      KEY U"
 250 PRINT "TO CHANGE STANDING ORDERS  KEY C"
 260 PRINT "TO FILE                    KEY F"
 270 INPUT A$
 280 IF A$="U" THEN GOTO 2000
 284 IF A$="C" THEN GOTO 1200
 286 IF A$="F" THEN GOTO 3000
 290 GOTO 200
 1200 CLS 
 1210 PRINT "% %R%E%V%I%S%I%N%G% "
 1220 GOSUB 80
 1230 PRINT 
 1240 PRINT "WHICH S.O.;"
 1250 INPUT J
 1260 PRINT J
 1270 PRINT "MONTH(1)QUARTER(2) OR YEAR(3)?"
 1280 INPUT A
 1290 CLS 
 1300 PRINT "GIVE REVISED FIGURE"
 1310 GOSUB 10
 1320 IF A=2 THEN GOTO 1380
 1330 IF A=3 THEN GOTO 1430
 1340 LET M(J)=AJ
 1350 GOTO 200
 1380 PRINT D$
 1390 INPUT A
 1400 LET Q(J)=AJ/1000+A
 1410 GOTO 200
 1430 PRINT D$
 1440 INPUT A
 1450 LET N(J)=AJ/1000+A
 1460 GOTO 200
 2000 CLS 
 2010 PRINT "TRANSACTIONS SINCE ";D4;"/";D5;"/";D6
 2020 PRINT 
 2030 GOSUB 60
 2040 IF (D3-D6)*365+(D2-D5)*30+D1-D4<0 THEN GOTO 2030
 2050 PRINT D1;"/";D2;"/";D3
 2060 IF D5=D2 AND D6=D3 THEN GOTO 2180
 2070 IF D4<25 THEN GOSUB 2130
 2080 LET D4=1
 2090 LET D5=D5+1
 2100 IF D5>12 THEN LET D6=D6+1
 2110 IF D5>12 THEN LET D5=D5-12
 2120 GOTO 2060
 2130 PRINT "KEY SALARY FOR MONTH ";D5;"/";D6
 2140 GOSUB 10
 2150 GOSUB 35
 2160 GOSUB 90
 2170 RETURN 
 2180 IF D4>24 OR D1<25 THEN GOTO 2200
 2190 GOSUB 2130
 2200 CLS 
 2210 GOSUB 45
 2220 PRINT "CHEQUE BOOK NO. ";C
 2230 PRINT "KEY THE VALUE OF CHEQUE NO.";C1
 2240 GOSUB 10
 2250 GOSUB 30
 2260 IF AJ=0 THEN GOTO 2450
 2270 IF C1=C2 THEN PRINT "IF YOU HAVE DETAILS OF BOOK"
 2280 IF C1=C2 THEN PRINT C+1;" THEN KEY D, OTHERWISE KEY %N%/%L"
 2290 IF C1=C2 THEN INPUT A$
 2300 IF C1=C2 AND A$="D" THEN GOTO 2340
 2310 IF C1=C2 THEN GOTO 2475
 2320 LET C1=C1+1
 2330 GOTO 2200
 2340 LET C=C+1
 2350 CLS 
 2360 PRINT "KEY THE FIRST CHEQUE NO IN BOOK ";C
 2370 INPUT C1
 2380 PRINT C1
 2390 PRINT "NOW THE LAST"
 2400 INPUT C2
 2410 PRINT C2
 2420 GOSUB 70
 2430 IF A$<>"C" THEN GOTO 2350
 2440 GOTO 2200
 2450 PRINT "IF THAT WAS A CANCELLED CHEQUE  KEY C OTHERWISE KEY %N%/%L"
 2460 INPUT A$
 2470 IF A$="C" THEN LET C1=C1+1
 2475 CLS 
 2480 IF A$="C" THEN GOTO 2200
 2490 GOSUB 45
 2500 PRINT "% %P%A%Y%M%E%N%T%S% %I%N%T%O% %A%C%C%O%U%N%T% "
 2510 PRINT 
 2520 PRINT "KEY VALUE OF PAYING-IN SLIP NO. ";C3
 2530 GOSUB 10
 2540 IF AJ=0 THEN GOTO 2600
 2550 GOSUB 35
 2560 LET C3=C3+1
 2570 GOTO 2500
 2600 CLS 
 2610 GOSUB 45
 2620 PRINT "ANY SPECIAL PAY-OUTS? Y/N"
 2630 INPUT A$
 2640 IF A$<>"Y" THEN GOTO 2690
 2650 GOSUB 10
 2660 GOSUB 30
 2670 GOTO 2600
 2690 CLS 
 2700 PRINT "ANY SPECIAL DEPOSITS? Y/N"
 2710 INPUT A$
 2720 IF A$<>"Y" THEN GOTO 200
 2730 GOSUB 10
 2740 GOSUB 35
 2750 GOTO 2690
 3000 CLS 
 3010 PRINT TAB 8;"% %F%I%N%A%L% %B%A%L%A%N%C%E% "
 3020 PRINT 
 3030 GOSUB 45
 3040 PRINT AT 10,10;"% %S%T%A%R%T% %T%A%P%E% "
 3045 PRINT TAB 10;"KEY NEWLINE"
 3050 INPUT A$
 3060 LET D4=D1
 3070 LET D5=D2
 3080 LET D6=D3
 3090 CLS 
 3100 SAVE "CASH %3"
 3110 GOTO 200
 
  10 PRINT "SETTING UP THE SYSTEM"
  20 PRINT 
  30 PRINT 
  40 PRINT "KEY MAXIMUM NO. OF EXAM ENTRIES PER STUDENT",
  50 INPUT X
  60 PRINT X
  70 PRINT "KEY NO. OF GIRLS ";
  80 INPUT G
  90 PRINT G
 100 PRINT "KEY NO. OF BOYS ";
 110 INPUT B
 120 PRINT B
 130 DIM G$(G,2*X+6)
 140 DIM B$(B,2*X+6)
 150 GOSUB 200
 160 IF A$<>"C" THEN GOTO 10
 170 GOTO 2000
 200 PRINT 
 201 PRINT "KEY C IF THESE ARE OK OTHERWISE KEY NEWLINE"
 202 INPUT A$
 203 CLS 
 204 RETURN 
 220 PRINT 
 230 PRINT "KEY:EXAM CODE %N%/%L LEVEL %N%/%L"
 240 PRINT "KEY Z AFTER LAST EXAM"
 250 PRINT "KEY S TO RECORD DATA SO FAR"
 255 PRINT 
 260 PRINT "% %E%X%A%M% ","% %L%E%V%E%L% "
 270 FOR K=7 TO 2*X+6 STEP 2
 280 INPUT A$
 290 IF CODE A$<38 OR CODE A$>63 THEN PRINT "ERROR";
 300 IF CODE A$<38 OR CODE A$>63 THEN GOTO 280
 310 IF A$="Z" THEN LET K=2*X+6
 320 IF A$="Z" THEN GOTO 460
 325 IF A$="S" THEN GOTO 6000
 330 IF J>G THEN GOTO 360
 340 LET G$(J,K)=CHR$ CODE A$
 350 GOTO 370
 360 LET B$(J-G,K)=CHR$ CODE A$
 370 PRINT CHR$ CODE A$,
 380 INPUT A$
 390 IF A$<>"O" AND A$<>"C" THEN PRINT "ERROR ";
 400 IF A$<>"O" AND A$<>"C" THEN GOTO 380
 410 PRINT A$
 420 IF J>G THEN GOTO 450
 430 LET G$(J,K+1)=A$
 440 GOTO 460
 450 LET B$(J-G,K+1)=A$
 460 NEXT K
 470 RETURN 
 500 CLS 
 510 FOR K=1 TO 2*X+6
 520 IF J>G THEN GOTO 550
 530 LET G$(J,K)=" "
 540 GOTO 560
 550 LET B$(J-G,K)=" "
 560 NEXT K
 570 RETURN 
 1000 PRINT " % %T%H%R%E%A%D%N%E%E%D%L%E% %S%T%R%E%E%T% %S%C%H%O%O%L% "
 1010 PRINT " % %E%X%A%M% %P%E%R%F%O%R%M%A%N%C%E% %A%N%A%L%Y%S%I%S% % "
 1020 PRINT 
 1030 PRINT "KEY 1 TO SET UP SYSTEM"
 1040 PRINT "KEY 2 TO STORE RESULTS"
 1050 PRINT "KEY 3 TO STOP "
 1060 PRINT "KEY 4 FOR DOB SORT"
 1070 PRINT "KEY 5 FOR SUBJECT SORT"
 1080 PRINT "KEY 6 FOR RESULTS SORT"
 1100 INPUT A$
 1110 CLS 
 1120 IF A$="1" THEN GOTO 10
 1130 IF A$="2" THEN GOTO 2400
 1140 IF A$="3" THEN GOTO 5000
 1150 IF A$="4" THEN GOTO 3000
 1160 IF A$="5" THEN GOTO 3500
 1170 IF A$="6" THEN GOTO 4000
 1180 GOTO 1000
 2000 CLS 
 2010 FOR J=1 TO G
 2020 PRINT "   ENTERING GIRLS EXAMS"
 2025 PRINT "STUDENT NO. ";J
 2030 GOSUB 220
 2040 GOSUB 200
 2050 IF A$<>"C" THEN GOSUB 500
 2055 IF A$<>"C" THEN LET J=J-1
 2060 IF A$<>"C" THEN GOTO 2160
 2065 GOSUB 2200
 2070 NEXT J
 2100 FOR J=G+1 TO G+B
 2110 PRINT "ENTERING BOYS EXAMS"
 2115 PRINT "STUDENT NO. ";J
 2120 GOSUB 220
 2130 GOSUB 200
 2140 IF A$<>"C" THEN GOSUB 500
 2145 IF A$<>"C" THEN LET J=J-1
 2150 IF A$<>"C" THEN GOTO 2160
 2155 GOSUB 2200
 2160 NEXT J
 2170 GOTO 1000
 2200 PRINT "KEY DATE OF BIRTH AS A SIX FIG. NUMBER EG. FOR IST APRIL 1965   KEY 010465"
 2210 INPUT D$
 2215 IF LEN D$<>6 THEN GOTO 2210
 2220 CLS 
 2230 PRINT D$(1 TO 2);"/";D$(3 TO 4);"/";D$(5 TO )
 2240 GOSUB 200
 2250 IF A$<>"C" THEN GOTO 2200
 2260 IF J>G THEN GOTO 2290
 2270 LET G$(J, TO 6)=D$
 2280 GOTO 2300
 2290 LET B$(J-G, TO 6)=D$
 2300 RETURN 
 2400 CLS 
 2410 FOR J=1 TO G
 2420 PRINT "ENTERING GIRLS RESULTS"
 2430 PRINT 
 2440 PRINT "STUDENT ";J
 2450 PRINT 
 2460 FOR K=7 TO 2*X+5 STEP 2
 2470 IF G$(J,K TO K)=" " THEN LET K=2*X+6
 2480 IF G$(J,K TO K)=" " THEN GOTO 2540
 2490 PRINT G$(J,K TO K),
 2500 INPUT A$
 2510 IF LEN A$<>1 THEN GOTO 2500
 2520 PRINT A$
 2530 LET G$(J,K+1)=A$
 2540 NEXT K
 2550 GOSUB 200
 2560 IF A$<>"C" THEN GOTO 2420
 2565 NEXT J
 2570 FOR J=1 TO B
 2580 PRINT "ENTERING BOYS RESULTS"
 2590 PRINT 
 2600 PRINT "STUDENT ";J+G
 2610 PRINT 
 2620 FOR K=7 TO 2*X+5 STEP 2
 2630 IF B$(J,K TO K)=" " THEN LET K=2*X+6
 2640 IF B$(J,K TO K)=" " THEN GOTO 2700
 2650 PRINT B$(J,K TO K),
 2660 INPUT A$
 2670 IF LEN A$<>1 THEN GOTO 2660
 2680 PRINT A$
 2690 LET B$(J,K+1)=A$
 2700 NEXT K
 2710 GOSUB 200
 2720 IF A$<>"C" THEN GOTO 2580
 2725 NEXT J
 2730 GOTO 1000
 3000 CLS 
 3010 PRINT TAB 10;"DOB SORT"
 3020 PRINT 
 3030 FOR J=1 TO G+B
 3040 IF J>G THEN GOTO 3100
 3050 IF G$(J,2 TO 2)<>"5" THEN GOTO 3170
 3060 PRINT "STUDENT ";J;" RESULTS"
 3070 FOR K=7 TO 2*X+6
 3080 PRINT G$(J,K TO K),
 3090 GOTO 3130
 3100 IF B$(J-G,2 TO 2)<>"5" THEN GOTO 3170
 3105 PRINT "STUDENT ";J;" RESULTS"
 3110 FOR K=7 TO 2*X+6
 3120 PRINT B$(J-G,K TO K),
 3130 NEXT K
 3135 PRINT 
 3140 PRINT "KEY NEWLINE FOR NEXT STUDENT"
 3150 INPUT A$
 3160 CLS 
 3170 NEXT J
 3180 GOTO 1000
 3500 CLS 
 3510 PRINT "   % %P%E%R%F%O%R%M%A%N%C%E%A%T% %E%A%C%H% %E%X%A%M% "
 3520 PRINT 
 3530 PRINT "KEY EXAM CODE"
 3540 INPUT C$
 3545 PRINT C$
 3550 PRINT "KEY MAXIMUM GRADE ";
 3560 INPUT M$
 3565 PRINT M$
 3570 PRINT "KEY MINIMUM GRADE ";
 3580 INPUT L$
 3585 PRINT L$
 3590 GOSUB 200
 3595 IF A$<>"C" THEN GOTO 3500
 3600 CLS 
 3605 FAST 
 3610 LET N=0
 3620 FOR J=1 TO G+B
 3630 FOR K=7 TO 5+2*X STEP 2
 3640 IF J>G THEN GOTO 3680
 3650 IF G$(J,K TO K)<>C$ THEN GOTO 3710
 3660 LET A=CODE G$(J,K+1 TO K+1)
 3670 GOTO 3700
 3680 IF B$(J-G,K TO K)<>C$ THEN GOTO 3710
 3690 LET A=CODE B$(J-G,K+1 TO K+1)
 3700 IF A<=CODE L$ AND A>=CODE M$ THEN LET N=N+1
 3710 NEXT K
 3720 NEXT J
 3730 SLOW 
 3740 PRINT N;" STUDENTS GAINED GRADES","BETWEEN ";L$;" AND ";M$
 3750 PRINT 
 3760 PRINT "KEY NEWLINE TO CONTINUE"
 3770 INPUT A$
 3780 CLS 
 3790 GOTO 1000
 4000 CLS 
 4010 PRINT "     O LEVEL ABC/1 SORT"
 4020 PRINT 
 4030 PRINT "KEY THE NO. OF PASSES ";
 4035 INPUT N
 4040 PRINT N
 4045 PRINT 
 4050 PRINT "THESE GIRLS GAINED ",N;" PASSES AT O LEVEL"
 4055 FAST 
 4060 FOR J=1 TO G+B
 4070 LET A=0
 4080 FOR K=7 TO 2*X+5 STEP 2
 4090 IF J>G THEN GOTO 4120
 4100 LET A$=G$(J,K+1 TO K+1)
 4110 GOTO 4130
 4120 LET A$=B$(J-G,K+1 TO K+1)
 4130 IF A$="A" OR A$="B" OR A$="C" OR A$="1" THEN LET A=A+1
 4140 NEXT K
 4150 IF A=N THEN PRINT J,
 4160 IF J=G THEN GOTO 4300
 4170 NEXT J
 4175 SLOW 
 4177 PRINT 
 4180 PRINT "KEY NEWLINE TO CONDINUE"
 4190 INPUT A$
 4200 CLS 
 4210 GOTO 1000
 4300 PRINT 
 4310 PRINT "THESE BOYS GAINED ";N,"PASSES AT O LEVEL"
 4330 GOTO 4170
 5010 PRINT AT 10,10;"% %S%T%A%R%T% %T%A%P%E% "
 5020 PRINT TAB 10;"KEY NEWLINE"
 5030 INPUT A$
 5040 CLS 
 5050 SAVE "EXA%M"
 5060 GOTO 1000
 6000 CLS 
 6010 PRINT AT 10,10;"START TAPE"
 6020 PRINT TAB 10;"KEY NEWLINE"
 6030 INPUT A$
 6040 CLS 
 6050 SAVE "EXA%M"
 6060 PRINT "STUDENT ";J
 6070 GOTO 220
 
  10 PRINT "     % %R%A%N%K% %O%R%D%E%R% %P%R%O%G%R%A%M% "
  20 PRINT 
  30 PRINT "KEY THE NO. OF STUDENTS"
  40 INPUT A
  50 PRINT A;" STUDENTS"
  60 DIM E(A)
  70 DIM F(A)
  80 DIM G(A)
  90 DIM Y(10)
 100 CLS 
 110 PRINT "KEY THE NO. OF TESTS"
 120 INPUT B
 130 PRINT B;" TESTS"
 140 PRINT 
 150 PRINT "KEY THE MAXIMUM SCORE"
 160 INPUT C
 170 PRINT C;" MARKS"
 180 PRINT 
 190 FOR J=1 TO B
 200 PRINT "KEY SCORES FOR TEST ";J
 210 PRINT "IN BLOCKS OF 10"
 220 PRINT 
 230 PRINT "IF A STUDENT HAS NO GRADE KEY ";C+1
 240 PRINT "KEY NEWLINE TO START"
 250 INPUT A$
 260 CLS 
 270 LET L=0
 275 PRINT "TEST ";J
 277 PRINT 
 280 FOR K=1 TO 10
 285 IF L+K=A+1 THEN GOTO 350
 290 PRINT "STUDENT ";L+K,
 300 INPUT S
 305 IF S>C+1 THEN GOTO 900
 310 LET Y(K)=S
 320 PRINT Y(K)
 330 NEXT K
 340 PRINT 
 350 PRINT "IF THESE ARE CORRECT THEN KEY C"
 360 INPUT A$
 370 CLS 
 380 IF A$<>"C" THEN GOTO 275
 385 IF L+K=A+1 THEN GOTO 450
 390 FOR K=1 TO 10
 400 IF Y(K)<>C+1 THEN LET E(L+K)=E(L+K)+Y(K)
 410 IF Y(K)<>C+1 THEN LET F(L+K)=F(L+K)+1
 420 NEXT K
 430 LET L=L+10
 440 GOTO 275
 450 FOR M=1 TO A-L
 460 IF Y(M)<>C+1 THEN LET E(L+M)=E(L+M)+Y(M)
 470 IF Y(M)<>C+1 THEN LET F(L+M)=F(L+M)+1
 480 NEXT M
 500 CLS 
 510 PRINT "ALL SCORES NOW IN FOR TEST ";J
 520 PRINT 
 530 PRINT "KEY C TO STORE NEXT TEST SCORES"
 540 PRINT "KEY S TO STOP AND FILE DATA"
 550 INPUT A$
 560 IF A$="C" THEN GOTO 590
 570 IF A$="S" THEN GOTO 1000
 580 GOTO 500
 590 NEXT J
 600 FAST 
 610 FOR N=1 TO A
 620 LET G(N)=E(N)*(100/C)/(F(N)+.001)
 630 NEXT N
 640 SLOW 
 650 CLS 
 700 LET P=0
 710 PRINT "THESE STUDENTS SCORED AN AVERAGE OF ";P;" MARKS"
 720 PRINT 
 730 FOR N=1 TO A
 740 IF INT (G(N)+.5)=P THEN PRINT "STUDENT ";N," ON ";F(N);" TESTS"
 750 NEXT N
 760 INPUT A$
 770 LET P=P+1
 780 CLS 
 790 IF P=101 THEN GOTO 540
 800 GOTO 710
 900 PRINT "SCORE TOO HIGH"
 910 PRINT "TRY AGAIN ";L+K,
 920 GOTO 300
 1000 CLS 
 1010 LET X=1
 1020 PRINT AT 10,10;"% %S%T%A%R%T% %T%A%P%E% "
 1030 PRINT TAB 10;"KEY NEWLINE"
 1035 INPUT A$
 1040 CLS 
 1050 SAVE "RAN%K"
 1060 IF X<>1 THEN RUN 
 1070 GOTO 500
 
   1 GOTO 20
   2 PRINT "KEY C IF THSE ARE OK, OTHERWISE KEY NEWLINE"
   3 INPUT A$
   4 CLS 
   5 PRINT "ITEM NO. ";J
   6 PRINT 
   7 RETURN 
  20 PRINT "KEY NO OF ITEMS"
  21 INPUT A$
  22 LET Z=VAL A$
  23 DIM A(Z)
  24 DIM B(Z)
  25 DIM C(Z)
  26 DIM D(Z)
  27 DIM E(Z)
  28 LET B=10
  29 LET C=100
  30 LET D=1000
  31 LET E=10000
  32 LET F=100000
  33 LET G=1000000
  34 LET H=10000000
  35 GOTO 2000
 100 FOR J=1 TO Z
 110 GOSUB 4
 120 PRINT "KEY AREA",
 130 INPUT A
 140 LET A(J)=A
 150 PRINT A
 160 PRINT "KEY BORE",
 170 INPUT A
 180 LET A(J)=A(J)+A*B
 190 PRINT A
 200 PRINT "KEY CAPACITY",
 210 INPUT A
 220 LET A(J)=A(J)+A*D
 230 PRINT A
 240 PRINT "KEY DEPTH",
 250 INPUT A
 260 LET A(J)=A(J)+A*F+H
 270 PRINT A
 280 GOSUB 2
 290 IF A$<>"C" THEN GOTO 120
 300 PRINT "KEY END SIZE",
 310 INPUT A
 320 LET B(J)=A
 330 PRINT A
 340 PRINT "FINISH",
 350 INPUT A
 360 LET B(J)=B(J)+A*C
 370 PRINT A
 380 PRINT "KEY GROMET SIZE",
 390 INPUT A
 400 LET B(J)=B(J)+A*E
 410 PRINT A
 420 PRINT "HEIGHT",
 430 INPUT A
 440 LET B(J)=B(J)+A*G
 450 PRINT A
 460 PRINT "RIBBING",
 470 INPUT A
 480 LET B(J)=B(J)+A*H+H
 490 PRINT A
 500 GOSUB 2
 505 IF A$<>"C" THEN GOTO 300
 510 PRINT "KEY JOIST STRESS",
 520 INPUT A
 530 LET C(J)=A
 540 PRINT A
 550 PRINT "KEY KINK RESISTANCE",
 560 INPUT A
 570 LET C(J)=C(J)+A*B
 580 PRINT A
 590 PRINT "KEY LENGTH",
 600 INPUT A
 610 LET C(J)=C(J)+A*E+H
 620 PRINT A
 630 REM %S%P%A%R%E
 670 GOSUB 2
 680 IF A$<>"C" THEN GOTO 510
 690 PRINT "KEY MASS",
 700 INPUT A
 710 LET D(J)=A
 720 PRINT A
 730 PRINT "NODULAR FREQUENCY",
 740 INPUT A
 750 LET D(J)=D(J)+A*C
 760 PRINT A
 770 PRINT "KEY OUTSIDE DIAM",
 780 INPUT A
 790 LET D(J)=D(J)+A*E
 800 PRINT A
 810 PRINT "KEY PRESSURE",
 820 INPUT A
 830 LET D(J)=D(J)+A*G+H
 840 PRINT A
 845 REM %S%P%A%R%E
 850 PRINT "KEY C IF THESE ARE OK OTHERWISE NEWLINE"
 860 INPUT A$
 870 CLS 
 880 IF A$<>"C" THEN GOTO 690
 890 PRINT AT B,0;"ITEM ";J;" ENTERED"
 900 PRINT 
 910 PRINT "KEY 0 TO ENTER NEXT ITEM"
 920 PRINT "KEY THE NUMBER FOR ANOTHER ITEM"
 930 INPUT A
 940 IF A<>0 THEN LET J=A-1
 950 NEXT J
 960 CLS 
 970 GOTO 2000
 1000 PRINT "% %I%N%I%T%I%A%L% %S%E%A%R%C%H% "
 1010 PRINT " TO SPECIFY","KEY"
 1011 PRINT "AREA",0
 1012 PRINT "BORE",1
 1013 PRINT "CAPACITY",2
 1014 PRINT "DEPTH",3
 1015 PRINT "END SIZE",4
 1016 PRINT "FINISH",5
 1017 PRINT "GROMMET SIZE",6
 1018 PRINT "HEIGHT",7
 1019 PRINT "INTERNAL RIBBING",8
 1020 PRINT "JOIST STRESS",9
 1021 PRINT "KINK RESISTANCE",10
 1022 PRINT "LENGTH",11
 1023 PRINT "MASS",12
 1024 PRINT "NODULAR FREQUENCY",13
 1025 PRINT "OUTER DIAM",14
 1026 PRINT "PRESSURE",15
 1030 INPUT A$
 1035 CLS 
 1040 LET A=VAL A$
 1050 IF A<0 OR A>15 THEN GOTO 1000
 1100 PRINT "RANGE OF SEARCH"
 1110 PRINT 
 1120 PRINT "KEY MINIMUM",
 1130 INPUT A$
 1140 LET L=VAL A$
 1150 PRINT L
 1160 PRINT "KEY MAXIMUM",
 1170 INPUT A$
 1180 LET M=VAL A$
 1190 PRINT M
 1200 PRINT 
 1210 PRINT "KEY C IF CORRECT OTHERWISE %N%/%L"
 1220 INPUT A$
 1230 CLS 
 1240 IF A$<>"C" THEN GOTO 1100
 1300 FAST 
 1301 IF A=0 OR A=9 THEN LET X=8
 1305 IF A=0 OR A=9 THEN LET Y=8
 1310 IF A=1 THEN LET X=6
 1315 IF A=1 THEN LET Y=7
 1320 IF A=2 THEN LET X=4
 1325 IF A=2 THEN LET Y=5
 1330 IF A=3 THEN LET X=1
 1335 IF A=3 THEN LET Y=3
 1340 IF A=4 OR A=12 THEN LET X=7
 1345 IF A=4 OR A=12 THEN LET Y=8
 1350 IF A=5 OR A=13 THEN LET X=5
 1355 IF A=5 OR A=13 THEN LET Y=6
 1360 IF A=6 OR A=14 THEN LET X=3
 1365 IF A=6 OR A=14 THEN LET Y=4
 1370 IF A=7 OR A=15 THEN LET X=2
 1375 IF A=7 OR A=15 THEN LET Y=2
 1380 IF A=8 THEN LET X=1
 1385 IF A=8 THEN LET Y=1
 1390 IF A=10 THEN LET X=5
 1395 IF A=10 THEN LET Y=7
 1400 IF A=11 THEN LET X=2
 1405 IF A=11 THEN LET Y=4
 1410 SLOW 
 1420 RETURN 
 1500 FAST 
 1510 PRINT "SPECIFIED ITEMS"
 1520 FOR J=1 TO Z
 1530 GOSUB 1800
 1540 IF P>=L AND P<=M THEN LET E(J)=1
 1550 IF P<L OR P>M THEN LET E(J)=0
 1560 IF E(J)=1 THEN PRINT J,
 1570 NEXT J
 1580 SLOW 
 1590 PRINT 
 1600 PRINT "KEY %N%/%L"
 1610 INPUT A$
 1620 CLS 
 1630 RETURN 
 1700 FAST 
 1710 PRINT "SPECIFIED ITEMS"
 1720 FOR J=1 TO Z
 1725 IF E(J)=0 THEN GOTO 1750
 1730 GOSUB 1800
 1740 IF P>=L AND P<=M THEN PRINT J
 1750 NEXT J
 1760 SLOW 
 1770 INPUT A$
 1780 CLS 
 1790 RETURN 
 1800 IF A<4 THEN LET A$=STR$ A(J)
 1810 IF A>3 AND A<9 THEN LET A$=STR$ B(J)
 1820 IF A>8 AND A<12 THEN LET A$=STR$ C(J)
 1830 IF A>11 THEN LET A$=STR$ D(J)
 1840 LET P=VAL A$(X TO Y)
 1850 IF A=3 THEN LET P=P-100
 1860 IF A=8 THEN LET P=P-1
 1870 RETURN 
 2000 PRINT TAB B;"% %R%E%C%O%R%D% "
 2010 PRINT 
 2020 PRINT "KEY 1 FOR INITIAL SEARCH"
 2030 PRINT "KEY 2 FOR SUBSEQUENT SEARCHES"
 2040 PRINT "KEY 3 TO STORE DATA"
 2050 PRINT "KEY 4 TO ADD DATA"
 2060 PRINT "KEY 5 TO STOP "
 2070 INPUT A$
 2080 CLS 
 2090 LET R=VAL A$
 2100 IF R=1 THEN GOSUB 1000
 2110 IF R=2 THEN PRINT "% %S%U%B%S%E%Q%U%E%N%T% %S%E%A%R%C%H% "
 2120 IF R=2 THEN GOSUB 1010
 2130 IF R=1 THEN GOSUB 1500
 2140 IF R=2 THEN GOSUB 1700
 2150 IF R=1 OR R=2 THEN GOTO 2000
 2160 IF R=3 THEN GOTO 100
 2170 IF R=4 THEN LET J=1
 2180 IF R=4 THEN GOTO 890
 2190 PRINT TAB B;"% %S%T%A%R%T% %T%A%P%E% "
 2200 PRINT AT B,B;"KEY NEWLINE"
 2210 INPUT A$
 2220 CLS 
 2230 SAVE "RECOR%D"
 2240 GOTO 2000

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top