--- title: "Programs for Real Applications" id: 56706 type: "computer_media" slug: "programs-for-real-applications" url: "http://localhost/computer_media/programs-for-real-applications/" markdown_url: "http://localhost/computer_media/programs-for-real-applications.md" published_at: "2024-09-22T23:31:48+00:00" modified_at: "2026-04-04T20:17:49+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2019/02/20230809-041332.jpg" excerpt: "A practical suite of reusable BASIC modules covering banking, word processing, personal finance, exam analysis, and data storage — all engineered for real-world use." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 1000" slug: "ts1000" taxonomy: "post_tag" url: "http://localhost/tag/ts1000/" model: - name: "Timex/Sinclair 1000" slug: "ts-1000" taxonomy: "model" url: "http://localhost/model/ts-1000/" indiv: - name: "Randle Hurley" slug: "randle-hurley" taxonomy: "indiv" url: "http://localhost/indiv/randle-hurley/" genre: - name: "Collection" slug: "collection" taxonomy: "genre" url: "http://localhost/type/collection/" media_type: "Cassette" programmers: - name: "Randle Hurley" slug: "randle-hurley" taxonomy: "indiv" url: "http://localhost/indiv/randle-hurley/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Programs%20for%20Real%20Applications%20%28198x%29%28Hurley%2C%20Randle%29%28TS1000%29%28US%29%28Cassette%29.zip" mediadate: "198x" related_products: - id: 20974 title: "The Sinclair ZX81 Programming For Real Applications" type: "book" url: "http://localhost/book/the-sinclair-zx81-programming-for-real-applications/" media_type_tags: "Collection" --- # Programs for Real Applications This collection comprises several interconnected BASIC programs from [The Sinclair ZX81: Programming for Real Applications](http://localhost/book/the-sinclair-zx81-programming-for-real-applications/) by [Randle Hurley](http://localhost/indiv/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). | 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 `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. ## 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 J0 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 PM 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 ```