210 CLOSE FILNUM: OPEN "R", FILNUM, V1$, RL%' Open and Field Master File
211 FOR X = 1 TO 8: BT(X) = 0: NEXT X: BUF = 0
212 BBT = 1: FOR X = 1 TO T: IF TY$(X) = "Z" THEN 216 ELSE BUF = BUF + 1
213 IF FL(X) + BT(BBT) > 255 THEN BBT = BBT + 1
214 FIELD #FILNUM, BT(1) AS D$(1), BT(2) AS D$(2), BT(3) AS D$(3), BT(4) AS D$(4), BT(5) AS D$(5), BT(6) AS D$(6), BT(7) AS D$(7), FL(X) AS F$(X)
215 BT(BBT) = BT(BBT) + FL(X)
216 NEXT X
217 FIELD #FILNUM, BT(1) AS D$(1), BT(2) AS D$(2), BT(3) AS D$(3), BT(4) AS D$(4), BT(5) AS D$(5), BT(6) AS D$(6), BT(7) AS D$(7), BT(8) AS D$(8)
218 '...................................
219 RETURN
298 GOSUB 61000: 'Init BTREE
299 GOSUB 61500: 'Open MAP & ISI
699 '
700 ' Screen Print
4000 ' Begin Main Line
4001 IF STARTUP THEN HELP = 1: GOSUB 41000: STARTUP = 0
4003 UPDTE$ = ""
4004 FOR X = 1 TO T: T#(X) = 0: NEXT X: ' Clear Field
4005 COLOR 15, 4: LOCATE 25, 1: PRINT "* indicates a field overflow. Press F1 for help. "; : LOCATE 25, 65: PRINT USING "##,###"; NKA; : PRINT " Records";
14040 FOR X = 1 TO INT(LOF(1) / RL%): IF INKEY$ <> "" THEN 700 ELSE GET 1, X: FO = 0
14042 IF CP > 0 AND CP < 6 THEN GOSUB 48150: GOTO 14065
14044 FOR ZT = 1 TO T: IF INSTR(F$(ZT), Q$) <> 0 AND FO = 0 THEN 14100
14045 IF INKEY$ <> "" THEN 700
14060 NEXT ZT
14065 NEXT X: GOSUB 28000: GOTO 700
14099 '
14100 GOSUB 15390: ' Print Record and RETURN
14101 FO = 1
14200 PRINT BOTT$; BLANK$; BOTT$; " <S>top - ";
14250 GOTO 14060
14300 ' ..... remember that you have a line at 18200 ...
14999 '
15000 '
15002 ' Get Record
15003 PG = 0: LC = 0: NUMFND = 0
15004 IF INKEY$ <> "" THEN 700
15395 IF LC <= 0 THEN GOSUB 25000
15400 '
18200 IF UPDTE$ = "S" THEN RETURN
18560 IF FOUND = 0 AND NUMFND = 0 THEN GOTO 700 ELSE IF FOUND <> 0 THEN NUMFND = NUMFND + 1: I = LR: GOSUB 62030: GOTO 15230 ELSE GOSUB 28000: GOTO 700
22999 '
23000 ' Number Check Routine
23001 '
23005 F1 = 0: F2 = 0: N = 0
23010 FOR X = 1 TO LEN(T$)
23020 A = ASC(MID$(T$, X, 1))
23030 IF A < 45 OR A > 57 THEN PRINT CHR$(7); : GOTO 23100
23050 IF A = 46 THEN F1 = F1 + 1: IF F1 > 1 THEN PRINT CHR$(7); : GOTO 23100
23060 IF A = 45 THEN F2 = F2 + 1: IF F2 > 1 THEN PRINT CHR$(7); : GOTO 23100
23070 NEXT X
23080 IF INSTR(T$, "-") > 1 THEN PRINT CHR$(7); : GOTO 23100
23090 N = 1
23100 RETURN
24999 '
25000 ' Print Header
25001 '
25005 PG = PG + 1
25006 LPRINT FF$
25007 LPRINT " "
25009 LPRINT " ": LPRINT " "
25200 '
25300 LC = PL: RETURN
40000 PRINT BOTT$; BLANK$; BOTT$; "Do you really want to end? "; : Z2 = 1: HELP = 999: GOSUB 21000: IF T$ = "N" OR T$ = "n" THEN GOTO 4001 ELSE IF T$ <> "Y" AND T$ <> "y" THEN GOTO 40000
40010 COLOR 7, 0, 0: CLS : PRINT "You have exited your report program"
40020 PRINT "and are now in MS-DOS at the system"
40030 PRINT "prompt."
40040 SYSTEM ' You may branch to another program from here
53000 ' Error Traps
53001 FOR ZX = 1 TO 3: SOUND 1000, 1: SOUND 25000, 1: NEXT ZX
53002 COLOR 14, 4: PRINT BOTT$; BLANK$; BOTT$;
53003 IF ERR = 7 OR ERR = 14 THEN LOCATE 25, 1: PRINT " OUT OF MEMORY (BASIC may not have been started with /S:2048)": END
53004 IF ERR <> 27 AND ERR <> 24 AND ERR <> 25 AND ERR <> 57 AND ERR <> 68 THEN 53009
45020 PRINT BOTT$; BLANK$; BOTT$; "Press RETURN to get to the Field you want to Search on ...";
45025 FL = 1: HELP = 7: GOSUB 21000
45030 PRINT BOTT$; BLANK$; BOTT$; "When you are at the Field you want, TYPE in what you want to Search for. ";
45035 FC = FC + 1: IF FC > T THEN 4000 ELSE IF TY$(FC) = "Z" THEN 45035
45040 FL = FL(FC): LOCATE CY(FC) + 1, CX(FC) + 1
45045 HELP = 8: GOSUB 21000: IF TY$(FC) = "N" THEN GOSUB 23000: IF N = 0 THEN PRINT FNCRT$(CX(FC), CY(FC)); STRING$(FL(FC), "."); : GOTO 45040
45050 IF T$ <> "" THEN 45070 ELSE 45035
45055 '
45060 '
45065 '
45070 SS$ = T$: Q$ = T$
45075 '
45080 IF TY$(FC) <> "N" THEN CP = 4: GOTO 45205'sort ?
45083 '
45084 ' Get Relation on Numeric field
45085 PRINT BOTT$; BLANK$; BOTT$; "The Field you are Searching is a Number Field..."; : GOSUB 60000
45090 PRINT BOTT$; BLANK$; BOTT$; "You may Select Records in your Report that are ... "; : GOSUB 60000
45095 PRINT BOTT$; BLANK$; BOTT$; "<E>qual, <L>ess or <G>reater than the number you entered (Pick E,L or G) - "; : FL = 1: HELP = 9: GOSUB 21000
45100 IF T$ = "" THEN 45095
45105 IF ASC(T$) > 90 THEN T$ = CHR$(ASC(T$) - 32)
45110 CP = INSTR(" ELGelg", T$) - 1: IF CP > 3 THEN CP = CP - 3
45115 IF CP < 1 OR CP > 3 THEN PRINT CHR$(7); : GOTO 45095
45199 '
45200 ' Look for Sort (QP3SORT.EXE)
45205 IF NKA = 0 THEN T$ = "N": GOTO 45235 ELSE ON ERROR GOTO 45215'look for Sort
45210 OPEN "I", 3, "QP3SORT.EXE": CLOSE 3: GOTO 45230'if found proceed
45215 CLOSE 3: IF ERR = 53 THEN T$ = "N": RESUME 45235'if not found return
45220 IF ERR = 54 THEN RESUME 45230'if BM error proceed
45225 GOTO 53000'error traps
45228 '
45229 ' Sort prompting if Sort is found
45230 ON ERROR GOTO 53000: SS = 0: PRINT BOTT$; BLANK$; BOTT$; "Do you want your Report in sorted order ? (Y/N)-"; : FL = 1: HELP = 10: GOSUB 21000: IF T$ = "" THEN 45230
45235 IF INSTR("Nn", T$) THEN GOTO 14038
45245 FOR X = 1 TO T: IF TY$(X) = "Z" THEN 45255 ELSE N$ = MID$(STR$(X), 2)
45250 PRINT FNCRT$(CX(X), CY(X)); N$; : IF FL(X) <> 1 THEN PRINT STRING$(FL(X) - LEN(N$), ".");
45260 '
45265 CLOSE : PRINT BOTT$; BLANK$; BOTT$; "What Field do you want to Sort on ? - ";
45270 FL = 2: HELP = 11: GOSUB 21000: IF T$ = "" OR VAL(T$) < 1 OR VAL(T$) > T THEN 45265
45275 IF TY$(VAL(T$)) = "Z" THEN PRINT BOTT$; BLANK$; BOTT$; "> Cannot Sort on Display Only Fields <"; : GOSUB 60000: GOTO 45230
45280 SO = VAL(T$): KYD = 0
45285 FOR X = 1 TO SO - 1: IF TY$(X) <> "Z" THEN KYD = KYD + FL(X)
45290 NEXT X
45295 KYL = FL(SO)
45300 IF CP THEN PRINT FNCRT$(CX(FC), CY(FC)); SS$
45304 '
45310 OPEN "O", #3, "QUIKSORT.CMD"
45314 '
45320 PRINT #3, V1$: 'Send master file's filename to the sort