This program implements a reject transaction tracking and analysis system for up to 19 input devices and 15 reject types, storing up to 200 outstanding reject records in a large string array. Each reject record occupies a fixed 93-character field in the array R$, enabling field-offset parsing to extract reject numbers, dates, device codes, and transaction details. The program accumulates monthly statistics in a 19×57 numeric array T, tracking counts by reject type, device, clearance status, and aging buckets (7–14 days, 15–29 days, 30+ days). Output is produced via LPRINT across multiple paginated passes, reconstructing a wide columnar report in sections across a 32-character-wide printer. The FAST/SLOW switching around data-entry and processing loops is used to maximize throughput during compute-intensive operations.
Program Analysis
Program Structure
The program is organized into a main menu at line 500 dispatching to five functional subroutines/sections, preceded by initialization code at lines 100–155 and followed by a diagnostic routine at lines 9000–9070 that is not reachable from normal program flow.
| Line Range | Function |
|---|---|
| 100–155 | Cold start: dimension and populate V$ (device names), S() (reject numbers), R$ (reject records), T() (totals) |
| 500–700 | Main menu loop |
| 3000–3280 | Enter current rejects (GOSUB) |
| 4000–4293 | Enter reject clear cards (GOSUB) |
| 5000–5450 | Print current rejects via LPRINT (GOSUB) |
| 6000–6520 | Print monthly totals via LPRINT (GOSUB) |
| 7000–7110 | Save program to tape, prompt for current date |
| 9000–9070 | Diagnostic/debug loop (unreachable) |
Data Structures
Three major data structures carry the program’s state:
V$(19,3)— up to 19 three-character input device identifiers.R$(200,93)— a 200-record flat-file store, each record a fixed 93-character string. Fields are accessed by numeric offsets (e.g., columns 1–3 = reject number, 4–6 = device code, 7–10 = date, 11–12 = times-rejected count, 13–92 = transaction detail fields).T(19,57)— a 19×57 numeric accumulator. Rows 1–18 correspond to input devices; row 19 is a totals row computed in subroutine 6000. Columns encode different statistics: columns 1–48 are device/reject-type counts (in groups of 3: new, cleared, reprocessed), columns 49–57 are summary and aging bucket totals.S(15)— the 15 recognized reject type numbers; used to map incoming reject codes to T() column offsets via the formulaG=(G*3)-2(new),G=(G*3)-1(cleared),G=(G*3)(reprocessed).
Record Matching and Deduplication (Lines 3070–3091)
When entering a new reject at line 3000, the program scans the entire active reject store for a matching record. It uses a two-stage comparison exploiting the ZX81’s ability to compare substrings of dimensioned string arrays directly:
- Compare columns 1–10 (reject number + device + date) against the incoming record.
- If that matches, compare columns 13–92 (the detail field) against the stored record.
The loop uses NEXT X inside the IF condition at lines 3080 and 3090 as an in-loop branch, and then a post-loop guard check at lines 3081 and 3091 to decide whether the loop exhausted all records without a match or found one. This is a common ZX81 idiom for conditional loop exit since there is no EXIT FOR construct.
Aging Bucket Accounting
The variable CD (current date, stored as a numeric day-of-year or similar ordinal) is used throughout to compute how long a reject has been outstanding. RD is the reject’s original date read from the record. The aging thresholds and their corresponding T() column assignments are:
| Condition | T() Column(s) affected |
|---|---|
| CD−RD > 6 (any delinquent) | T(F,52) |
| CD−RD 7–14 days | T(F,53) |
| CD−RD 15–29 days | T(F,54) |
| CD−RD ≥ 30 days | T(F,55) |
When an existing reject record is updated (re-submitted), lines 3110–3160 adjust the aging buckets by decrementing the old bucket and incrementing the new one as the reject ages across thresholds.
LPRINT Pagination
Because the 32-column printer is narrower than the logical report width, subroutines 5000 and 6000 each make multiple passes over the record or totals array, printing different column ranges in each pass. The paginator uses variables A and B as a sliding window (typically 47 records per page) and loops back to a re-entry point after advancing the window. This reconstructs a wide columnar format across several printer pages meant to be read side by side.
Notable Techniques
- Fixed-length string array as flat file:
R$(200,93)acts as an in-memory database table; all record access is by numeric column offset rather than parsed delimiters. - Blank record sentinel: The variable
F$(line 120) is initialized to 93 inverse-Z characters and used at lines 4110 and 4190 to “delete” a record by overwriting it with blanks. TheR$(X,93)="*"flag (line 3022) marks a record as newly entered in the current session. - FAST/SLOW toggling:
FASTis switched on before compute-intensive loops andSLOWbefore any screen output to the user, a standard technique to balance display quality with processing speed. - Bubble sort on R$ (lines 4200–4270): After processing clear cards, the reject store is sorted by reject number (columns 1–3) using a straightforward nested-loop bubble sort, with
Y$as the swap variable. Note the outer loop uses variableXbut the inner loop’s upper bound isNEXTREJ-1while the outer bound isNEXTREJ-2, which is correct for an in-place sort. - Column offset formula for T(): The reject-type index
Gmaps to three consecutive T() columns (new, cleared, reprocessed) viaG=(G*3)-2,G=(G*3)-1, andG=(G*3)respectively, allowing a 15-type × 3-state layout to be addressed with a single computed index.
Bugs and Anomalies
- Uninitialized
CD: The current date variableCDis first assigned at line 7100 (after a SAVE). All aging calculations in subroutines 3000, 5000, and 6000 referenceCDbefore it is ever set if the user has not yet executed option 7. This will causeCDto default to 0, producing incorrect aging results on first use. - Line 5020 missing: The pagination loop at line 5130 jumps to
5020, which does not exist. The program would fall through to line 5030 (the next existing line), which appears to be the intended target — the missing line number is a minor authoring oversight with no practical effect. - Line 5350 missing: Similarly, line 5450 jumps to
5350, which does not exist; execution continues at line 5360, again the apparent intent. - Bubble sort outer variable collision: The outer sort loop at line 4200 uses loop variable
X, but theFOR Xloop was previously in use at lines 4030–4060. After the sort,NEXTREJis reset at line 4280 and the record-end markers are cleared at lines 4290–4292, so the reuse ofXhere is intentional but could be confusing. - Line 6212 syntax: The backslash in
TAB 8;T(X,54)\,,appears to be a stray character that would likely cause a syntax error on a real machine; it may be a listing transcription artifact.
Content
Source Code
10 REM REJECT ANALYSIS PGM
20 REM WRITTEN BY TIM L. WARD
30 REM DATE 11/23-28/85
100 DIM V$(19,3)
101 FOR X=1 TO 19
102 PRINT AT 21,0;" "
103 PRINT AT 21,0;"ENTER INPUT DEVICE NBR. ";X
104 INPUT V$(X)
105 NEXT X
110 DIM S(15)
111 FOR X=1 TO 15
112 PRINT AT 21,0;" "
113 PRINT AT 21,0;"ENTER REJECT NBR. ";X
114 INPUT S(X)
115 NEXT X
116 FAST
120 LET F$="%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z%Z"
130 DIM R$(200,93)
131 FOR X=1 TO 200
132 LET R$(X)=F$
133 NEXT X
140 LET NBRREJ=0
141 LET NEXTREJ=1
150 DIM T(19,57)
151 FOR X=1 TO 19
152 FOR Y=1 TO 57
153 LET T(X,Y)=0
154 NEXT Y
155 NEXT X
500 REM %M%E%N%U% % % % % % % % % % % % % % % % % % %
510 CLS
511 SLOW
512 PRINT AT 0,2;"REJECT ANALYSIS PROGRAM MENU",,,
520 PRINT "1...INIT PGM (COLD START)?",,,
530 PRINT "2...BLANK MONTHLY TOTALS ONLY?",,,
540 PRINT "3...ENTER CURRENT REJECTS?",,,
550 PRINT "4...ENTER REJECT CLEAR CARDS?",,,
560 PRINT "5...PRINT CURRENT REJECTS?",,,
570 PRINT "6...PRINT MONTHLY REJECT TOTALS?",,
580 PRINT "7...SAVE ""REJECT"" ANALYSIS?",,,
590 PRINT "8...RESERVED FOR FUTURE USE",,,
600 PRINT "9...RESERVED FOR FUTURE USE"
610 PRINT AT 21,0;"ENTER NBR OF YOUR CHOICE 1-9"
611 INPUT I$
620 IF VAL I$<1 OR VAL I$>9 THEN GOTO 0610
621 FAST
630 IF I$="1" THEN GOTO 0100
640 IF I$="2" THEN GOTO 0150
650 IF I$="3" THEN GOSUB 3000
660 IF I$="4" THEN GOSUB 4000
670 IF I$="5" THEN GOSUB 5000
680 IF I$="6" THEN GOSUB 6000
690 IF I$="7" THEN GOTO 7000
700 GOTO 0500
3000 REM %E%N%T%E%R% %C%U%R%R%E%N%T% %R%E%J%E%C%T%S% %
3001 CLS
3005 SLOW
3006 IF NEXTREJ>200 THEN PRINT "REJECT AREA IS FULL PLEASE PROCESS REJECT CLEAR CARDS NOW."
3011 PRINT AT 12,0;"PLEASE ENTER REJECT TRANSACTIONS"
3020 DIM A$(1,93)
3021 INPUT A$(1)
3022 LET A$(1,93)="*"
3023 IF A$(1,1 TO 3)="END" THEN RETURN
3025 FAST
3030 FOR A=1 TO 18
3031 IF V$(A)=A$(1,4 TO 6) THEN LET F=A
3032 NEXT A
3040 LET G=16
3041 FOR A=1 TO 15
3042 IF S(A)=VAL A$(1,1 TO 3) THEN LET G=A
3050 NEXT A
3051 LET G=(G*3)-2
3060 LET RD=VAL A$(1,7 TO 10)
3070 FOR X=1 TO NEXTREJ
3080 IF A$(1,1 TO 10)<>R$(X,1 TO 10) THEN NEXT X
3081 IF A$(1,1 TO 10)<>R$(X,1 TO 10) THEN GOTO 3200
3090 IF A$(1,13 TO 92)<>R$(X,13 TO 92) THEN NEXT X
3091 IF A$(1,13 TO 92)<>R$(X,13 TO 92) THEN GOTO 3200
3100 IF CD-RD<7 THEN GOTO 3170
3110 IF CD-RD=7 THEN LET T(F,52)=T(F,52)+1
3120 IF CD-RD=7 THEN LET T(F,53)=T(F,53)+1
3130 IF CD-RD=15 THEN LET T(F,53)=T(F,53)-1
3140 IF CD-RD=15 THEN LET T(F,54)=T(F,54)+1
3150 IF CD-RD=30 THEN LET T(F,54)=T(F,54)-1
3160 IF CD-RD=30 THEN LET T(F,55)=T(F,55)+1
3170 IF A$(1,11 TO 12)="01" AND A$(1,11 TO 12)>R$(X,11 TO 12) THEN LET T(F,56)=T(F,56)+1
3180 LET T(F,57)=T(F,57)+(VAL A$(1,11 TO 12)-VAL R$(X,11 TO 12))
3190 LET R$(X)=A$(1)
3191 GOTO 3000
3200 LET T(F,G)=T(F,G)+1
3201 LET T(F,49)=T(F,49)+1
3210 IF A$(1,11 TO 12)>"00" THEN LET T(F,56)=T(F,56)+1
3220 LET T(F,57)=T(F,57)+VAL A$(1,11 TO 12)
3230 IF CD-RD>6 THEN LET T(F,52)=T(F,52)+1
3240 IF CD-RD>6 AND CD-RD<15 THEN LET T(F,53)=T(F,53)+1
3250 IF CD-RD>14 AND CD-RD<30 THEN LET T(F,54)=T(F,54)+1
3260 IF CD-RD>29 THEN LET T(F,55)=T(F,55)+1
3270 LET R$(NEXTREJ)=A$(1)
3271 LET NEXTREJ=NEXTREJ+1
3272 LET NBRREJ=NBRREJ+1
3280 GOTO 3000
4000 REM %E%N%T%E%R% %R%E%J%E%C%T% %C%L%E%A%R% %C%A%R%D
4005 CLS
4010 SLOW
4011 PRINT AT 12,0;"PLEASE ENTER REJ CLEAR TRANS"
4020 DIM A$(1,20)
4021 INPUT A$(1)
4022 IF A$(1,1 TO 3)="END" THEN GOTO 4120
4025 FAST
4030 FOR X=1 TO NEXTREJ
4040 IF A$(1,1 TO 3)=R$(X,13 TO 15) AND A$(1,4 TO 17)=R$(X,42 TO 55) AND A$(1,18 TO 20)=R$(X,4 TO 6) THEN GOTO 4070
4050 IF A$(1,1 TO 3)=R$(X,13 TO 15) AND A$(1,4 TO 17)=R$(X,16 TO 29) AND A$(1,18 TO 20)=R$(X,4 TO 6) THEN GOTO 4070
4060 NEXT X
4061 RETURN
4070 FOR A=1 TO 18
4071 IF V$(A)=R$(X,4 TO 6) THEN LET F=A
4072 NEXT A
4080 LET G=16
4081 FOR A=1 TO 15
4082 IF S(A)=VAL R$(X,1 TO 3) THEN LET G=A
4090 NEXT A
4091 LET G=(G*3)-1
4100 LET T(F,G)=T(F,G)+1
4101 LET T(F,50)=T(F,50)+1
4102 LET NBRREJ=NBRREJ-1
4110 LET R$(X)=F$
4111 GOTO 4000
4120 FOR X=1 TO NEXTREJ
4121 IF R$(X,93)="%Z" THEN GOTO 4140
4130 IF R$(X,93)="*" THEN GOTO 4150
4140 NEXT X
4141 GOTO 4200
4150 FOR A=1 TO 18
4151 IF V$(A)=R$(X,4 TO 6) THEN LET F=A
4152 NEXT A
4160 LET G=16
4161 FOR A=1 TO 15
4162 IF S(A)=VAL R$(X,1 TO 3) THEN LET G=A
4170 NEXT A
4171 LET G=(G*3)
4180 LET T(F,G)=T(F,G)+1
4181 LET T(F,51)=T(F,51)+1
4182 LET NBRREJ=NBRREJ-1
4190 LET R$(X)=F$
4191 GOTO 4140
4200 FOR A=1 TO NEXTREJ-2
4210 FOR Y=X+1 TO NEXTREJ-1
4220 IF R$(X,1 TO 3)<R$(Y,1 TO 3) THEN GOTO 4260
4230 LET Y$=R$(X)
4240 LET R$(X)=R$(Y)
4250 LET R$(Y)=Y$
4260 NEXT Y
4270 NEXT X
4280 LET NEXTREJ=NBRREJ+1
4290 FOR X=1 TO NBRREJ
4291 LET R$(X,93)=" "
4292 NEXT X
4293 RETURN
5000 REM %P%R%I%N%T% %C%U%R%R%E%N%T% %R%E%J%E%C%T%S% %
5010 LET A=1
5011 LET B=47
5012 IF B>NBRREJ THEN LET B=NBRREJ
5030 LPRINT ,,,,,,,,,,,TAB 27;"TRIC."
5040 LPRINT "REJ NR TIMES ORIGINAL"
5050 LPRINT "NBR REJECTED REJ DATE 1234"
5060 LPRINT
5070 FOR X=A TO B
5080 LPRINT R$(X,1 TO 3);TAB 8;R$(X,11 TO 12);TAB 20;R$(X,7 TO 10);TAB 28;R$(X,13 TO 16)
5090 NEXT X
5091 LPRINT ,,"--------------------------------"
5100 IF B=NBRREJ THEN GOTO 5140
5110 LET A=A+47
5111 LET B=B+47
5120 IF B>NBRREJ THEN LET B=NBRREJ
5130 GOTO 5020
5140 LET A=1
5141 LET B=47
5142 IF B>NBRREJ THEN LET B=NBRREJ
5150 LPRINT
5151 LPRINT TAB 22;"REJECT ANA"
5152 LPRINT
5153 LPRINT TAB 19;"CURRENT REJEC"
5154 LPRINT
5160 LPRINT ".........................INPUT I"
5161 LPRINT TAB 5;"1";TAB 15;"2";TAB 25;"3"
5162 LPRINT "56789012345678901234567890123456",,
5170 FOR X=A TO B
5180 LPRINT R$(X,17 TO 48)
5190 NEXT X
5191 LPRINT ,,"--------------------------------"
5200 IF B=NBRREJ THEN GOTO 5240
5210 LET A=A+47
5211 LET B=B+47
5220 IF B>NBRREJ THEN LET B=NBRREJ
5230 GOTO 5150
5240 LET A=1
5241 LET B=47
5242 IF B>NBRREJ THEN LET B=NBRREJ
5250 LPRINT ,,"LYSIS PGM",,,,"TS FOR ";CD,,,,
5260 LPRINT "MAGE............................"
5261 LPRINT TAB 3;"4";TAB 13;"5";TAB 23;"6"
5262 LPRINT "78901234567890123456789012345678"
5263 LPRINT
5270 FOR X=A TO B
5280 LPRINT R$(X,49 TO 80)
5290 NEXT X
5291 LPRINT
5292 LPRINT "--------------------------------"
5300 IF B=NBRREJ THEN GOTO 5340
5310 LET A=A+47
5311 LET B=B+47
5320 IF B>NBRREJ THEN LET B=NBRREJ
5330 GOTO 5250
5340 LET A=1
5341 LET B=47
5342 IF B>NBRREJ THEN LET B=NBRREJ
5360 LPRINT ,,,,,,,,,,"............ REJ OVER INPUT"
5361 LPRINT " 7";TAB 11;"8";TAB 15;"6 DAYS";TAB 24;"DEVICE"
5362 LPRINT "901234567890 OLD NUMBER"
5363 LPRINT
5370 FOR X=A TO B
5380 LPRINT R$(X,81 TO 92);
5390 IF CD-VAL R$(X,7 TO 10)>6 THEN LPRINT TAB 16;"YES";
5400 IF CD-VAL R$(X,7 TO 10)<7 THEN LPRINT TAB 16;"NO";
5401 LPRINT TAB 25;R$(X,4 TO 6)
5410 NEXT X
5411 LPRINT
5412 LPRINT "--------------------------------"
5420 IF B=NBRREJ THEN RETURN
5430 LET A=A+47
5431 LET B=B+47
5440 IF B>NBRREJ THEN LET B=NBRREJ
5450 GOTO 5350
6000 REM %P%R%I%N%T% %M%O%N%T%H%L%Y% %T%O%T%A%L%S% % %
6010 FOR X=1 TO 57
6011 LET T(19,X)=0
6012 NEXT X
6020 FOR X=1 TO 57
6021 FOR Y=1 TO 18
6022 LET T(19,X)=T(19,X)+T(Y,X)
6023 NEXT Y
6024 NEXT X
6030 LET A=1
6031 LET B=4
6040 FOR X=A TO B
6060 LPRINT ,,,,,,,,,," REJECT NBR' S 250 257"
6061 LPRINT
6070 LPRINT " NBR. REJECTS";TAB 21;T(X,1);TAB 27;T(X,4)
6071 LPRINT
6072 LPRINT " NBR. CLR CARDED";
6080 LPRINT TAB 21;T(X,2);TAB 27;T(X,5)
6081 LPRINT
6082 LPRINT " NBR. REPROCESSED";
6090 LPRINT TAB 21;T(X,3);TAB 27;T(X,6)
6091 LPRINT ,,,,,,
6100 LPRINT TAB 13;"DELINQUENT REJECTS"
6101 NEXT X
6102 LPRINT
6103 LPRINT "--------------------------------"
6120 IF B=19 THEN GOTO 6150
6121 LET A=A+4
6122 LET B=B+4
6130 IF B>19 THEN LET B=19
6140 GOTO 6040
6150 LET A=1
6151 LET B=4
6160 FOR X=A TO B
6170 LPRINT
6171 LPRINT TAB 22;"REJECT ANA"
6172 LPRINT
6173 LPRINT TAB 14;"MONTHLY TOTALS FOR"
6174 LPRINT
6175 LPRINT "260 263 289 290 295 31"
6176 LPRINT
6180 LPRINT T(X,7);TAB 6;T(X,10);TAB 12;T(X,13);TAB 18;T(X,16);TAB 24;T(X,19);TAB 30;T(X,22)
6181 LPRINT
6190 LPRINT T(X,8);TAB 6;T(X,11);TAB 12;T(X,14);TAB 18;T(X,17);TAB 24;T(X,20);TAB 30;T(X,23)
6191 LPRINT
6200 LPRINT T(X,9);TAB 6;T(X,12);TAB 12;T(X,15);TAB 18;T(X,18);TAB 24;T(X,21);TAB 30;T(X,24)
6201 LPRINT
6210 LPRINT "7-14 15-29 30+ TOTAL"
6211 LPRINT "DAYS DAYS DAYS DEL REJ"
6212 LPRINT TAB 1;T(X,53);TAB 8;T(X,54),,TAB 16;T(X,55);TAB 24;T(X,52)
6220 NEXT X
6221 LPRINT
6222 LPRINT "--------------------------------"
6230 IF B=19 THEN GOTO 6270
6240 LET A=A+4
6241 LET B=B+4
6250 IF B>19 THEN LET B=19
6260 GOTO 6160
6270 LET A=1
6271 LET B=4
6280 FOR X=A TO B
6290 LPRINT
6291 LPRINT "LYSIS PGM"
6292 LPRINT
6293 LPRINT "INPUT DEVICE ";V$(X)
6294 LPRINT
6295 LPRINT "6 329 356 429 469 492"
6296 LPRINT
6300 LPRINT TAB 4;T(X,25);TAB 10;T(X,28);TAB 16;T(X,31);TAB 22;T(X,34);TAB 28;T(X,37)
6301 LPRINT
6310 LPRINT TAB 4;T(X,26);TAB 10;T(X,29);TAB 16;T(X,32);TAB 22;T(X,35);TAB 28;T(X,38)
6311 LPRINT
6320 LPRINT TAB 4;T(X,27);TAB 10;T(X,30);TAB 16;T(X,33);TAB 22;T(X,36);TAB 28;T(X,39)
6321 LPRINT
6330 LPRINT TAB 29;"NBR"
6331 LPRINT TAB 29;"REP"
6332 LPRINT TAB 9;"REPROCESSED REJECTS"
6340 NEXT X
6341 LPRINT
6342 LPRINT "--------------------------------"
6350 IF B=19 THEN GOTO 6390
6360 LET A=A+4
6361 LET B=B+4
6370 IF B>19 THEN LET B=19
6380 GOTO 6280
6390 LET A=1
6391 LET B=4
6400 FOR X=A TO B
6420 LPRINT ,,,,,,,,,," 528 914 OTHER TOTAL"
6421 LPRINT
6430 LPRINT TAB 2;T(X,40);TAB 8;T(X,43);TAB 14;T(X,46);TAB 22;T(X,49)
6431 LPRINT
6440 LPRINT TAB 2;T(X,41);TAB 8;T(X,44);TAB 14;T(X,47);TAB 22;T(X,50)
6441 LPRINT
6450 LPRINT TAB 2;T(X,42);TAB 8;T(X,45);TAB 14;T(X,48);TAB 22;T(X,51)
6451 LPRINT
6460 LPRINT " REJECTS NBR TIMES"
6461 LPRINT "ROCESSED REJECTED"
6470 LPRINT TAB 1;T(X,56);TAB 13;T(X,57)
6480 NEXT X
6481 LPRINT
6482 LPRINT "--------------------------------"
6490 IF B=19 THEN RETURN
6500 LET A=A+4
6501 LET B=B+4
6510 IF B>19 THEN LET B=19
6520 GOTO 6400
7000 REM %S%A%V%E% %"%R%E%J%E%C%T%-%6%4%K%"% % % % % %
7010 CLS
7015 SLOW
7020 PRINT AT 12,0;"SAVE ""REJECT"" ANALYSIS PGM "
7030 PRINT AT 21,0;"START RECORDER PRESS ENTER"
7040 INPUT Z$
7050 CLS
7060 SAVE "REJECT-64%K"
7070 PRINT AT 12,0;"REJECT ANALYSIS PROGRAM"
7080 PRINT AT 14,0;"LAST UPDATED ON ";CD;" DATE."
7090 PRINT AT 21,0;"PLEASE ENTER CURRENT DATE"
7100 INPUT CD
7110 GOTO 0500
9000 FOR X=1 TO 57
9010 PRINT AT 12,0;T(4,X);" ";X
9020 INPUT W$
9030 NEXT X
9040 STOP
9050 CLEAR
9060 SAVE "1018%8"
9070 GOTO 500
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
