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 intoAJ, confirms viaGOSUB 70, loops until confirmed.GOSUB 30: NegatesAJand adds to balanceBL(debit).GOSUB 35: AddsAJdirectly toBL(credit).GOSUB 45: Prints balance, showing “OVERDRAWN BY” in inverse video ifBL<0, else “IN CREDIT”. Rounds usingINT(BL*100+.5)/100.GOSUB 60: Three-field date entry (day, month, two-digit year) intoD1,D2,D3, confirmed viaGOSUB 70.GOSUB 70: Generic “KEY C IF OK” confirmation prompt, result inA$.
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).
| Feature | WORD 1 | WORD 2 |
|---|---|---|
| Max paragraphs | 57 | 54 |
| Readability index | No | Yes (WD, ST, LT) |
| Menu options | 6 | 7 |
| Read start paragraph | 1 | 2 |
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
GOSUBusing 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)/100throughout. - Program state persistence by saving the entire BASIC program including array data with
SAVE. FAST/SLOWbracketing of POKE-intensive loops for performance.
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.