370 PRINT : VTAB 7: PRINT SPC( 4)"DO YOU WANT A CATALOG? Y/N ";: HTAB 32: GET ZA$: IF ZA$ < >"N" AND ZA$ < > CHR$(110) AND ZA$ < >"Y" AND ZA$ < > CHR$(121) AND ZA$ < > CHR$(27) THEN 370
380 IF ZA$ = CHR$(27) THEN 200
390 PRINT ZA$: IF ZA$ = "Y" OR ZA$ = CHR$(121) THEN GOSUB 5400: GOTO 340
400 Z$ = A$:H = 0:V = 10:M = 64: POKE 255,0: GOSUB 1630: IF A GOTO 370
410 HTAB 1: VTAB 19: PRINT "PLEASE WAIT";
420 GOSUB 5610:A$ = Z$: IF E < >0 THEN 400
430 HTAB 1: VTAB 19: PRINT SPC( 13);:Z$ = B$
440 Z$ = B$:H = 0:V = 15:M = 61: GOSUB 1630: IF A GOTO 400
450 HTAB 1: VTAB 19: PRINT "PLEASE WAIT";: GOSUB 5610:B$ = Z$: IF E < >0 THEN 440
460 IF B$ = A$ THEN E = 1: GOSUB 5700: GOTO 440
470 REM - GET # OF FIELDS
480 HOME : GOSUB 2500: VTAB 10: HTAB 5: PRINT "HOW MANY FIELDS? (MAX 12) "F:H = 30:V = 9:M = 2:Z$ = STR$(F): GOSUB 1630: IF A GOTO 340
490 F = VAL(Z$): IF F <1 OR F >12 THEN 480
500 REM - GET FIELD 'NAMES'
510 PRINT J$: HOME :M = 30 +(S = 8) *4: GOSUB 2500: PRINT : VTAB 2: HTAB 5: PRINT "FIELD NAMES ("M" CHARACTERS MAX)": PRINT : FOR X = 1 TO F: HTAB 2: VTAB 4 +X *(1 +(F <8)): PRINT SPC( (X <10))X") "E$(X): NEXT
520 FOR X = 1 TO F: IF S = 4 AND LEN(A$(X)) >30 THEN A$(X) = LEFT$(A$(X),30)
1000 Q = VAL(Z$): IF (Q <2 *F) OR Q >Z +F THEN Q = Q1: GOTO 980
1010 REM - GET SCREEN TITLE
1020 PRINT J$: HOME : GOSUB 2500: PRINT : VTAB 2: HTAB 3: PRINT "SCREEN TITLE (25 CHARACTERS MAX)":Z$ = C$:H = 2: POKE 255,1:V = 7:M = 25: GOSUB 1630:C$ = Z$: IF A GOTO 950
1030 REM - GET FINAL INSTRUCTIONS
1040 HOME :Z$(1) = "CREATE THE SCREEN & DATA FILES":Z$(2) = "CREATE THE SCREEN FILE ONLY":Z$(3) = "REVIEW ENTRIES":Z$(4) = "PRINT DATA FIELD NUMBERS":Z$(5) = "QUIT"
1050 PRINT : HTAB 10: PRINT "*** CREATE SCREEN ***":M2 = 5:ZZ = 123: GOSUB 5290: HOME : IF Z = 27 THEN 1020
1060 ON M1 GOTO 1100,1200,200,6000,1070
1070 PRINT : HTAB 7: VTAB 10: PRINT CHR$(7)"QUIT. ARE YOU SURE? Y/N ";: GET Z$: IF Z$ < >"Y" AND Z$ < > CHR$(121) THEN 1040
1080 HOME : END
1090 REM - ESTABLISH DATA FILE
1100 VTAB 10: HTAB 8: PRINT CHR$(7)"PLACE DATA DISK IN DRIVE": PRINT : HTAB 13: PRINT "AND PRESS RETURN";: GOSUB 5790: IF Z < >13 AND Z < >27 THEN 1100
1110 IF Z = 27 THEN 1040
1120 HOME :W = 2: ONERR GOTO 1140
1130 PRINT D$"DELETE"B$: ONERR GOTO 1700
1140 HOME : VTAB 10: PRINT SPC( 11)"PREPARING DATA FILE": PRINT : IF LEN(B$) <38 THEN PRINT SPC( INT((37 - LEN(B$))/2));
1220 VTAB 10: HTAB 8: PRINT CHR$(7)"PLACE MAIN DISK IN DRIVE": PRINT : HTAB 13: PRINT "AND PRESS RETURN";: GOSUB 5790: IF Z < >13 AND Z < >27 THEN 1220
1230 IF Z = 27 THEN 1040
1240 HOME :W = 3: ONERR GOTO 1700
1250 REM
1260 REM
1270 REM
1280 REM
1290 REM
1300 HOME : VTAB 10: PRINT SPC( 10)"CREATING EXEC FILE": PRINT : IF LEN(X$) <38 THEN PRINT SPC( INT((37 - LEN(X$))/2));
2120 A$ = "":H = 3:V = 18:M = 2: GOSUB 5530:Z$ = A$: IF ((Z$ = "S" OR Z$ = CHR$(115)) AND S$ = "") OR A$ = "" THEN 2120
2130 IF (Z$ = "S" OR Z$ = CHR$(115)) AND AD = AF THEN 5040
2140 IF ((Z$ = "P" OR Z$ = CHR$(112)) AND AD = 1) OR ((Z$ = "N" OR Z$ = CHR$(110)) AND AD = >S) THEN 2120
2150 Z = ASC(Z$): IF A% = 0 OR (Z$ < >"C" AND Z < >99 AND Z$ < >"Q" AND Z < >113 AND Z$ < >"P" AND Z < >112 AND Z$ < >"N" AND Z < >110 AND Z$ < >"S" AND Z < >115) THEN 2170
2160 GOSUB 2490: PRINT CHR$(7): PRINT "ARE YOU SURE? Y/N": PRINT : PRINT "(RECORD HAS NOT BEEN FILED) ";: GET ZA$: IF ZA$ < >"Y" AND ZA$ < > CHR$(121) THEN 2100
2170 IF Z$ = "Q" OR Z = 113 THEN HOME : RUN 1760
2180 IF Z$ = "C" OR Z = 99 THEN GOSUB 2430: GOTO 1890
2190 IF Z$ < >"D" AND Z < >100 THEN 2220
2200 GOSUB 2490: PRINT : PRINT CHR$(7)" DELETE? ARE YOU SURE? Y/N ";: GET ZA$: IF ZA$ < >"Y" AND ZA$ < > CHR$(121) THEN 2100
2210 FOR X = 1 TO F:D$(X) = "": NEXT :D$(1) = CHR$(5): GOTO 2380
2220 IF Z$ < >"P" AND Z < >112 AND Z$ < >"N" AND Z < >110 THEN 2240
2540 REM *** GENERATED PROGRAM - REPORT SECTION ***
2550 FOR X = 0 TO 9: FOR Y = 0 TO F:J(X,Y) = 1: NEXT Y,X
2560 REM - OBTAIN REPORT OPTIONS
2570 HOME : FOR X = 0 TO 9: READ R$(X): NEXT :Y = 0: FOR X = AH TO AH +9:G(Y) = PEEK(X):Y = Y +1: NEXT
2580 FOR X = 0 TO 6: READ Q$(X): NEXT :Y = 0: FOR X = AH +10 TO AH +16:F(Y) = PEEK(X):Y = Y +1: NEXT
2590 DATA OUTPUT,PRINTER START,PRINTER STOP,PRINTER WIDTH,SCREEN WIDTH
2600 DATA PAGE LENGTH,TEXT LENGTH,PAPER FEED,SORTING?,SELECTION?
2610 DATA # OF HEADING COLUMNS,# OF HEADING LINES,# OF BODY COLUMNS,# OF BODY LINES,# OF LINES BETWEEN BODY ITEMS,# OF TITLE LINES,REPEAT TITLE ON ALL PAGES?
3270 FOR Y = 0 TO F(2) -1: HOME : GOSUB 2530: PRINT : VTAB 1: PRINT " BODY: COLUMN "Y +1",": PRINT : PRINT " COL FIELD # OR TEXT.":Z = 0: FOR X = 0 TO F(3) -1
3280 GOSUB 2530: PRINT SPC( 2)"SPECIFY FIELD DATA OR TEXT"
3830 IF G(9) = 1 THEN 4140: REM - SELECTION NOT REQUIRED
3840 REM - GET FIELD TO SELECT BY
3850 HOME : GOSUB 2530: VTAB 1: HTAB 1: PRINT "WHICH FIELD FOR SELECTION?"
3860 FOR X = 0 TO F: PRINT : HTAB 2: VTAB 4 +X +X *(F <8): PRINT " ";: IF K1 = X THEN INVERSE
3870 PRINT A$(X): NORMAL : NEXT
3880 GOSUB 5790: IF Z = 13 THEN 3940
3890 IF Z = 27 THEN ON (G(8) = 0) +2 *(G(8) = 1 AND F(5) >0) +3 *(G(8) = 1 AND F(5) = 0) GOTO 3690,3620,3270
3900 IF Z = 8 OR Z = 11 THEN K1 = K1 -1 +F *(K1 = 0) +(K1 = 0): GOTO 3860
3910 IF Z = 21 OR Z = 10 THEN K1 = K1 +1 -F *(K1 = F) -(K1 = F): GOTO 3860
3920 GOTO 3880
3930 REM - GET SELECTION CRITERIA
3940 HOME : GOSUB 2530: VTAB 1: PRINT "SELECTION CRITERIA:": PRINT : PRINT "FIELD - "A$(K1):C1 = 1 +(C1 = 2): IF C1 = 2 THEN 3990
3950 VTAB 5: INVERSE : PRINT "ALPHA OR SINGLE VALUE";: NORMAL : PRINT "/RANGE OF VALUES": PRINT
3960 GOSUB 5790: ON (Z = 27) +2 *(Z = 13) GOTO 3850,4000
3970 IF Z = 10 THEN 3960
3980 IF Z = 8 OR Z = 21 THEN C1 = ABS(C1 -2) +1: IF C1 = 1 THEN 3950
3990 VTAB 5: PRINT "ALPHA OR SINGLE VALUE/";: INVERSE : PRINT "RANGE OF VALUES": NORMAL : GOTO 3960
4000 GOSUB 2500: IF C1 = 2 THEN 4090
4010 VTAB 11: PRINT "ALPHA STRING OR SINGLE VALUE:":H = 0:V = 12:M = 40:A$ = H$: GOSUB 5530
4020 H$ = A$: ON (A < >0) +2 *((A = 0) AND (A$ = "")) GOTO 3940,4010
4030 Z$ = "": FOR Y = 1 TO LEN(H$):ZB = ASC( MID$ (H$,Y,1)):Z$ = Z$ + CHR$(ZB -32 *((ZB >96) AND (ZB <123))): NEXT :H$ = Z$
4040 F1 = 0: PRINT : VTAB 15: INVERSE : PRINT "SELECT";: NORMAL : PRINT "/REJECT RECORD WITH STRING"
4050 PRINT : VTAB 17: PRINT "ARROWS TO SELECT": PRINT : PRINT "RETURN TO ACCEPT ";: GOSUB 5790: IF Z = 27 OR Z = 13 THEN ON (Z = 27) +2 *(Z = 13) GOTO 3940,4140
4060 IF (Z < >8 AND Z < >21) OR Z = 10 THEN 4050
4070 IF Z = 8 THEN 4040
4080 IF Z = 21 THEN F1 = 1: PRINT : VTAB 15: PRINT "SELECT/";: INVERSE : PRINT "REJECT";: NORMAL : PRINT " RECORD WITH STRING": GOTO 4050
4120 G1 = VAL(A$): ON (A < >0) +2 *((G1 = 0) AND (A$ < >"0")) GOTO 4090,4110
4130 REM - GET # OF RECORDS FROM FILE
4140 HOME :ZF$ = B$:W = 3: ONERR GOTO 5730
4150 PRINT D$"OPEN"B$",L"Q: PRINT D$"READ"B$",R0": INPUT AF: PRINT D$"CLOSE": POKE 216,0: DIM AL(AF +(AF = 0)): FOR X = 1 TO AF:AL(X) = X: NEXT
4160 IF AF = 0 THEN HOME : PRINT CHR$(7): HTAB 10: PRINT "NO RECORDS IN": PRINT : HTAB 10: PRINT B$: PRINT : PRINT "PRESS RETURN TO CONTINUE ";: GOSUB 5790: RUN 1760
4170 IF G(8) = 1 THEN 4300: REM - NO SORT REQUIRED
4180 REM - SORT RECORDS
4190 POKE 1013,76: POKE 1014,0: POKE 1015,144
4200 ZF$ = "DCK.SORT":W = 4: ONERR GOTO 5730
4210 PRINT D$"BLOAD"ZF$
4220 POKE 216,0: HOME : PRINT : VTAB 10: PRINT SPC( 6)"GETTING RECORDS FOR SORTING": PRINT : DIM M$(AF): IF K >0 THEN 4250
4230 FOR X = 1 TO AF:M$(X) = "": IF X <1000 THEN M$(X) = "0": IF X <100 THEN M$(X) = "00": IF X <10 THEN M$(X) = "000"
4240 M$(X) = M$(X) + STR$(AL(X)): NEXT : GOTO 4260
4250 PRINT : PRINT D$"OPEN"B$",L"Q: FOR X = 1 TO AF: PRINT D$"READ"B$",R"X: FOR Y = 1 TO K: INPUT M$(X): NEXT Y,X: PRINT D$"CLOSE"
4260 IF L = 1 THEN 4280
4270 & M$,1,AF,AL: GOTO 4300
4280 & M$,1,AF,AL/
4290 REM - PREPARE FOR PRINTING
4300 HOME : IF G(0) = 0 THEN PRINT : VTAB 5: HTAB 5 +S: PRINT "PREPARE PRINTER & PRESS RETURN";: GOSUB 5790: IF Z < >13 AND Z < >27 THEN 4300
4310 IF Z = 27 THEN RUN 1760
4320 IF G(4) THEN PRINT D$K$: PRINT
4330 IF G(0) = 0 THEN PRINT D$F$
4340 HOME :AE = F(5): IF F(5) >0 THEN FOR X = 1 TO F(5): PRINT SPC( ((G(3) -1) > LEN(H$(X))) * INT((G(3) - LEN(H$(X)))/2))H$(X) CHR$(13 *( NOT G(0) OR (G(0) AND ( LEN(H$(X)) < >G(3)))));: NEXT
4350 IF F(0) >0 THEN GOSUB 4820
4360 IF G(0) = 0 THEN PRINT D$G$
4370 REM - GET DATA FROM FILE
4380 PRINT D$"OPEN"B$",L"Q: IF G(0) = 0 THEN PRINT D$F$
4390 FOR X = 1 TO AF:L$(0) = STR$(AL(X)): PRINT D$"READ"B$",R"AL(X)
4400 FOR Y = 1 TO F: INPUT L$(Y): NEXT : IF L$(1) = CHR$(5) THEN 4710
4410 FOR Y = 1 TO F:Z$ = L$(Y): GOSUB 4790:L$(Y) = Z$: NEXT
4420 IF G(9) = 1 THEN 4590: REM - SELECTION NOT REQUIRED
4430 REM - SELECT/REJECT RECORDS
4440 AG = 0
4450 Z$ = L$(K1): IF Z$ = "" THEN 4470
4460 Z$ = "": FOR YS = 1 TO LEN(L$(K1)):ZB = ASC( MID$ (L$(K1),YS,1)):Z$ = Z$ + CHR$(ZB -32 *((ZB >96) AND (ZB <123))): NEXT YS
4470 IF C1 < >1 OR F1 < >1 THEN 4510
4480 IF Z$ = H$ THEN AG = 1: GOTO 4570
4490 IF LEN(Z$) = < LEN(H$) THEN 4570
4500 FOR ZS = 1 TO 1 + LEN(Z$) - LEN(H$):AG = AG +(H$ = MID$ (Z$,ZS, LEN(H$))): NEXT : GOTO 4570
4510 IF C1 < >1 THEN 4550
4520 IF LEN(Z$) = < LEN(H$) AND Z$ < >H$ THEN AG = 1: GOTO 4570
4530 AG = 1: FOR ZS = 1 TO 1 + LEN(Z$) - LEN(H$): IF H$ = MID$ (Z$,ZS, LEN(H$)) THEN AG = 0:ZS = 1 + LEN(Z$) - LEN(H$)
4540 NEXT : GOTO 4570
4550 AG = 1: IF F1 >G1 AND VAL(Z$) = <F1 AND VAL(Z$) = >G1 THEN AG = 0: GOTO 4570
4560 IF ( VAL(Z$) = >G1 OR VAL(Z$) = <F1) AND F1 = <G1 THEN AG = 0
4570 IF AG >0 THEN 4710
4580 REM - PRINT BODY ITEM
4590 FOR Y = 0 TO F(3) -1:ZH = 0: FOR Z = 0 TO F(2) -1: IF J(Z,Y) = 0 THEN PRINT SPC( E(Z,Y) -ZH)K$(Z,Y);:ZH = E(Z,Y) + LEN(K$(Z,Y)): GOTO 4620
4600 ZA = VAL(K$(Z,Y)): IF C(ZA) = 0 THEN PRINT SPC( E(Z,Y) -ZH)L$(ZA);:ZH = E(Z,Y) + LEN(L$(ZA)): REM - LEFT JUSTIFY
4610 IF C(ZA) = 1 THEN PRINT SPC( E(Z,Y) -ZH +L(ZA) - LEN(L$(ZA)))L$(ZA);:ZH = E(Z,Y) +L(ZA): REM - RIGHT JUSTIFY
4620 NEXT : PRINT CHR$(13 *(G(0) = 0) +13 *G(0) *(ZH <(40 +40 *G(4))));: NEXT :AE = AE +F(3) +F(4): IF F(4) >0 THEN FOR Z = 1 TO F(4): PRINT : NEXT
4630 IF AE +F(3) +F(4) <G(6) THEN 4710
4640 IF AE <(G(5)) AND G(0) = 0 THEN FOR Z = 1 TO G(5) -AE: PRINT : NEXT
4650 IF G(7) THEN 4690
4660 IF G(0) = 1 THEN PRINT "PRESS RETURN"
4670 IF G(0) = 0 THEN PRINT D$G$: HOME : PRINT "PREPARE PRINTER & PRESS RETURN"
4680 POKE 49168,0: WAIT 49152,128: POKE 49168,0: HOME : IF G(0) = 0 THEN PRINT : PRINT D$F$
4690 AE = 0: IF F(6) = 1 AND F(5) >0 THEN FOR XS = 1 TO F(5): PRINT SPC( ((G(3) -1) > LEN(H$(XS))) * INT((G(3) - LEN(H$(XS)))/2))H$(XS) CHR$(13 *( NOT G(0) OR (G(0) AND ( LEN(H$(XS)) < >G(3)))));: NEXT :AE = F(5)
4700 IF F(0) THEN GOSUB 4820
4710 NEXT : PRINT : PRINT D$"CLOSE": IF G(0) = 0 THEN FOR X = 1 TO G(5) -AE: PRINT : NEXT : PRINT D$G$
4720 IF G(0) = 1 THEN PRINT " PRESS RETURN";: GOSUB 5790
4730 HOME : IF G(8) THEN 4770
4740 ZF$ = "DCK.INPUT":W = 7: ONERR GOTO 5730
4750 PRINT D$"BLOAD"ZF$: POKE 216,0
4760 Y = 0: FOR X = AH TO AH +9: POKE X,G(Y):Y = Y +1: NEXT :Y = 0: FOR X = AH +10 TO AH +16: POKE X,F(Y):Y = Y +1: NEXT
4770 RUN 1760
4780 REM - SUBROUTINE: RE-INSERT COMMAS & COLONS
4790 IF Z$ < >"" THEN ZB$ = "": FOR XS = 1 TO LEN(Z$):ZB = ASC( MID$ (Z$,XS,1)):ZB$ = ZB$ + CHR$(ZB +43 *(ZB = 1) +56 *(ZB = 2)): NEXT :Z$ = ZB$
4800 RETURN
4810 REM - SUBROUTINE: PRINT COLUMN HEADINGS
4820 AE = AE +F(1): FOR YS = 0 TO F(1) -1:ZH = 0: FOR XS = 0 TO F(0) -1: PRINT SPC( Q(XS,YS) -ZH)J$(XS,YS);
4880 IF AF = 0 THEN HOME : PRINT CHR$(7): HTAB 10: PRINT "NO RECORDS IN": PRINT : HTAB 10: PRINT B$: POKE 34,4: PRINT : PRINT "PRESS RETURN TO CONTINUE";: GOSUB 5790: POKE 34,0: RUN 1760
4890 REM - GET SEARCH CRITERIA
4900 HOME : GOSUB 2530:W = 1
4910 PRINT : VTAB 1: PRINT "SEARCH": PRINT : FOR X = 1 TO F: IF X = W THEN INVERSE
4920 PRINT A$(X): NORMAL : NEXT : VTAB F +4: PRINT "WHICH FIELD FOR THE SEARCH?"
4930 GOSUB 5790: IF Z < >8 AND Z < >13 AND Z < >21 AND Z < >27 AND Z < >10 AND Z < >11 THEN 4930
4940 IF Z = 27 THEN RUN 1760
4950 IF Z < >13 THEN W = W -(Z = 8 OR Z = 11) +(Z = 21 OR Z = 10):W = F *(W = 0) +W *(W <(F +1) AND W < >0) +(W = (F +1)): GOTO 4910
4960 GOSUB 2500: VTAB 18: PRINT "WHAT STRING FOR THE SEARCH?":A$ = S$:H = 0:V = 18:M = L(W): GOSUB 5530:S$ = A$: IF S$ = "" OR A >0 THEN ON (A >0) +1 GOTO 4960,4900
4970 Z% = 1: HOME
4980 GOSUB 2490: VTAB 4: PRINT J$ SPC( 15)"SEARCHING": VTAB 22: PRINT SPC( 9)"PRESS ESC TO END SEARCH"
4990 PRINT D$"OPEN"B$",L"Q: PRINT D$"READ"B$",R"Z%: FOR XZ = 1 TO W: INPUT W$: NEXT : IF LEN(W$) < LEN(S$) THEN PRINT D$"CLOSE": GOTO 5020
5000 ZA = 0: FOR Y = 1 TO LEN(W$) - LEN(S$) +1: IF S$ = MID$ (W$,Y, LEN(S$)) THEN ZA = 1
5010 NEXT Y: PRINT D$"CLOSE": IF ZA = 1 THEN GOSUB 2430:AD = Z%: VTAB 3: HTAB 11: PRINT AD:S = AF: GOTO 2040
5020 IF PEEK(49152) = 155 THEN Z% = AF
5030 POKE 49168,0:Z% = Z% +1: IF Z% <AF +1 THEN 4990
5040 HOME : PRINT : PRINT CHR$(7)"END OF SEARCH": PRINT : PRINT "PRESS RETURN TO CONTINUE ";: GET ZA$: IF ZA$ < > CHR$(13) THEN 5040
5050 RUN 1760
5060 REM *** GENERATED PROGRAM - PURGE FILE SECTION ***
5070 HOME : PRINT : PRINT "PURGING THE FILE WILL REMOVE ALL": PRINT : PRINT "EMPTY, (DELETED), RECORDS": PRINT
5080 PRINT "AND RENUMBER THE REMAINING RECORDS": PRINT : PRINT
5090 PRINT "PRESS RETURN TO PURGE THE FILE": PRINT : PRINT "OR ESC TO RETURN TO THE MENU ";: GOSUB 5790