home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib27a.dsk
/
FEBRUARY.1986
/
NIBBLE.REMINDER.bas
< prev
Wrap
BASIC Source File
|
2023-02-26
|
27KB
|
499 lines
10 REM **********************
20 REM * NIBBLE.REMINDER *
30 REM * BY MARK R. CRAVEN *
40 REM * COPYRIGHT (C) 1986 *
50 REM * BY MICROSPARC, INC *
60 REM * CONCORD, MA 01742 *
70 REM **********************
80 TEXT : HOME
90 LET IN$ = "X": REM INITIATE INPUT VARIABLE
100 GOSUB 4770
110 DIM L$(100,7): REM LOANER DATA
120 DIM T$(100,7): REM TEMP ARRAY FOR INPUT BEFORE DISK WRITE
130 FOR I = 1 TO 39:L$ = L$ +"=":UL$ = UL$ + CHR$(95): NEXT
140 POKE 963,0: REM ONERR FLAG
150 D$ = CHR$(4)
160 F$ = "REMINDER.FILE": REM TEXT FILE NAME
170 PRINT
180 EF = 1: ONERR GOTO 1240: REM NO DATA FILE
190 PRINT : PRINT D$;"OPEN"F$
200 PRINT D$;"READ"F$
210 INPUT NR$
220 PRINT D$;"CLOSE"F$
230 POKE 216,0
240 REM ** READ MENU DATA **
250 FOR I = 1 TO 5: READ MU$(0,I): NEXT : REM MAIN MENU
260 READ V%(0): READ H%(0): REM MAIN MENU
270 FOR I = 1 TO 8: READ MU$(1,I): NEXT : REM ADD DATA MENU
280 READ V%(1): READ H%(1)
290 FOR I = 1 TO 7: READ T%(I): READ L%(I): NEXT : REM INPUT TABS , INPUT LENGTH
300 FOR I = 1 TO 3: READ MU$(2,I): NEXT : REM DISK MENU
310 READ V%(2): READ H%(2): REM TABS FOR DISK MENU
320 FOR I = 1 TO 4: READ MU$(3,I): NEXT
330 READ V%(3): READ H%(3)
340 FOR J = 940 TO 962: READ I: POKE J,I: NEXT J: REM DISK INPUT ROUTINE
350 FOR I = 1 TO 4: READ MU$(4,I): NEXT
360 READ V%(4): READ H%(4): REM PRINTER MENU
370 FOR I = 1 TO 6: READ P$(I): NEXT : REM PRINTER HEADINGS
380 GOSUB 4900: REM READ IN ML CURSOR BAR ROUTINE
390 GOTO 430
400 REM ** CENTER TEXT **
410 HTAB 20 - LEN(X$)/2: PRINT X$: RETURN
420 REM ** MAIN MENU **
430 X$ = "** MAIN MENU - NIBBLE REMINDER **"
440 POKE 963,1: REM ONERR FLAG
450 R = 16:N = 5: REM RIGHT MARGIN, # OF MENU ITEMS
460 M1 = 0:M2 = 1
470 REM ** CURSOR BAR MENU **
480 TEXT : HOME : GOSUB 410: PRINT : PRINT L$
490 VTAB V%(M1)
500 FOR I = 1 TO N: HTAB H%(M1): PRINT MU$(M1,I): PRINT : NEXT
510 IF M1 = 1 THEN RETURN
520 VTAB 22: PRINT L$;
530 VTAB 23: HTAB 1: INVERSE : PRINT "<-";: NORMAL : PRINT " ";: INVERSE : PRINT "->";: NORMAL : PRINT " TO SELECT .... ";: INVERSE : PRINT "RETURN";: NORMAL : PRINT " TO EXECUTE"
540 VTAB 24: PRINT L$;
550 CALL 768,V%(M1),2 *N +V%(M1) -2,H%(M1) -3,R +H%(M1)
560 LINE = ( PEEK(4) +1)/2
570 ON M1 +1 GOTO 590,600,610,620,630,650
580 REM MAIN MENU CHOICES
590 ON LINE GOTO 1360,2360,3410,3610,3900: REM MAIN MENU CHOICES
600 REM NO MENU FOR M1=2
610 ON LINE GOTO 730,1360,4880: REM DISK MENU (MU$(2,X))
620 ON LINE GOTO 430,2400,3350,3360: REM LIST/SEARCH DATA MENU M1=3
630 ON LINE GOTO 3370,640,640,3390: REM PRINTER/SCREEN OPTION M1=4
640 ON LINE -1 GOSUB 2930,2970: GOTO 3920: REM SET CPI THEN PRINT
650 IF LINE = 8 THEN 2360: REM M1=5
660 GOTO 2470: REM M1=5 - SEARCH
670 REM ** DISK ROUTINES **
680 NR = VAL(NR$) +T%
690 NR$ = STR$(NR)
700 HOME
710 EF = 2: ONERR GOTO 4640
720 M1 = 2:M2 = 1:N = 3:R = 27: GOTO 480: REM CURSOR MENU
730 GOSUB 1220: REM HEADING
740 REM ** UPDATE FILE **
750 GOTO 1100
760 PRINT D$;"OPEN"F$
770 PRINT D$;"WRITE"F$
780 PRINT NR$
790 PRINT D$
800 PRINT D$;"CLOSE"F$
810 PRINT D$;"APPEND"F$
820 PRINT D$;"WRITE"F$
830 FOR I = 1 TO T%
840 FOR J = 1 TO 7
850 PRINT T$(I,J): NEXT J,I
860 PRINT D$
870 PRINT D$;"CLOSE"F$
880 POKE 216,0
890 GOTO 430: REM MAIN MENU
900 REM ** READ DATA FILE **
910 EF = 3: ONERR GOTO 4640
920 PRINT : PRINT D$;"OPEN"F$
930 PRINT D$;"READ"F$
940 CALL 940:IN$ = MID$ (IN$,1)
950 NR$ = IN$
960 FOR I = 1 TO VAL(NR$)
970 FOR J = 1 TO 7
980 CALL 940:IN$ = MID$ (IN$,1)
990 L$(I,J) = IN$
1000 NEXT J,I
1010 IN$ = ""
1020 PRINT D$
1030 PRINT D$;"CLOSE"F$
1040 RF = 1: REM READ FLAG
1050 POKE 216,0
1060 RETURN
1070 TEXT : HOME : VTAB 10: HTAB 10: PRINT "NO DATA IN FILE...": VTAB 23: PRINT "PRESS <RETURN> TO CONTINUE...";: POKE -16368,0: GET X$: GOTO 430
1080 REM ** REWRITE FILE **
1090 GOSUB 1220: REM HEADING
1100 EF = 4: ONERR GOTO 4640
1110 PRINT : PRINT D$;"OPEN";F$
1120 PRINT D$;"WRITE"F$
1125 NR$ = STR$(NR)
1127 IF LEN(NR$) < >3 THEN NR$ = "0" +NR$: GOTO 1127
1130 PRINT NR$
1140 IF VAL(NR$) = 0 THEN 1180
1150 FOR I = 1 TO VAL(NR$)
1160 FOR J = 1 TO 7
1170 PRINT L$(I,J): NEXT J: NEXT I
1180 PRINT D$
1190 PRINT D$;"CLOSE"F$
1200 POKE 216,0
1210 ED = 0:DL = 0: GOTO 430: REM MAIN MENU
1220 HOME :X$ = "** SAVE TO DISK **": GOSUB 410: PRINT : PRINT L$
1230 VTAB 12: HTAB 5: PRINT "DO NOT INTERRUPT...": RETURN
1240 IF PEEK(222) < >5 THEN 4640: REM NOT 'END OF DATA ERROR'
1250 PRINT D$;"WRITE"F$
1260 PRINT "000"
1270 PRINT D$;"CLOSE"F$
1280 POKE 216,0: GOTO 250
1290 IF PEEK(222) < >5 THEN 4640: REM NOT 'END OF DATA' ERROR
1300 PRINT D$;"OPEN";F1$
1310 PRINT D$;"WRITE"F1$
1320 PRINT "000"
1330 PRINT D$;"CLOSE"F1$
1340 GOTO 340
1350 REM ** ENTER DATA **
1360 T% = 0: REM INPUT RECORD COUNTER FOR DISK WRITE
1370 TEXT : HOME :X$ = "**" +MU$(0,M2) +"**": GOSUB 410: PRINT : PRINT L$
1380 M1 = 1:M2 = 1:N = 7: GOSUB 490: REM PRINT INPUT PROMPTS
1390 VTAB 21: PRINT L$;
1400 VTAB 22: HTAB 1: PRINT " <RTN> TO ACCEPT <ESC> TO BACK UP": REM 6 SPACES
1410 PRINT " ^Q TO QUIT ";: INVERSE : PRINT "<--";: NORMAL : PRINT " TO ERASE CHARACTER";
1420 ON ED GOTO 1440
1430 VTAB 3: HTAB 16: PRINT "ENTRY # ";T% +1: POKE 35,24: VTAB 20: HTAB 15: PRINT "RECORD # " VAL(NR$) +T% +1" ";: CALL -868: POKE 35,20
1440 VTAB 24: CALL -868
1450 FOR I = 1 TO 7
1460 VTAB 24: HTAB 1: CALL -868: IF I = 5 THEN 1800: REM INPUT DATES
1470 IF I >5 THEN 1810
1480 VTAB V%(M1) +2 *(I -1): REM PLACE INPUT LINE VERT.
1490 HTAB T%(I)
1500 IF ED THEN 1520
1510 PRINT LEFT$(UL$,L%(I));: HTAB T%(I): REM SET HORIZONTAL INPUT LINE
1520 I$ = "":I$(I) = "": REM NULL INPUT STRINGS
1530 POKE -16368,0: GET I$: REM INPUT A CHARACTER
1540 IF I$ > CHR$(31) THEN 1760
1550 REM ** CHECK FOR <ESC> **
1560 IF I$ < > CHR$(27) THEN 1620
1570 IF I = 1 AND ED = 1 THEN PRINT CHR$(7);: HTAB T%(I): GOTO 1490: REM BACKUP WITH NO PLACE TO GO?
1580 IF I = 1 THEN PRINT CHR$(7);: HTAB T%(I): CALL -868: GOTO 1490: REM BACKUP WITH NO PLACE TO GO?
1590 IF ED THEN HTAB T%(I):I = I -1 *(I >1): GOTO 1480: REM BACKUP TO LAST INPUT
1600 HTAB T%(I): CALL -868:I = I -1 *(I >1): GOTO 1480: REM BACKUP TO LAST INPUT
1610 REM ** CHECK FOR <-- **
1620 IF I$ < > CHR$(8) THEN 1670
1630 IF I$(I) = "" THEN PRINT CHR$(7);: GOTO 1480
1640 IF LEN(I$(I)) = 1 THEN I$(I) = "": GOTO 1490: REM <-- WITH NO PLACE TO GO
1650 POKE 36, PEEK(36) -1: PRINT CHR$(95); CHR$(8);:I$(I) = LEFT$(I$(I), LEN(I$(I)) -1): GOTO 1530: REM <--
1660 REM ** CHECK FOR <RTN> **
1670 IF I$ < > CHR$(13) THEN 1720
1680 IF ED AND LEN(I$(I)) <1 THEN I$(I) = L$(II,I)
1690 IF ED THEN 2180: REM ACCEPT OLD, ADVANCE TO NEXT FIELD
1700 PRINT I$;: CALL -868:I$ = "": NEXT I: REM ADVANCE TO NEXT FIELD
1710 REM ** CHECK FOR ^ CHAR **
1720 IF I$ < > CHR$(17) THEN 1750
1730 IF ED = 1 THEN RETURN : REM QUIT FROM EDIT ROUTINE
1740 GOTO 2330: REM ^Q=QUIT TO MENU OR DISK
1750 IF I$ < CHR$(32) THEN PRINT CHR$(7);: GOTO 1530: REM CONTROL CHARACTERS?
1760 IF LEN(I$(I)) = L%(I) THEN VTAB V%(M1) +2 *(I -1): PRINT CHR$(7);: HTAB 40: VTAB PEEK(37) +1: PRINT " ";: HTAB 40: VTAB PEEK(37): GOTO 1530: REM NO INPUT OVERFLOW
1770 PRINT I$;:HP = POS(0):I$(I) = I$(I) +I$: ON L%(I) = LEN(I$(I)) GOTO 1760: PRINT LEFT$(UL$,L%(I) - LEN(I$(I)));" ";: VTAB PEEK(37): HTAB HP +1: REM DISPLAY AND BUILD INPUT STRING
1780 GOTO 1530
1790 REM ** INPUT DATES **
1800 VTAB 23: HTAB 12: CALL -868: PRINT CHR$(7);: REM BEEP FOR DATE FORMAT
1810 VTAB 24: HTAB 6: FLASH : PRINT "**";: NORMAL : PRINT " DATE FORMAT = MM/DD/YY ";: FLASH : PRINT "**";: NORMAL
1820 I$(I) = "":I$ = ""
1830 VTAB V%(M1) +2 *(I -1): REM PLACE INPUT LINE VERT.
1840 HTAB T%(I): IF ED THEN PRINT LEFT$(D1$(I),2) SPC( 1) MID$ (D1$(I),3,2) SPC( 1) RIGHT$(D1$(I),2);: HTAB T%(I): GOTO 1860
1850 PRINT LEFT$(UL$,L%(I));: HTAB T%(I): REM SET HORIZONTAL INPUT LINE
1860 HTAB T%(I) +2: PRINT "/";: HTAB T%(I) +5: PRINT "/";: HTAB T%(I)
1870 IF PL THEN PL = 0: RETURN
1880 FOR J = 1 TO 3: REM MO,DAY,YR
1890 FOR K = 1 TO 2: REM 2 DIGITS PER MO,DAY,YR
1900 T = T%(I) +3 *(J -1) +(K -1): REM T=TAB POSITON FOR INPUT
1910 IF K = 1 AND ED THEN HTAB T: GOTO 1930
1920 IF K = 1 THEN HTAB T: PRINT CHR$(95); CHR$(95);
1930 POKE -16368,0: HTAB T: GET I$: REM INPUT A CHARACTER
1940 IF I$ = CHR$(13) AND ED AND J *K >1 THEN PL = 1: GOSUB 1840: GOTO 1880
1950 IF I$ = CHR$(13) AND ED THEN I$(I) = D1$(I):PL = 1: GOSUB 1840: GOTO 2180: REM NEXT INPUT
1960 IF I$ = CHR$(13) AND LEN(I$(I)) >0 AND LEN(I$(I)) <6 THEN PRINT CHR$(7);: GOTO 1800
1970 IF I$ = CHR$(13) THEN I$(I) = "": GOTO 2180: REM NEXT DATE INPUT - THIS ONE NULL
1980 IF I$ = CHR$(27) AND ED THEN HTAB T%(I): PRINT L$(II,I);:I = I -1:J = 3:K = 2: NEXT K,J: GOTO 1460
1990 IF I$ = CHR$(27) THEN HTAB T%(I): CALL -868:I = I -1:J = 3:K = 2: NEXT K,J: GOTO 1460
2000 IF I$ = CHR$(8) AND J = 1 AND K = 1 THEN PRINT CHR$(7);:I$(I) = "": GOTO 1930
2010 IF I$ = CHR$(8) AND K = 1 AND J = 2 THEN J = 1: HTAB T: PRINT CHR$(95); CHR$(95);:I$(I) = "": GOTO 1900
2020 IF I$ = CHR$(8) AND K = 1 AND J = 3 THEN J = 2: HTAB T: PRINT CHR$(95); CHR$(95);:I$(I) = LEFT$(I$(I),2): GOTO 1900
2030 IF I$ = CHR$(8) AND K = 2 AND J >1 THEN K = K -1: HTAB T -1:I$(I) = LEFT$(I$(I),2 *J -2): PRINT CHR$(95); CHR$(95);: GOTO 1900
2040 IF I$ = CHR$(8) AND K = 2 THEN K = K -1: HTAB T -1:I$(I) = "": PRINT CHR$(95); CHR$(95);: GOTO 1900
2050 IF I$ = CHR$(17) THEN 2330: REM ^Q=QUIT TO MAIN MENU OR DISK
2060 IF I$ <"0" OR I$ >"9" THEN 1930
2070 IF I$ < CHR$(32) THEN PRINT CHR$(7);: GOTO 1930
2080 HTAB T%(I) +3 *(J -1) +(K -1): PRINT I$; CHR$(21);
2090 I$(I) = I$(I) +I$: REM BUILD DATE STRING
2100 NEXT K
2110 IF J >1 THEN 2140
2120 IF VAL( LEFT$(I$(I),2)) <1 OR VAL( LEFT$(I$(I),2)) >12 THEN PRINT CHR$(7);:I$(I) = "": HTAB T%(I): GOTO 1890
2130 GOTO 2160
2140 IF VAL( MID$ (I$(I),3,2)) >31 OR VAL( MID$ (I$(I),3,2)) <1 THEN PRINT CHR$(7);:I$(I) = LEFT$(I$(I),2): HTAB T%(I): GOTO 1890
2150 IF ED AND J = 3 AND I = 2 THEN PL = 1:I$(I) = LEFT$(I$(I),6): GOTO 1900
2160 NEXT J
2170 IF ED THEN HTAB T: POKE -16368,0: GET X$: IF X$ < > CHR$(13) THEN 2170
2180 NEXT I
2190 IF ED THEN 2210
2200 RF = 0: REM CLEAR READ FLAG--NEW DATA--MUST UPDATE READ
2210 FOR I = 5 TO 7: IF I$(I) = "" THEN 2240
2220 IF LEN(I$(I)) = 8 AND ED THEN 2240
2230 I$(I) = LEFT$(I$(I),2) +"/" + MID$ (I$(I),3,2) +"/" + RIGHT$(I$(I),2)
2240 NEXT
2250 T% = T% +1: REM RECORD COUNTER
2260 IF ED THEN RETURN : REM ENTRY COMPLETE FOR THIS ITEM
2270 REM ** STORE TEMP VAR. **
2280 FOR I = 1 TO 7
2290 L$(T% + VAL(NR$),I) = I$(I): NEXT
2300 HOME
2310 GOTO 1370
2320 REM ** CHECK # OF INPUTS *
2330 IF T% = 0 THEN 430
2340 GOTO 680: REM DISK WRITE MENU
2350 REM ** LIST/SEARCH DATA **
2360 IF VAL(NR$) = 0 THEN GOTO 1070: REM NO DATA MESSAGE
2370 TEXT : HOME :UN = 0:DS = 0: REM UN-RETURNED ITEM FLAG FROM LIST/SEARCH
2380 M1 = 3:M2 = 1:N = 4:X$ = "** " +MU$(0,2) +" **": GOSUB 410: PRINT : PRINT L$
2390 R = 27: GOTO 490
2400 TEXT : HOME :K = 0: REM SEARCH COUNTER
2410 X$ = "** " +MU$(3,2) +" **": GOSUB 410: PRINT : PRINT L$
2420 IF UN THEN LINE = 7: GOTO 2480
2430 VTAB V%(1)
2440 FOR I = 1 TO 8: HTAB 20 - LEN(MU$(1,I))/2: PRINT MU$(1,I): PRINT : NEXT
2450 M1 = 5:M2 = 1:H%(5) = 10:V%(5) = 5:N = 8: GOTO 520
2460 REM **FIELD= MU$(1,LINE) **
2470 IF X$ = CHR$(13) THEN 2690
2480 VTAB 2: CALL -958: VTAB 3: HTAB 4: PRINT "SEARCH FIELD = ";MU$(1,LINE): VTAB 4: HTAB 1: PRINT L$: POKE 34,4: VTAB 19: PRINT L$
2490 PRINT TAB( 5)"<";: INVERSE : PRINT "RTN";: NORMAL : PRINT "> BACK TO SEARCH MENU"
2500 IF UN THEN 2610
2510 INVERSE : PRINT "^L";: NORMAL : PRINT " =LIST ALL - OR - ENTER SEARCH STRING";
2520 IF LINE >4 THEN VTAB 24: HTAB 11: PRINT "DATE FORMAT= MM/DD/YY";
2530 VTAB 23: HTAB 5: PRINT "==> "; LEFT$(UL$,25);" <==";
2540 POKE 34,22: POKE 35,23: POKE 33,25: POKE 32,8: REM SET INPUT WINDOW TO PREVENT SCROLLING
2550 VTAB 23: HTAB 1
2560 CALL 940:IN$ = MID$ (IN$,1)
2570 NI$ = IN$
2580 IF IN$ = CHR$(12) THEN POKE 35,24: POKE 34,4: POKE 32,0: POKE 33,40: VTAB 23: HTAB 1: CALL -958: GOSUB 2840: GOTO 2520: REM LIST ALL DATA
2590 IF LEN(IN$) = 0 THEN 2400: REM FIELD CHOICE MENU
2600 REM * LOOK FOR STRING *
2610 IF NOT RF THEN POKE 35,24: POKE 34,4: POKE 32,0: POKE 33,40: VTAB 23: HTAB 1: CALL -958: GOSUB 910:IN$ = NI$
2620 POKE 35,24: POKE 34,4: POKE 32,0: POKE 33,40: VTAB 19: CALL -958: PRINT L$: PRINT
2630 PRINT " <";: INVERSE : PRINT "P";: NORMAL : PRINT ">= PRINT SCREEN" TAB( 22)"<";: INVERSE : PRINT "RTN";: NORMAL : PRINT ">= NEXT MATCH": PRINT TAB( 13)"<";: INVERSE : PRINT "ESC";: NORMAL : PRINT "> TO QUIT"
2640 POKE 35,17
2650 HOME : FOR J = 1 TO VAL(NR$)
2660 IF UN = 1 AND LEN(L$(J,7)) = 0 THEN IN$ = L$(J,7):Z = J:K = K +1: GOTO 2700
2670 IF UN THEN 2690
2680 IF LEFT$(L$(J,LINE), LEN(IN$)) = IN$ THEN K = K +1:Z = J: GOTO 2700
2690 NEXT : GOTO 2790
2700 POKE 34,6: VTAB 3 +(UN = 0) +DS: HTAB 16: PRINT " ";Z" OF " VAL(NR$)" ";: POKE 34,4: VTAB V%(1): FOR I = 1 TO 7: IF I = LINE THEN INVERSE
2710 VTAB 5 +2 *(I -1): HTAB H%(1): PRINT MU$(1,I)" - ";
2720 NORMAL
2730 PRINT TAB( T%(I))L$(J,I);: CALL -868: NEXT : REM DISPLAY
2740 VTAB 23: HTAB 20: POKE -16368,0: GET X$
2750 IF X$ = CHR$(27) THEN 2360
2760 IF X$ = "P" OR X$ = CHR$(112) THEN GOSUB 4310: GOTO 2700: REM PRINT SCREEN
2770 IF X$ = CHR$(13) OR X$ = CHR$(21) THEN 2690: REM NEXT MATCH
2780 GOTO 2740
2790 IF K = 0 THEN HOME : VTAB 10: HTAB 10: PRINT "NO MATCH FOUND"
2800 POKE 35,24: VTAB 20: HTAB 1: CALL -958: VTAB 22: HTAB 1: PRINT "PRESS <RETURN> TO CONTINUE...";: POKE -16368,0: GET X$: HTAB 1: CALL -868: POKE 35,17
2810 IF UN THEN LINE = 1
2820 GOTO 2360: REM WAS 3015
2830 REM * LIST ALL DATA *
2840 IF NOT RF THEN GOSUB 910: REM READ FILE
2850 POKE 35,17: VTAB 5: HOME
2860 FOR I = 1 TO VAL(NR$)
2870 PRINT TAB( 5)I"> "L$(I,LINE)
2880 IF PEEK(37) = 15 THEN VTAB 17: HTAB 1: PRINT "PRESS <RETURN> TO CONTINUE...";: POKE -16368,0: GET X$: POKE 35,17: HOME
2890 NEXT
2900 REM
2910 RETURN
2920 REM * SET PRINTER 10CPI *
2930 NN$ = CHR$(27) +"N": REM CODE FOR IMAGEWRITER AND PROWRITER
2940 PR = 0
2950 RETURN
2960 REM * SET PRINTER 17 CPI *
2970 NN$ = CHR$(27) +"Q": REM CODE FOR IMAGEWRITER AND PROWRITER
2980 PR = 1
2990 RETURN
3000 REM ** SCROLL DATA **
3010 TEXT : HOME
3020 X$ = "** " +MU$(3, PEEK(963)) +" **": GOSUB 410: PRINT : PRINT L$
3030 IF NOT RF THEN GOSUB 910: REM READ FILE IF NOT ALREADY READ
3040 N = 7:M1 = 1: GOSUB 490: REM PRINT FIELDS
3050 IF DL THEN 3090
3060 VTAB 20: PRINT L$
3070 VTAB 22: HTAB 5: PRINT "<";: INVERSE : PRINT "RTN";: NORMAL : PRINT "> OR ";: INVERSE : PRINT "->";: NORMAL : PRINT " TO SCROLL FORWARD"
3080 VTAB 23: INVERSE : PRINT "<-";: NORMAL : PRINT " TO REVERSE SCROLL";: PRINT " <";: INVERSE : PRINT "ESC";: NORMAL : PRINT "> FOR MENU"
3090 FOR I = 1 TO VAL(NR$)
3100 FOR J = 1 TO 7
3110 VTAB 5 +2 *(J -1): HTAB T%(J) -3: PRINT " - ";L$(I,J);: CALL -868: REM DISPLAY DATA
3120 NEXT J
3130 VTAB 3: HTAB 16: PRINT " ";I" OF " VAL(NR$)" ";
3140 VTAB 24: HTAB 19 -3 *ED: GET X$: POKE -16368,0
3150 IF I = VAL(NR$) THEN IF X$ = CHR$(13) OR X$ = CHR$(21) OR X$ = CHR$(10) THEN I = 1: GOTO 3100: REM BACK TO BEGINNING
3160 IF X$ = CHR$(13) OR X$ = CHR$(21) OR X$ = CHR$(10) THEN NEXT
3170 IF I = 1 AND (X$ = CHR$(8) OR X$ = CHR$(11)) THEN I = VAL(NR$): GOTO 3100: REM CONTINUE REVERSE SCROLL
3180 IF X$ = CHR$(8) OR X$ = CHR$(11) THEN I = I -1: GOTO 3100
3190 IF X$ = CHR$(27) AND DL = 1 THEN RETURN : REM BAIL OUT OF EDIT ROUTINE
3200 IF X$ = CHR$(27) AND ED = 1 THEN DL = 0: RETURN : REM BAIL OUT OF EDIT ROUTINE
3210 IF (X$ = CHR$(101) OR X$ = "E") AND ED = 1 THEN II = I: RETURN : REM EDIT OPTION CHOSEN-- GO EDIT
3220 IF (X$ = CHR$(115) OR X$ = "S") AND ED = 1 THEN 3260: REM SELECT RECORD #
3230 IF (X$ = CHR$(100) OR X$ = "D") AND DL = 1 THEN II = I: RETURN : REM DELETE OPTION CHOSEN--GO DELETE
3240 IF X$ = CHR$(27) THEN 2360
3250 GOTO 3140
3260 POKE 34,23: POKE 35,24: POKE 33,17: HOME : PRINT "REC#";
3270 POKE 32,5: POKE 33,9
3280 HOME : INPUT "";X$: IF X$ = "" THEN 3310
3290 IF VAL(X$) <1 OR VAL(X$) > VAL(NR$) THEN PRINT CHR$(7);: PRINT : GOTO 3280
3300 I = VAL(X$)
3310 POKE 32,0: POKE 33,40: POKE 34,5: POKE 35,24: VTAB 24: HTAB 1: PRINT "<";: INVERSE : PRINT "S";: NORMAL : PRINT ">=GET REC# ";: GOTO 3100
3320 TEXT : HOME : REM SCREEN/PRINTER MENU
3330 M1 = 4:M2 = 1:N = 5:X$ = "** " +MU$(3, PEEK(963)) +" **": GOSUB 410: PRINT : PRINT L$
3340 R = 26: GOTO 490
3350 DS = 1:UN = 1:ALL = 0: POKE 963,LINE: GOTO 3320:LINE = 3: REM SET UNRETURNED FLAG-CLEAR ALL FLAG
3360 UN = 0:ALL = 1: POKE 963,LINE: GOTO 3320:LINE = 4: REM SET ALL FLAG-CLEAR UNRETURNED FLAG
3370 IF UN = 1 THEN 2400: REM SCROLL UNRETURNED ITEMS TO SCREEN
3380 GOTO 3010: REM ALL ITEMS DISPLAY ON SCREEN
3390 LINE = 2: GOTO 2360
3400 REM ** EDIT DATA **
3410 IF VAL(NR$) = 0 THEN GOTO 1070: REM NO DATA MESSAGE
3420 TEXT : HOME :M1 = 3:M2 = 1:N = 3:X$ = "**" +MU$(0,3) +" **": GOSUB 410: PRINT : PRINT L$
3430 ED = 1:DL = 1: REM USE BOTH FLAGS
3440 VTAB 20: PRINT L$
3450 VTAB 22: HTAB 5: PRINT "<";: INVERSE : PRINT "RTN";: NORMAL : PRINT "> OR ";: INVERSE : PRINT "->";: NORMAL : PRINT " TO SCROLL FORWARD"
3460 VTAB 23: INVERSE : PRINT "<-";: NORMAL : PRINT " TO REVERSE SCROLL";: PRINT " <";: INVERSE : PRINT "ESC";: NORMAL : PRINT "> TO QUIT"
3470 VTAB 24: PRINT "<";: INVERSE : PRINT "S";: NORMAL : PRINT ">=GET REC# " TAB( 18)"<";: INVERSE : PRINT "E";: NORMAL : PRINT "> TO EDIT DISPLAY";
3480 POKE 35,19: POKE 34,4: HOME : PRINT : GOSUB 3030: REM USE 'SCROLL' ROUTINE FOR EDIT
3490 IF X$ = CHR$(27) THEN 3830: REM EXIT EDIT-FINAL DECISION
3500 FOR I = 1 TO 7:T$(II,I) = L$(II,I): NEXT : REM HOLD VALUES FOR DISPLAY
3510 FOR I = 5 TO 7:D1$(I) = LEFT$(L$(II,I),2) + MID$ (L$(II,I),4,2) + RIGHT$(L$(II,I),2): NEXT : REM PACK DATES WITHOUT '/'S
3520 POKE 35,24: POKE 34,1: REM OPEN WINDOW
3530 VTAB 19: HTAB 1: CALL -958
3540 GOSUB 1390:ED = 0:: REM USE INPUT ROUTINE FOR EDIT
3550 IF I <8 THEN FOR I = 1 TO 7:L$(II,I) = T$(II,I): NEXT : GOTO 3580
3560 FOR I = 1 TO 7:T$(II,I) = I$(I): IF L$(II,I) < >T$(II,I) THEN L$(II,I) = T$(II,I):WR = 1: REM WRITE FLAG-CHANGED ITEM
3570 NEXT
3580 I = II
3590 GOTO 3420: REM DO IT AGAIN
3600 REM ** DELETE DATA **
3610 IF VAL(NR$) = 0 THEN GOTO 1070: REM NO DATA MESSAGE
3620 TEXT : HOME :DL = 1:ED = 0:X$ = "**" +MU$(0,4) +" **": GOSUB 410: PRINT : PRINT L$
3630 REM DL=DELETE FLAG
3640 VTAB 20: PRINT L$
3650 HTAB 6: INVERSE : PRINT "<--";: NORMAL : PRINT " ";: INVERSE : PRINT "-->";: NORMAL : PRINT " OR <";: INVERSE : PRINT "RTN";: NORMAL : PRINT "> TO SCROLL"
3660 PRINT : HTAB 2: PRINT "<";: INVERSE : PRINT "D";: NORMAL : PRINT "> TO DELETE ENTRY <";: INVERSE : PRINT "ESC";: NORMAL : PRINT "> TO QUIT";
3670 POKE 35,19: POKE 34,4: HOME : PRINT : GOSUB 3030: REM USE 'SCROLL' ROUTINE FOR DELETEING
3680 IF X$ = CHR$(27) THEN 3830: REM MAIN MENU
3690 REM ** DELETE CHOSEN **
3700 A = PEEK(35):B = PEEK(34):C = PEEK(33):D = PEEK(32):WR = 1
3710 POKE 35,14: POKE 34,7: POKE 33,15: POKE 32,15: HOME
3720 PRINT "**************": HTAB 1: PRINT "*";: HTAB 14: PRINT "*": PRINT "* ";: FLASH : REM 14 *'S
3730 PRINT " DELETION ";: NORMAL : PRINT " *":: PRINT "* IN *": PRINT "* PROGRESS *": PRINT "**************";: REM 5,5 SPACES-14 *'S
3740 FOR X = 1 TO 1000: NEXT
3750 NR = VAL(NR$): IF NR = 1 THEN NR = 0:NR$ = "0": GOTO 3830: REM FINAL DECISION
3760 IF I <NR THEN FOR J = I TO NR -1: FOR K = 1 TO 7:L$(J,K) = L$(J +1,K): NEXT : NEXT :NR = NR -1: GOTO 3780
3770 IF NR = I THEN NR = NR -1
3780 NR$ = STR$(NR)
3790 POKE 35,15: POKE 34,6: POKE 33,16: POKE 32,14: HOME
3800 POKE 35,A: POKE 34,B: POKE 32,D: POKE 33,C
3810 GOTO 3670: REM DO IT AGAIN
3820 REM *FINAL DECISION <ESC>*
3830 IF NOT WR THEN ED = 0:DL = 0: GOTO 430: REM NO CHANGES
3840 TEXT : HOME
3850 VTAB 12: HTAB 7: PRINT "SAVE CHANGES (Y/N) ";: CALL -958: HTAB 27: PRINT "N";: HTAB 27: POKE -16368,0: GET X$: PRINT X$
3860 IF X$ = "Y" OR X$ = CHR$(121) THEN WR = 0: GOTO 1090: REM WRITE ENTIRE FILE
3870 IF X$ = "N" OR X$ = CHR$(110) OR X$ = CHR$(13) THEN DL = 0: HOME : VTAB (12): PRINT TAB( 5)"EDITS CANCELLED - READING FILE": GOSUB 910: GOTO 430
3880 GOTO 3850
3890 REM ** END **
3900 TEXT : HOME : VTAB 10: INPUT "ARE YOU SURE YOU WANT TO QUIT? ";YN$: ON YN$ < >"Y" GOTO 430: POKE 963,0: HTAB 19: PRINT "END": END
3910 REM ** PRINT 80/132 COL **
3920 TEXT : HOME :K = 0: REM COUNTER
3930 IF NOT RF THEN PRINT : GOSUB 910: REM READ DATA FILE
3940 PRINT : PRINT D$;"PR#1"
3950 PRINT CHR$(9); STR$(80 +52 *PR);"N": REM NO SCREEN OUTPUT
3960 PRINT NN$;
3970 PRINT
3980 IF UN = 1 THEN PRINT SPC( 31 +30 *PR)"INCOMPLETE RECORDS ONLY"
3990 IF ALL = 1 THEN PRINT SPC( 31 +30 *PR)"FULL DATA REPORT"
4000 GOSUB 4300: REM LONG LINE
4010 PRINT : PRINT P$(1); SPC( 10);P$(2); SPC( 15);MU$(1,3);
4020 IF NOT PR THEN PRINT SPC( 14 +13 - LEN(MU$(1,3)));"DATE"
4030 IF NOT PR THEN PRINT SPC( 70);P$(3): GOTO 4060
4040 PRINT SPC( 25 - LEN(MU$(1,3)));"COMMENTS"; SPC( 25);"DATE"; SPC( 6);"DATE"; SPC( 6);"DATE"
4050 PRINT SPC( 103);P$(4); SPC( 3)P$(5) SPC( 2)P$(6)
4060 GOSUB 4300: REM LONG LINE
4070 PRINT
4080 IF ALL = 1 AND PR = 1 THEN 4210
4090 IF UN = 1 AND PR = 0 THEN 4120
4100 IF ALL = 1 AND PR = 0 THEN K = 1: GOTO 4120
4110 IF UN = 1 AND PR = 1 THEN 4210
4120 FOR I = 1 TO VAL(NR$)
4130 IF ALL = 1 THEN 4160
4140 IF LEN(L$(I,7)) = 0 THEN K = K +1: GOTO 4160
4150 NEXT : IF K = 0 THEN PRINT TAB( 20 +40 *PR)"NO ITEMS OUTSTANDING...": GOTO 4280
4160 PRINT L$(I,1);
4170 PRINT SPC( 22 - LEN(L$(I,1)))L$(I,2);
4180 PRINT SPC( 25 - LEN(L$(I,2)))L$(I,3);
4190 PRINT SPC( 25 - LEN(L$(I,3)))L$(I,5): IF I < VAL(NR$) THEN NEXT
4200 GOTO 4280: REM END OF REPORT
4210 FOR I = 1 TO VAL(NR$)
4220 IF UN = 1 AND LEN(L$(I,7)) = 0 THEN 4240
4230 IF UN THEN NEXT I: GOTO 4280
4240 PRINT L$(I,1);
4250 FOR J = 2 TO 7
4260 PRINT SPC( L%(J -1) +2 - LEN(L$(I,J -1)))L$(I,J);: NEXT : PRINT
4270 NEXT I: GOTO 4280
4280 PRINT : PRINT "**** END OF REPORT ****"
4290 PRINT : GOSUB 4300: PRINT : PRINT D$;"PR#0": GOSUB 2930: GOTO 2360
4300 FOR I = 1 TO 80 +52 *PR: PRINT "=";: NEXT : RETURN : REM LONG LINE
4310 FA = 128:SP = 160:Q = -16384:A = 1
4320 POKE 34,22: POKE 34,23: POKE 33,1
4330 VTAB 23: HTAB 1: PRINT CHR$(13);: PRINT D$;"PR#1": FOR P = A TO 19
4340 PRINT CHR$(9);"80N": PRINT NN$;
4350 FOR K = 0 TO 2: FOR B = 0 TO 7: ON K <2 OR (K = 2 AND B <4) GOSUB 4360: NEXT B,K: GOTO 4370
4360 PQ = 1024 +128 *B +40 *K: FOR PJ = PQ TO PQ +39:PK = PEEK(PJ):PK = PK +(PK <32) *192:PK = PK +(PK <64) *128:PK = PK +(PK <96) *64:PK = PK +(PK <128) *64:PK = PK +(PK <160) *64: PRINT CHR$(PK);: NEXT PJ: PRINT CHR$(13);: RETURN
4370 PRINT : PRINT : PRINT
4380 POKE -16368,0: PRINT D$;"PR#0"
4390 POKE 35,24: POKE 34,0: POKE 33,40
4400 RETURN
4410 END
4420 REM ** MAIN MENU DATA **
4430 DATA " ENTER DATA","LIST/SEARCH DATA"," EDIT DATA"," DELETE DATA"," QUIT PROGRAM"
4440 DATA 7,12
4450 REM ** ADD DATA MENU **
4460 DATA NAME OF BORROWER,OWNER OF ITEM,ITEM BORROWED,COMMENT,DATE LOANED,RETURN EXPECTED,DATE ITEM RETURNED,RETURN TO LIST/SEARCH MENU
4470 DATA 5,1
4480 REM ** INPUT TABS,LENGTH *
4490 DATA 20,20,17,23,17,23,11,29,22,8,22,8,22,8
4500 REM ** DISK READ MENU **
4510 DATA " SAVE ENTRIES TO DISK",CANCEL ENTRIES-START OVER," MAIN MENU (NO SAVE)"
4520 DATA 8,8
4530 DATA " RETURN TO MAIN MENU"," SEARCH BY DATA FIELD",DISPLAY ALL INCOMPLETES," DISPLAY ALL ENTRIES "
4540 DATA 8,8
4550 DATA 162,0,32,117,253,160,2
4560 DATA 138,145,105,200,169,0
4570 DATA 145,105,200,169,2,145
4580 DATA 105,76,57,213
4590 DATA " SCREEN ONLY",PRINTER-10 CPI (80 COL),PRINTER-17 CPI (132 COL),RETURN TO LIST/SEARCH MENU
4600 DATA 8,8
4610 REM PRINTOUT HEADINGS
4620 DATA "BORROWER ","OWNER "," LOANED "," LOANED","EXPECTED","RETURNED": REM 12,10,10,8,8,8+ CHARACTERS
4630 REM ** ERROR TRAPPING **
4640 TEXT : HOME : CALL -3288:PK = PEEK(222): POKE 216,0: PRINT D$"CLOSE"
4650 X$ = "** ERROR ENCOUNTERED **": GOSUB 410: PRINT : PRINT L$: VTAB 12:
4660 IF PK = 9 THEN PRINT "DISK FULL ERROR";: GOTO 4730
4670 IF PK = 10 THEN PRINT "FILE LOCKED ERROR IN ";: GOTO 4730
4680 IF PK = 6 THEN PRINT "FILE NOT FOUND ERROR ";: GOTO 4730
4690 IF PK = 8 THEN PRINT "I/O ERROR ";: GOTO 4730
4700 IF PK = 11 THEN PRINT "DISK SYNTAX ERROR";: GOTO 4730
4710 IF PK = 4 THEN PRINT "WRITE-PROTECT ERROR ";: GOTO 4730
4720 PRINT "ERROR "PK
4730 PRINT "IN LINE " PEEK(218) + PEEK(219) *256
4740 VTAB 22: HTAB 1: PRINT "PRESS <RETURN> TO CONTINUE...";: POKE -16368,0: GET X$: PRINT
4750 IF PEEK(963) = 0 THEN TEXT : HOME : GOSUB 4770: GOTO 140
4760 ON EF GOTO 180,700,910,1100
4770 INVERSE
4780 X$ = "": FOR I = 1 TO 39:X$ = X$ +" ": NEXT : REM ONE SPACE IN QUOTES
4790 PRINT X$
4800 FOR I = 1 TO 10: VTAB I: HTAB 1: PRINT " ";: HTAB 39: PRINT " ";: NEXT : PRINT
4810 PRINT X$: NORMAL
4820 X$ = "THE NIBBLE REMINDER": VTAB 4: GOSUB 410
4830 X$ = "BY MARK R. CRAVEN": VTAB 5: GOSUB 410
4840 X$ = "COPYRIGHT (C) 1986": VTAB 6: GOSUB 410
4850 X$ = "BY MICROSPARC, INC": VTAB 7: GOSUB 410
4860 X$ = "CONCORD, MA 01742": VTAB 8: GOSUB 410
4870 POKE -16368,0: VTAB 21: PRINT "PRESS <RETURN> TO CONTINUE...";: GET X$: RETURN
4880 NR$ = STR$( VAL(NR$) -T%):T% = 0: GOTO 430
4890 REM ** READ AND POKE IN CURSOR BAR ROUTINE
4900 FOR I = 0 TO 171: READ ML: POKE 768 +I,ML: NEXT I: RETURN
4910 DATA 32,190,222,32,103,221,32,251,230,202,134,2,134,4,32,190,222,32,103,221,32,251,230,202,134,3
4920 DATA 32,190,222,32,103,221,32,251,230,202,134,6,32,190,222,32,103,221,32,251,230,202,134,7,165,4
4930 DATA 32,193,251,164,7,177,40,201,160,208,5,136,16,247,48,19,164,7,177,40,41,63,145,40,136,196
4940 DATA 6,16,245,173,16,192,174,0,192,224,136,240,34,224,149,240,30,224,141,208,241,164,7,177,40,9
4950 DATA 128,145,40,136,196,6,16,245,165,4,56,229,2,133,4,230,4,173,16,192,96,164,7,177,40,9
4960 DATA 128,145,40,136,196,6,16,245,165,4,224,149,240,14,197,2,208,6,165,3,133,4,208,152,198,4
4970 DATA 16,148,197,3,208,6,165,2,133,4,16,138,230,4,208,134,162