140 REM IF A = 1 INPUT MUST BE ALPHANUMERIC, IF A = 0 THEN INPUT MUST BE #'S, IF A = 2 INPUT MUST BE 'BLANK' OR 'X'
150 REM IF ESCAPE THEN ROUTINE WILL CANCEL ITSELF AND CALLING ROUTINE
160 REM ALL ANSWERS RETURNED WILL BE IN AG$
170 AG$ = ""
180 EG = 0: REM FLAG, 1= ESCAPE KEY HIT
190 IF OD$ = U1$ THEN OD$ = "": REM CLEAR DELETE CODE FROM OLD DATA
200 FOR L = 1 TO C +1
210 GOSUB 5980: GET G$
220 IF L <C +1 AND G$ > CHR$(31) THEN 360
230 IF L < >1 THEN 300
240 IF G$ = CHR$(27) THEN EG = 1:L = C +1: GOTO 400: REM ESCAPE
250 IF G$ = CHR$(14) THEN L = C +1:EG = 2:PN = PN +1: IF PN >12 THEN PN = 1: REM CTRL 'N' = NEXT
260 IF G$ = CHR$(14) THEN 400
270 IF G$ = CHR$(16) THEN L = C +1:EG = 2:PN = PN -1: IF PN <1 THEN PN = 12: REM CTRL 'P' = PREVIOUS
280 IF G$ = CHR$(16) THEN 400
290 IF G$ = CHR$(9) THEN L = C +1:AG$ = CHR$(9): GOTO 400: REM <CTRL>'I'=MOVE UP A LINE
300 IF G$ = CHR$(27) THEN AG$ = U1$:L = C +1: GOTO 400: REM ESCAPE ERASE LINE
310 IF G$ = CHR$(13) THEN L = C +1: GOTO 400: REM <RET>
320 IF G$ = CHR$(8) AND LEN(AG$) = 1 THEN CALL -1008: PRINT U1$;: CALL -1008:AG$ = "":L = 1: GOTO 210: REM BACKSPACE AND ERASE IF AT BEGINNING OF INPUT
330 IF G$ = CHR$(8) AND LEN(AG$) >1 THEN CALL -1008: PRINT U1$;: CALL -1008:AG$ = LEFT$(AG$,( LEN(AG$) -1)):L = L -1: GOTO 210: REM BACKSPACE AND ERASE IF NOT AT BEGINNING OF INPUT
340 IF L = C +1 AND G$ < > CHR$(13) THEN PRINT CHR$(7);: GOTO 210
350 IF G$ = CHR$(21) THEN IF MID$ (OD$,L,1) < >"" THEN G$ = MID$ (OD$,L,1): GOTO 390: REM RIGHT ARROW
360 IF A = 2 AND G$ < >" " AND G$ < >"X" AND G$ < > CHR$(120) THEN 210: REM BLANK & 'X' ONLY
370 IF A = 1 AND (G$ <" " OR G$ > CHR$(126)) THEN 210: REM ANY VISIBLE CHAR
380 IF A = 0 AND (G$ <"0" OR G$ >"9") AND G$ < >"." THEN 210: REM NUMBERS ONLY
390 AG$ = AG$ +G$: PRINT G$;
400 NEXT
410 IF EG = 2 THEN POP : GOTO 2290
420 IF EG = 1 THEN GOSUB 5170: POP : RETURN : REM ESC KEY, FIND LAST PGM & SET NP(TN)
430 RETURN
440 REM
450 REM *** CHANGE PAGE ONLY ROUTINE ***
460 REM
470 REM IF ESCAPE THEN ROUTINE WILL CANCEL ITSELF AND CALLING ROUTINE
480 GET G$
490 IF G$ = CHR$(27) THEN POP : RETURN : REM ESCAPE
500 IF G$ = CHR$(14) THEN PN = PN +1: GOTO 530
510 IF G$ = CHR$(16) THEN PN = PN -1: GOTO 530
520 GOTO 480
530 IF PN >12 THEN PN = 1
540 IF PN <1 THEN PN = 12
550 RETURN : REM LOOP TO DISPLAY ONLY FORM
560 REM
570 REM *** LOAD FROM FILE ROUTINE
580 REM
590 IF FM$ = "" THEN FM$ = "TAPE.LIB.DATA": REM SET DEFAULT FILE NAME
600 IF DN$ = "" OR DN$ = CHR$(13) THEN DN$ = "1": REM DEFAULT DRIVE NUMBER
610 PRINT D$;"UNLOCK";FM$;",D";DN$
620 PRINT D$;"OPEN";FM$;",D";DN$
630 PRINT D$;"READ";FM$
640 INPUT TA
650 FOR I = 1 TO TA
660 INPUT HR$(I): INPUT NP(I): INPUT ET$(I)
670 INPUT TP$(I,0,1)
680 VTAB 23: HTAB 22: CALL -868: PRINT TP$(I,0,1)
690 FOR K = 1 TO NP(I)
700 INPUT TP$(I,1,K)
710 B$ = ""
720 GET NT$: IF NT$ = CHR$(13) THEN 735
730 B$ = B$ +NT$: GOTO 720
735 TP$(I,2,K) = B$:B$ = ""
740 GET NT$: IF NT$ = CHR$(13) THEN 750
745 B$ = B$ +NT$: GOTO 740
750 TP$(I,3,K) = B$
760 NEXT K,I
770 PRINT
780 PRINT D$;"CLOSE"
790 RETURN
800 REM
810 REM *** WRITE TO FILE ROUTINE ***
820 REM
830 REM FM$= FILE NAME
840 PRINT
850 PRINT D$;"OPEN";FM$;",D";DN$
860 PRINT D$;"CLOSE";FM$
870 PRINT D$;"DELETE";FM$: REM REMOVE OLD FILE SO WON'T HAVE PARTS OF IT IN THIS COPY
1050 ST = PEEK(37): VTAB 22: HTAB 1: PRINT "ENTER NUMBERS AND CAPITAL LETTERS ONLY"
1060 VTAB ST: HTAB 18: REM PUT CURSOR ON ENTRY LINE
1070 TN$ = "":EG = 0: REM FLAG, 1= ESCAPE KEY HIT
1080 FOR I = 1 TO 4
1090 GET T$
1100 IF T$ = CHR$(13) AND TN$ < >"" THEN I = 4: GOTO 1170: REM END IF <RETURN>
1110 IF T$ = CHR$(27) THEN EG = 1:I = 4: GOTO 1170: REM ESCAPE
1120 IF T$ = CHR$(8) AND LEN(TN$) = 1 THEN CALL -1008: PRINT U1$;: CALL -1008:TN$ = "":I = 1: GOTO 1090: REM BACKSPACE AND ERASE IF AT BEGINNING OF INPUT
1130 IF T$ = CHR$(8) AND LEN(TN$) >1 THEN CALL -1008: PRINT U1$;: CALL -1008:TN$ = LEFT$(TN$,( LEN(TN$) -1)):I = I -1: GOTO 1090: REM BACKSPACE AND ERASE IF NOT AT BEGINNING OF INPUT
1140 IF I = 4 AND T$ < > CHR$(13) THEN PRINT CHR$(7);: GOTO 1090: REM MUST BE RETURN AFTER 3 CHAR
1150 IF (T$ <"0" OR T$ >"9") AND (T$ <"A" OR T$ >"Z") THEN 1090: REM CHAR. ONLY
1160 PRINT T$;:TN$ = TN$ +T$
1170 NEXT I
1180 IF EG = 1 THEN POP : RETURN : REM ESCAPE
1190 RETURN
1200 REM
1210 REM *** SETUP ROUTINE ***
1220 REM
1230 D$ = CHR$(4)
1240 UL$ = "":BL$ = "": FOR I = 1 TO 51:UL$ = UL$ + CHR$(95):BL$ = BL$ +" ": NEXT : REM UNDERLINE CHAR
1250 U1$ = CHR$(95):U3$ = LEFT$(UL$,3):U4$ = LEFT$(UL$,4): REM UNDERLINES
1260 TT = 30: REM TOTAL POSSIBLE NUMBER OF TAPES
1270 DIM TP$(TT +1,3,12): REM NUMBER,TAPE NUMBER/START CNT/TITLE/SAVE?,PGM#
1280 REM IF 'SAVE?',1 = "L" THEN TAPE IS LOCKED
1290 REM CHARACTER TAPE NUMBER STORED AT TP$(TT,0,1)
1300 TP$(0,0,1) = "-1": REM SET FOR END CHECK
1310 DIM ET$(TT +1): REM END COUNT FOR EACH TAPE
1320 DIM HR$(TT +1): REM HRS LEFT ON EACH TAPE
1330 DIM NP(TT +1): REM # OF PGMS ON EACH TAPE
1340 SA$ = "MDBSL": REM INITIALS FOR SAVE? COLUMNS (MUST BE 5)
1350 DIM SR(TT): REM SORT ARRAY
1360 PRINT CHR$(12); CHR$(21): REM 80 COLUMN CARD OFF
1370 GOSUB 5930: REM TITLE PAGE
1380 GOSUB 4690: REM GET RETURN KEY
1390 GOSUB 5600: REM GET FILE NAME & RESTART ENTRY POINT
1400 VTAB 15: HTAB 10: PRINT "CLEARING DATA ARRAYS": FOR I = O TO TT:SR(I) = I: NEXT : REM INITSORTARRAY
1410 FOR I = 0 TO TA +1:ET$(I) = "":HR$(I) = "":NP(I) = 0: FOR J = 0 TO 3: FOR K = 0 TO 12:TP$(I,J,K) = "": NEXT K,J,I:TP$(0,0,1) = "-1": REM NULLS AND ZEROS IN ARRAYS
1420 TA = 0: REM ACTUAL NUMBER OF TAPES
1430 VTAB 19
1440 PRINT SPC( 11);: INVERSE : PRINT "LOADING DATA FILE": NORMAL
1450 VTAB 23: HTAB 16: PRINT "TAPE: "
1460 ONERR GOTO 5310: REM CHECK FOR NO FILE
1470 GOSUB 590: REM LOAD DATA FROM DISK
1480 POKE 216,0: REM SET NORMAL ERROR HANDLER
1490 REM
1500 REM *** MAIN MENU ***
1510 REM
1520 POKE 34,0: POKE 35,24: REM RESET WINDOWS
1530 TEXT : HOME :TL$ = "MAIN MENU ": REM 9 SPACES
1540 REM
1550 INVERSE : HTAB 15: PRINT "MAIN MENU": NORMAL
1560 VTAB 6
1570 PRINT "--> 1) EDIT/ADD INFO"
1580 PRINT
1590 PRINT " 2) SEARCH BY TITLE": REM 4 SPACES HERE & BELOW
1600 PRINT
1610 PRINT " 3) LOCK/UNLOCK A TAPE"
1620 PRINT
1630 PRINT " 4) PRINT LIBRARY LIST"
1640 PRINT
1650 PRINT " 5) ADD/DELETE TAPE ID LABEL"
1660 PRINT
1670 PRINT " 6) SAVE TO DISK & QUIT"
1680 PRINT
1690 PRINT " 7) QUIT WITHOUT SAVING"
1700 SL = 1: IF TA = 0 THEN FOR I = 1 TO 4: GOSUB 1850: NEXT : REM SET MENU POINTER AND SELECT #
1710 VTAB 24: PRINT " SELECT BY NUMBER OR USE ARROW KEYS";
1720 VTAB 22: HTAB 7
1730 PRINT "SELECT >";
1740 GET AN$: PRINT AN$
1750 IF AN$ = CHR$(21) OR AN$ = CHR$(10) THEN GOSUB 1850: GOTO 1800: REM DOWN ARROW
1760 IF AN$ = CHR$(8) OR AN$ = CHR$(11) THEN GOSUB 1870: GOTO 1800: REM UP ARROW
1770 IF AN$ = CHR$(13) THEN AN$ = STR$(SL): REM SELECT
1780 IF TA = 0 AND AN$ = "7" THEN GOSUB 4390: REM NO DATA TO STORE
1790 IF TA = 0 AND AN$ < >"5" THEN HOME : VTAB 5: HTAB 7: PRINT "THERE ARE NO TAPES ON FILE": GOSUB 4690: GOTO 1520
1800 IF AN$ <"1" OR AN$ >"7" THEN VTAB 22: HTAB 15: CALL -868: GOTO 1740
1810 ON VAL(AN$) GOSUB 1920,2860,3080,3250,3740,4360,5960
1820 GOTO 1520: REM END OF MAIN PGM
1830 REM
1840 REM MOVE ARROW ROUTINE
1850 VTAB (4 +2 *SL): PRINT " ":SL = SL +1: IF SL >7 THEN SL = 1
1860 GOTO 1880
1870 VTAB (4 +2 *SL): PRINT " ":SL = SL -1: IF SL <1 THEN SL = 7
1880 VTAB (4 +2 *SL): PRINT "-->": RETURN
1890 REM
1900 REM *** EDIT/ADD INFO ROUTINE ***
1910 REM
1920 LC$ = "": REM PAST LOCK/UNLOCK DATA
1930 POKE 34,0: POKE 35,24: REM RESET WINDOWS
1940 HOME : HTAB 15: PRINT "ESCAPE FOR MAIN MENU": INVERSE : VTAB 3: HTAB 9: PRINT "EDIT/ADD INFO ": NORMAL
1950 REM
1960 GOSUB 4530: REM PRINT TAPES AVAILABLE
1970 ST = PEEK(37): IF LC$ < >"" THEN VTAB (ST +6): CALL -868: PRINT LC$:LC$ = "": POKE 37,ST: REM PUTLASTDATA ON SCREEN
1980 GOSUB 1030: REM INPUT
1990 GOSUB 4450: REM SEE IF THIS IS VALID # AND SET 'TN'
2000 IF FLAG = 1 THEN LC$ = "NOT IN LIBRARY LISTING": GOTO 1930
2010 PN = 1: REM PROGRAM # POINTER
2020 HOME : VTAB 3: PRINT
2030 TL$ = "EDIT/ADD INFO ": IF TP$(SR(TN),3,1) = "L" THEN 2080: REM TAPE IS LOCKED/ 5 SPACES
2040 GOSUB 2130: REM CHANGE INSTRUCTIONS
2050 GOSUB 2290: REM FILL IN FORM
2060 GOTO 2100: REM 5 SPACES
2070 REM LOCKED FILE DISPLAY
2080 GOSUB 2210: REM LOCKED INSTRUCTIONS
2090 GOSUB 2790: REM DISPLAY ONLY DATA /5 SPACES
2100 TL$ = "MAIN MENU ": GOSUB 5990: GOTO 1930: REM END OF EDIT/ADD ROUTINE (EXIT IS ESCAPE-> POP /9 SPACES
2170 VTAB 3: HTAB 1: POKE 34,2: POKE 35,18: REM SET WINDOWS
2180 RETURN
2190 REM
2200 REM LOCKED INSTRUCTIONS
2210 VTAB 1: HTAB 15: PRINT "ESCAPE FOR "TL$;: VTAB 20: HTAB 11: INVERSE : PRINT "TAPE ";TP$(SR(TN),0,1);" IS LOCKED": NORMAL : PRINT
2220 PRINT "CONTROL-N = NEXT PROGRAM"
2230 PRINT "CONTROL-P = PREV PROGRAM"
2240 VTAB 3: HTAB 1: POKE 34,2: POKE 35,18: REM SET WINDOWS
2250 RETURN
2260 REM
2270 REM *** FILL IN FORM ROUTINE ***
2280 REM
2290 HOME : GOSUB 4200: REM DISPLAY FORM
2300 GOSUB 4970: REM FILL FORM
2310 REM
2320 REM GET START CNT
2330 OD$ = TP$(SR(TN),1,PN): REM SET OLD DATA
2340 C = 4:A = 0: GOSUB 170
2350 IF AG$ = "" THEN 2420: REM IF <RET> THEN LEAVE 'AS IS'
2360 IF AG$ = CHR$(9) THEN PN = PN -1: IF PN <1 THEN PN = 12: REM <CTRL>I
2370 IF AG$ = CHR$(9) THEN HOME : GOSUB 4200: GOSUB 4970: GOTO 2330
2380 TP$(SR(TN),1,PN) = AG$: HOME : GOSUB 4200: GOSUB 4970: REM STORE DATA AND REPRINT SCREEN
2390 IF AG$ = U1$ THEN HTAB 14: GOTO 2330: REM LINE ERASED START OVER
2400 IF VAL(TP$(SR(TN),1,PN)) = > VAL(ET$(SR(TN))) THEN ET$(SR(TN)) = "":HR$(SR(TN)) = "": REM DROP LAST CNT & HRS. LEFT IF NEW START CNT IS HIGHER THEN END CNT
2410 REM
2420 REM GET SHOW TITLE
2430 OD$ = TP$(SR(TN),2,PN): REM SET OLD DATA
2440 C = 51:A = 1: VTAB 9: HTAB 17: GOSUB 170
2450 IF AG$ = "" THEN 2500
2460 IF AG$ = CHR$(9) THEN VTAB 7: HTAB 14: GOTO 2330: REM UP A LINE
2470 TP$(SR(TN),2,PN) = AG$: HOME : GOSUB 4200: GOSUB 4970
2480 IF AG$ = U1$ THEN 2430: REM LINE ERASED START OVER
2490 REM
2500 REM GET SAVE?
2510 OD$ = TP$(SR(TN),3,PN): REM SET OLD DATA
2520 C = 5:A = 2: VTAB 12: HTAB 10: GOSUB 170
2530 IF AG$ = "" THEN 2580
2540 IF AG$ = CHR$(9) THEN 2430: REM UP A LINE
2550 TP$(SR(TN),3,PN) = AG$: HOME : GOSUB 4200: GOSUB 4970
2560 IF AG$ = U1$ THEN 2510: REM LINE ERASED START OVER
2570 REM
2580 REM GET HOURS LEFT
2590 OD$ = HR$(SR(TN)): REM SET OLD DATA
2600 C = 3:A = 0: VTAB 14: HTAB 15: GOSUB 170
2610 IF AG$ = "" THEN 2660
2620 IF AG$ = CHR$(9) THEN 2510: REM UP A LINE
2630 HR$(SR(TN)) = AG$: HOME : GOSUB 4200: GOSUB 4970
2640 IF AG$ = U1$ THEN 2590: REM LINE ERASED START OVER
2650 REM
2660 REM GET END COUNT
2670 OD$ = ET$(SR(TN)): REM SET OLD DATA
2680 C = 4:A = 0: VTAB 16: HTAB 14: GOSUB 170
2690 IF AG$ = "" THEN 2740
2700 IF AG$ = CHR$(9) THEN 2590: REM UP A LINE
2710 IF VAL(AG$) >1 THEN IF VAL(AG$) < VAL(TP$(SR(TN),1,PN)) THEN AG$ = U1$: PRINT CHR$(7): REM END COUNT MUST BE LARGER THEN START CNT
2720 ET$(SR(TN)) = AG$
2730 IF AG$ = U1$ THEN HOME : GOSUB 4200: GOSUB 4970: GOTO 2670: REM LINE ERASED START OVER
2740 PN = PN +1: IF PN >12 THEN PN = 1
2750 GOTO 2290: REM END OF FILL FORM ROUTINE EXIT IS ESCAPE -> POP
2760 REM
2770 REM *** DISPLAY ONLY ROUTINE ***
2780 REM
2790 HOME : GOSUB 4200: REM DISPLAY FORM
2800 GOSUB 4970: REM FILL FORM
2810 VTAB 23: HTAB 26: GOSUB 480: REM GET CHANGE PAGE INPUT
2820 GOTO 2790: REM EXIT IS ESCAPE
2830 REM
2840 REM *** SEARCH BY TITLE ROUTINE ***
2850 REM
2860 LC$ = "": REM ERROR MSGS
2870 HOME : INVERSE : VTAB 3: HTAB 12: PRINT "SEARCH BY TITLE";: NORMAL
2880 PRINT : VTAB 5: PRINT "SEARCH FOR TITLE:": PRINT : PRINT UL$: VTAB 20: HTAB 13: PRINT "ENTER A TITLE": PRINT : HTAB 19: PRINT "OR": PRINT : HTAB 7: PRINT "THE FIRST PART OF A TITLE";: VTAB 7: HTAB 1
2890 ST = PEEK(37): IF LC$ < >"" THEN VTAB ST +6: CALL -868: PRINT LC$: VTAB ST +8: PRINT "PRESS RETURN TO CONTINUE";: GET Z$: PRINT : VTAB ST +8: PRINT BL$: VTAB ST +6: PRINT LEFT$(BL$, LEN(LC$)):LC$ = "": VTAB ST +1: REM DISPLAY ERR MSG
2900 TN = 0:OD$ = "":C = 51:A = 1:TL$ = "MAIN MENU ": GOSUB 170: REM 9 SPACES
2910 IF AG$ = "" OR AG$ = U1$ THEN LC$ = "INVALID CHARACTER": GOTO 2880
2920 FOR I = 1 TO TA
2930 FOR J = 1 TO NP(SR(I))
2940 IF AG$ = LEFT$(TP$(SR(I),2,J), LEN(AG$)) THEN TN = I:PN = J:TN$ = TP$(SR(I),0,1):I = TA:J = 12
2950 NEXT J: NEXT I: HOME
2960 IF TN = 0 THEN LC$ = "NO MATCH TO " + CHR$(34) +AG$ + CHR$(34): GOTO 2880
2970 TL$ = "SEARCH BY TITLE ": IF TP$(SR(TN),3,1) = "L" THEN 3020: REM TAPE IS LOCKED/ 3 SPACES
2980 GOSUB 2130: REM INSTRUCTIONS
2990 GOSUB 2290: REM CHANGE FORM?
3000 GOTO 3040
3010 REM LOCKED FILE DISPLAY
3020 GOSUB 2190: REM LOCKED INSTRUCTIONS
3030 GOSUB 2790: REM DISPLAY ONLY DATA
3040 POKE 35,24: HOME : GOSUB 5990: GOTO 2880: REM GET NEXT,END OF SEARCH ROUTINE (EXIT IS ESCAPE->POP
3050 REM
3060 REM *** LOCK/UNLOCK ROUTINE ***
3070 REM
3080 LC$ = "": REM PAST LOCK/UNLOCK DATA
3090 HOME : HTAB 15: PRINT "ESCAPE FOR MAIN MENU ": INVERSE : VTAB 3: HTAB 12: PRINT "LOCK/UNLOCK TAPE";: NORMAL
3100 PRINT : GOSUB 4530: REM DISPLAY TAPE NUMBERS
3110 ST = PEEK(37): IF LC$ < >"" THEN VTAB (ST +6): CALL -868: PRINT LC$:LC$ = "": POKE 37,ST: REM PUT LAST DATA ON SCREEN
3120 GOSUB 1030: REM GET INPUT
3130 GOSUB 4450: REM SEE IF THIS IS VALID # AND SET 'TN'
3140 IF FLAG = 1 THEN LC$ = "NOT IN LIBRARY LISTING": GOTO 3090
3150 IF TP$(SR(TN),3,1) = "L" THEN TP$(SR(TN),3,1) = "":LC$ = "TAPE NUMBER " +TP$(SR(TN),0,1) +" IS UNLOCKED": GOTO 3090
3160 TP$(SR(TN),3,1) = "L": REM LOCK TAPE
3170 FOR I = 2 TO 12
3180 TP$(SR(TN),3,I) = "": REM CLEAR REMAINING SAVE INDICATORS
3190 NEXT
3200 LC$ = "TAPE NUMBER " +TP$(SR(TN),0,1) +" IS LOCKED": GOTO 3090
3210 REM
3220 REM *** PRINTER SUBROUTINE ***
3230 REM
3240 REM PRINTER SETUP CODES ARE FOR OKIDATA 92/93 PRINTER
3250 POKE -16368,0:PF = 0: REM CLEAR KEYBOARD STROBE & PRINTER STOP FLAG
3260 HOME : VTAB 5: HTAB 12: INVERSE : PRINT "TURN PRINTER ON": NORMAL
3270 PRINT D$;"PR#1": REM CHECK IF PRINTER IS ON
3280 PRINT CHR$(24): REM RESET PRINTER TO DEFAULT STATE
3290 PRINT D$;"PR#0"
3300 HOME : VTAB 10: HTAB 7: PRINT "BE SURE PRINTER IS ON-LINE": VTAB 12: HTAB 4: PRINT "RETURN TO PRINT, ESCAPE TO CANCEL";: GET Z$: PRINT : ON Z$ = CHR$(27) GOTO 3700: HOME : VTAB 5: CALL -868: HTAB 13: INVERSE : PRINT "PRINTING DATA": NORMAL
5400 CALL -10621: GOTO 1390: REM CLEAR STACK AND RESTART
5410 REM
5420 REM *** ERROR HANDLER WRITE ***
5430 REM
5440 POKE 216,0: REM SET NORMAL ERROR HANDLER
5450 PRINT D$;"CLOSE"
5460 EC = PEEK(222): REM GET ERROR CODE
5470 IF EC = 4 OR EC = 8 OR EC = 9 OR EC = 10 THEN HOME : VTAB 15: INVERSE : PRINT CHR$(7);: GOSUB 5520: PRINT CHR$(7): NORMAL : PRINT : HTAB 15: PRINT "FIX DISK &": GOSUB 4690: CALL -3288: POP : POP : GOTO 1520: REM RESTART
5480 RESUME : REM GIVE PROBLEM TO REGULAR ERROR HANDLER
5490 REM
5500 REM *** ERROR PRINT ROUTINE ***
5510 REM
5520 IF EC = 4 THEN HTAB 10: PRINT "DISK WRITE PROTECTED";: GOTO 5560
5530 IF EC = 8 THEN HTAB 15: PRINT "I/O ERROR";: GOTO 5560
5540 IF EC = 9 THEN HTAB 15: PRINT "DISK FULL";: GOTO 5560
5550 IF EC = 10 THEN HTAB 14: PRINT "FILE LOCKED";: GOTO 5560
5560 RETURN
5570 REM
5580 REM *** ENTER FILE NAME ROUTINE ***
5590 REM
5600 HOME :LC$ = "": REM ERROR LINE
5610 VTAB 5: PRINT "ENTER DRIVE # FOR DATA FILE (1/2) >";: INVERSE : PRINT "1";: NORMAL : HTAB 36: GET DN$: PRINT DN$:DN = VAL(DN$): IF DN$ = CHR$(13) THEN DN = 1
5620 IF DN <1 OR DN >2 THEN VTAB ( PEEK(37)): CALL -868: GOTO 5610
5630 VTAB 10: HTAB 1: CALL -958: REM CLEAR SCREEN CURSOR TO BOTTOM
5640 PRINT "ENTER DATA FILE NAME: "; LEFT$(UL$,15)
5650 VTAB 18: CALL -868: INVERSE : PRINT LC$: NORMAL
5660 VTAB 20: PRINT "TYPE ? TO SEE CATALOG": PRINT
5670 PRINT "<RETURN> FOR DEFAULT 'TAPE.LIB.DATA'"
5680 VTAB 10: HTAB 23: REM PUT CURSOR ON BEGINNING OF LINE
5690 FM$ = "": REM CLEAR FILE NAME
5700 FOR I = 1 TO 16
5710 GET T$
5720 IF T$ = "?" THEN PRINT T$:I = 16: GOTO 5810
5730 IF T$ = CHR$(13) THEN I = 16: GOTO 5810: REM END IF <RETURN>
5740 IF T$ = CHR$(8) AND LEN(FM$) = 1 THEN CALL -1008: PRINT U1$;: CALL -1008:FM$ = "":I = 1: GOTO 5710: REM BACKSPACE AND ERASE IF AT BEGINNING OF INPUT
5750 IF T$ = CHR$(8) AND LEN(FM$) >1 THEN CALL -1008: PRINT U1$;: CALL -1008:FM$ = LEFT$(FM$,( LEN(FM$) -1)):I = I -1: GOTO 5710: REM BACKSPACE AND ERASE IF NOT AT BEGINNING OF INPUT
5760 IF I = 16 AND T$ < > CHR$(13) THEN PRINT CHR$(7);: GOTO 5710: REM MUST BE RETURN AFTER 15 CHAT.
5770 IF I = 1 AND (T$ <"A" OR T$ >"Z") THEN 5710: REM FIRST CHAR MUST BE ALPHA.
5780 IF T$ = "," THEN 5710: REM CAN NOT HAVE COMMA
5790 IF T$ <"!" OR T$ >"^" THEN 5710: REM CHAR. ONLY
5800 PRINT T$;:FM$ = FM$ +T$
5810 NEXT I
5820 IF T$ = "?" THEN 5860
5830 IF FM$ = "" THEN VTAB 10: HTAB 23: PRINT "TAPE.LIB.DATA"
5840 VTAB 12: HTAB 1: CALL -958: REM CLEAR SCREEN CURSOR TO BOTTOM