home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
CATLOG
/
CATLA10.LBR
/
CATLA.BZS
/
CATLA.BAS
Wrap
BASIC Source File
|
2000-06-30
|
17KB
|
597 lines
00010 TRONB : REM ALLOW USER TO STOP PROGRAM
00020 REM PROGRAM CATLA.BAS, CREATES LBR/ARK/ARC CATALOG
00030 REM
00040 REM WRITTEN BY SAUL G. LEVY, TUCSON, ARIZONA, 12/20/87
00050 REM LAST CHANGED 5/5/88
00060 REM COPYRIGHT (C) SAUL G. LEVY 1988
00070 REM
00080 REM SEE CATLA.DOC AND THE MENU INFORMATION BELOW.
00090 REM LBR MEMBERS WERE 1ST GIVEN BY SD114 (OR SO) AND ARK/ARC BY SD125
00100 REM
00110 REM
00120 REM FOR ADD ENTRIES (SORTED) PLUS SECTION OF MASTLA.CAT,
00130 REM OR ONE LIST PAGE (37+1 BYTES EACH)
00140 CLEAR 4560 : REM 4560 MINIMUM, 24K (24576) IN .COM
00150 NumIndex=MEM/38 : REM # OF ENTRIES
00160 REM
00170 REM DIMENSIONS
00180 DIM TEXT$, 40 DUM$, 10 FDIR$, 13 FPT$
00190 DIM 12 FCAT$, FTMP$, FBAK$, MemberNAME$, DISKNAME$, LBRARKNAME$
00200 DIM 11 DISKNAME2$, 3 DISKNAME3$, Point(57)
00210 REM
00220 REM FILES
00230 FDIR$="B:DISK.DIR" : FCAT$="A:MASTLA.CAT" : FTMP$="A:MASTLA.TMP"
00240 FBAK$="A:MASTLA.BAK" : FPT$="A:POINTER.FIL"
00250 REM
00260 REM TURN OFF ERROR HANDLING SINCE WE DON'T KNOW THE NUMBER OF RECORDS
00270 ON ERROR GOSUB 65535
00280 REM
00290 SIZE=12 : REM TEXT$ POINTER
00300 PtOffset=33 : REM ASCII POINTER OFFSET (!=0, Z=57)
00310 REM
00320 REM MAIN MENU
00330 CLS
00340 PRINT "Program CATLA, creates MASTLA.CAT from DISK.DIR files"
00350 PRINT
00360 PRINT
00370 PRINT "Only LBR/ARK/ARC and the member files will be cataloged! Super"
00380 PRINT "Directory's DISK.DIR files are the input. Run SD on each logged-"
00390 PRINT "in, default drive disk (SD $AFL). SD ? for help"
00400 PRINT
00410 PRINT "The -DISKNAM.nnn must also exist and be in DISK.DIR! It will"
00420 PRINT "have an entry too"
00430 PRINT
00440 PRINT "MASTLA.CAT must be on drive A:, DISK.DIRs on B:"
00450 PRINT
00460 PRINT
00470 PRINT "[A]dd/Update [D]elete"
00480 PRINT "[L]ist Options Submenu [P]ointer Create"
00490 PRINT
00500 INPUT "Choose one (CR=Quit): ";DUM$
00510 IF LEN(DUM$)=0 THEN END
00520 DUM$=UCASE$(DUM$)
00530 IF DUM$="A" THEN "ADD"
00540 IF DUM$="D" THEN "DELETE"
00550 IF DUM$="P" THEN "POINTER"
00560 IF DUM$<>"L" THEN RUN : REM RESTART PROGRAM
00570 PRINT
00580 PRINT
00590 PRINT
00600 PRINT "List Options Submenu:"
00610 PRINT
00620 PRINT "[D]isk Names [L]BR/ARK/ARC Names [S]elected"
00630 PRINT
00640 INPUT "Choose one (CR=Entire File): ";DUM$
00650 DUM$=UCASE$(DUM$)
00660 DISKNAME$="" : DISKNAME2$="" : DISKNAME3$="" : DUM=0 : DUM1=0 : START=-1
00670 IF DUM$="D" THEN DISKNAME$="DISKNAME" : START=26 : GOTO "PRINTER"
00680 LONG IF DUM$="L"
00690 DISKNAME$="LBR" : DISKNAME2$="ARK" : DISKNAME3$="ARC" : START=10
00700 ENDIF
00710 LONG IF DUM$="S"
00720 START=0
00730 INPUT "Enter ONE character for START (!-Z): ";DISKNAME$
00740 IF LEN(DISKNAME$)<>1 THEN 730
00750 DISKNAME$=UCASE$(DISKNAME$)
00760 PRINT "Enter ONE character for STOP (";DISKNAME$;
00770 INPUT "-Z): ";DISKNAME2$
00780 IF LEN(DISKNAME2$)<>1 THEN 760
00790 DISKNAME2$=UCASE$(DISKNAME2$)
00800 DUM=ASC(DISKNAME$) : DUM1=ASC(DISKNAME2$)
00810 IF DUM>DUM1 THEN PRINT "EQUAL or GREATER!" : GOTO 760
00820 ENDIF
00830 IF LEN(DUM$)>0 AND START<0 THEN 640
00840 REM
00850 "PRINTER"
00860 REM
00870 PRINT
00880 INPUT "Printer output (Y, CR=N): ";DUM$
00890 DUM$=UCASE$(DUM$)
00900 Device=0 : Page=46 : REM TO TERMINAL, ENTRIES/PAGE
00910 IF DUM$="Y" THEN Device=128 : REM TO PRINTER?
00920 PRINT
00930 ROUTE Device : REM SET OUTPUT
00940 LONG IF START<=0 : REM 2 COLUMNS
00950 IF Device THEN Page=120
00960 GOTO "LIST"
00970 XELSE
00980 Page=69 : REM TO TERMINAL, 3 COLUMNS
00990 IF Device THEN Page=180
01000 GOTO "SPECIAL LIST"
01010 ENDIF
01020 REM
01030 REM
01040 "ADD" : REM ADD/UPDATE ROUTINE
01050 REM
01060 REM
01070 REM OPEN DISK.DIR
01080 OPEN "I",1,FDIR$
01090 IF ERROR=259 THEN ERROR=0 : GOTO "FILE ERROR"
01100 REM
01110 N=0 : REM # OF INDEX$ RECORDS FROM DISK.DIR
01120 Done=0 : REM EOF FLAG
01130 DISKNAME$="" : DISKNAME2$=""
01140 REM
01150 "READ DISK.DIR"
01160 REM
01170 REM READ HEADER RECORDS (HEADER AT END IF - 1ST CHARACTER)
01180 LINEINPUT#1,TEXT$
01190 LONG IF ERROR=257
01200 ERROR=0
01210 DUM=INSTR(1,TEXT$,CHR$(26)) : REM REMOVE EOF AT END OF DISK.DIR
01220 IF DUM>0 THEN TEXT$=LEFT$(TEXT$,DUM-1)
01230 CLOSE
01240 Done=1
01250 ENDIF
01260 PRINT TEXT$
01270 IF Done THEN "MASTLA CREATE"
01280 REM
01290 REM IF -DISKNAM, SAVE IT
01300 IF INSTR(1,TEXT$,"-") THEN DISKNAME$=LEFT$(TEXT$,SIZE) : GOSUB
"DISK NAME"
01310 REM
01320 REM FIND 1ST LBR/ARK/ARC FILE
01330 IF INSTR(1,TEXT$,"Library directory") THEN "SAVE FILENAME"
01340 IF INSTR(1,TEXT$,"Archive directory") THEN "SAVE FILENAME"
01350 GOTO "READ DISK.DIR"
01360 REM
01370 "SAVE FILENAME"
01380 REM
01390 REM -DISKNAME EXISTS?
01400 IF DISKNAME$="" THEN "FILE ERROR"
01410 REM
01420 REM PUT LBR/ARK/ARC FILE NAME IN INDEX$
01430 START=INSTR(1,TEXT$,".")
01440 LBRARKNAME$=MID$(TEXT$,START-8,SIZE)
01450 DUM$=LBRARKNAME$+","+DISKNAME2$+","+LBRARKNAME$
01460 GOSUB "INDEX$ INSERT"
01470 REM
01480 "READ ENTRIES"
01490 REM
01500 START=1 : REM TEXT$ POINTER
01510 LINEINPUT#1,TEXT$
01520 IF ERROR=257 THEN ERROR=0 : CLOSE : GOTO "MASTLA CREATE"
01530 PRINT TEXT$
01540 IF TEXT$="" THEN "READ DISK.DIR"
01550 DUM=INSTR(1,TEXT$,"++ Not a lib") : DUM1=INSTR(1,TEXT$,"++ Not an ar")
01560 IF DUM OR DUM1 THEN "READ DISK.DIR"
01570 REM
01580 "SAVE ENTRIES"
01590 REM
01600 MemberNAME$=MID$(TEXT$,START,SIZE)
01610 DUM$=MemberNAME$+","+DISKNAME2$+","+LBRARKNAME$
01620 GOSUB "INDEX$ INSERT"
01630 REM
01640 REM ANOTHER MEMBER?
01650 START=INSTR(START,TEXT$,":")
01660 IF START=0 THEN "READ ENTRIES"
01670 START=START+2
01680 GOTO "SAVE ENTRIES"
01690 REM
01700 "MASTLA CREATE"
01710 REM
01720 REM
01730 REM -DISKNAME EXISTS?
01740 IF DISKNAME$="" THEN "FILE ERROR"
01750 REM
01760 REM ON DRIVE A:?
01770 CLOSE : REM DISK.DIR/CREATION DONE
01780 PRINT
01790 PRINT "Reading MASTLA.CAT"
01800 OPEN "I",1,FCAT$
01810 IF ERROR=0 THEN "OPEN OUTPUT" : REM EXISTS
01820 ERROR=0
01830 REM
01840 REM NOT FOUND, CREATE IT
01850 OPEN "O",1,FCAT$
01860 PRINT#1,"()"+SPACE$(35) : REM FIXED LENGTH
01870 GOTO "MASTLA CREATE"
01880 REM
01890 "OPEN OUTPUT"
01900 REM
01910 REM OPEN OUTPUT FILE
01920 OPEN "O",2,FTMP$
01930 REM
01940 REM KEEP () 1ST RECORD 1ST
01950 LINEINPUT#1,TEXT$ : PRINT#2,TEXT$
01960 N1=1 : REM INDEX$ POINTER
01970 Done=0 : REM EOF FLAG
01980 REM
01990 "READ LOOP"
02000 REM
02010 J=0 : REM # OF MASTLA.CAT ENTRIES IN INDEX$ (AFTER N DISK.DIR ONES)
02020 PRINT "Reading..."
02030 REM
02040 "READ MASTLA"
02050 REM
02060 REM READ RECORD
02070 LINEINPUT#1,TEXT$
02080 IF ERROR=257 THEN ERROR=0 : Done=1 : GOTO "WRITE LOOP"
02090 REM
02100 REM PUT IN INDEX$ IF NOT OLD ENTRY WITH SAME DISKNAM.NNN
02110 DUM$=MID$(TEXT$,14,SIZE-1)
02120 IF DUM$<>DISKNAME2$ THEN J=J+1 : INDEX$(J+N)=TEXT$ : GOTO 2140
02130 PRINT "Del: ";TEXT$
02140 IF J+N<NumIndex THEN "READ MASTLA"
02150 REM
02160 "WRITE LOOP"
02170 REM
02180 PRINT "Writing..."
02190 REM
02200 REM ADD NEW ENTRIES
02210 LONG IF J : REM ANY OLD ENTRIES?
02220 FOR I= 1 TO J
02230 TEXT$=INDEX$(I+N) : REM RETRIEVE OLD ENTRY
02240 LONG IF N1>N : REM NO NEW ENTRIES LEFT
02250 PRINT#2,TEXT$
02260 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
02270 GOTO 2420
02280 ENDIF
02290 LONG IF TEXT$<INDEX$(N1)
02300 PRINT#2,TEXT$ : REM SAVE OLD ENTRY
02310 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
02320 XELSE
02330 WHILE N1<=N AND TEXT$>=INDEX$(N1) : REM ADD NEW ENTRIES (IF = TOO)
02340 PRINT#2,INDEX$(N1)
02350 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
02360 PRINT "Add: ";INDEX$(N1)
02370 N1=N1+1
02380 WEND
02390 IF TEXT$>INDEX$(N1-1) THEN PRINT#2,TEXT$ : REM SAVE OLD ENTRY
02400 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
02410 ENDIF
02420 NEXT I
02430 IF Done=0 THEN "READ LOOP"
02440 ENDIF
02450 REM
02460 REM ANY NEW ENTRIES TO ADD?
02470 WHILE N1<=N
02480 PRINT#2,INDEX$(N1)
02490 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
02500 PRINT "Add: ";INDEX$(N1)
02510 N1=N1+1
02520 WEND
02530 REM
02540 "RENAMING FILES"
02550 REM
02560 PRINT
02570 PRINT "Renaming files"
02580 CLOSE
02590 REM
02600 REM RENAME FILES, KILL OLD POINTER.FIL IF ANY ADD/DELETE
02610 KILL FBAK$ : ERROR=0
02620 RENAME FCAT$,FBAK$
02630 RENAME FTMP$,FCAT$
02640 IF N THEN KILL FPT$ : ERROR=0
02650 REM
02660 RUN : REM RESTART PROGRAM
02670 REM
02680 REM
02690 "DELETE" : REM DELETE ROUTINE
02700 REM
02710 REM
02720 CLS
02730 PRINT "You can DELETE anything within the MASTLA.CAT file (in the FILE"
02740 PRINT "NAME, DISK NAME, or LBR/ARK/ARC NAME fields)!"
02750 PRINT
02760 PRINT "To delete a DISK NAME, enter .nnn rather than just the nnn"
02770 PRINT "number. If you enter just a PERIOD or COMMA, EVERYTHING WILL BE"
02780 PRINT "DELETED! Entering only blanks won't be accepted!"
02790 PRINT
02800 PRINT "Manual deletions are only needed if you change a DISK NAME, or"
02810 PRINT "totally erase a disk and don't reuse the DISK NAME (including the"
02820 PRINT ".nnn number!). Updates TOTALLY REMOVE any OLD DATA with the same"
02830 PRINT "-DISKNAM.nnn. Other things must match EXACTLY what is in the"
02840 PRINT "MASTLA.CAT file!"
02850 PRINT
02860 LINEINPUT "What do you wish to DELETE (CR=Quit): ";DUM$
02870 IF LEN(DUM$)=0 THEN RUN : REM RESTART PROGRAM
02880 DUM=LEN(DUM$)
02890 TEXT$=SPACE$(DUM)
02900 IF DUM$=TEXT$ THEN 2860
02910 PRINT
02920 REM
02930 REM OPEN FILES
02940 OPEN "I",1,FCAT$ : OPEN "O",2,FTMP$
02950 REM
02960 REM KEEP 1ST () RECORD 1ST
02970 LINEINPUT#1,TEXT$ : PRINT#2,TEXT$
02980 REM
02990 Done=0 : REM EOF FLAG
03000 N=0 : REM # OF DELETIONS
03010 REM
03020 "READ LOOP2"
03030 REM
03040 I=0 : REM # OF ENTRIES IN INDEX$
03050 PRINT "Reading..."
03060 REM
03070 "READ MASTLA2"
03080 REM
03090 REM READ RECORD
03100 LINEINPUT#1,TEXT$
03110 IF ERROR=257 THEN ERROR=0 : Done=1 : GOTO "WRITE LOOP2"
03120 REM
03130 REM INSERT INTO INDEX$
03140 I=I+1
03150 INDEX$(I)=TEXT$
03160 IF I<NumIndex THEN "READ MASTLA2"
03170 REM
03180 "WRITE LOOP2"
03190 REM
03200 PRINT "Writing..."
03210 FOR J= 1 TO I
03220 REM
03230 REM DELETE THIS RECORD?
03240 TEXT$=INDEX$(J)
03250 LONG IF INSTR(1,TEXT$,DUM$)=0
03260 PRINT#2,TEXT$ : REM NO
03270 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
03280 XELSE
03290 PRINT "Del: ";TEXT$ : REM YES
03300 N=N+1
03310 ENDIF
03320 NEXT J
03330 IF Done=0 THEN "READ LOOP2"
03340 PRINT
03350 PRINT "There were";N;"deletions"
03360 GOTO "RENAMING FILES"
03370 REM
03380 REM
03390 "POINTER" : REM POINTER CREATE ROUTINE
03400 REM
03410 REM
03420 REM OPEN FILES
03430 DUM=-1 : REM PREVIOUS ASCII NUMBER
03440 PRINT " Working...";
03450 OPEN "I",1,FCAT$,39 : REM FIXED LENGTH
03460 OPEN "O",2,FPT$
03470 REM
03480 "READ MASTLA3"
03490 REM
03500 REM READ RECORD
03510 RecNUM=REC(1) : REM RECORD POINTER
03520 LINEINPUT#1,TEXT$
03530 IF ERROR=257 THEN ERROR=0 : GOTO "SAVE POINTER"
03540 REM
03550 REM PUT POINTERS IN Point ARRAY
03560 DUM1=ASC(TEXT$)
03570 IF DUM1<>DUM THEN Point(DUM1-PtOffset)=RecNUM+1 : DUM=DUM1
03580 GOTO "READ MASTLA3"
03590 REM
03600 "SAVE POINTER"
03610 REM
03620 FOR I= 0 TO 57
03630 WRITE#2,Point(I)
03640 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
03650 NEXT I
03660 CLOSE
03670 RUN : REM RESTART PROGRAM
03680 REM
03690 REM
03700 "SPECIAL LIST" : REM -DISKNAMES OR LBR/ARK/ARC NAMES
03710 REM
03720 REM
03730 REM OPEN INPUT FILE
03740 Done=0 : REM EOF FLAG
03750 N=0 : N1=0 : N2=0 : N3=0 : REM COUNTERS
03760 OPEN "I",1,FCAT$
03770 REM
03780 IF Page<100 THEN CLS : PRINT " Working...";CHR$(13);
03790 I=0 : REM # OF INDEX$ RECORDS
03800 REM
03810 "READ MASTLA4"
03820 REM
03830 REM FINISHED WITH PAGE?
03840 IF I=Page THEN "SPECIAL LIST PAGE"
03850 REM
03860 REM READ RECORD
03870 LINEINPUT#1,TEXT$
03880 IF ERROR=257 THEN ERROR=0 : Done=1 : GOTO "SPECIAL LIST PAGE"
03890 N=N+1
03900 REM
03910 REM STORE OUTPUT IN INDEX$, FOR DISKNAME OR LBR
03920 DUM=INSTR(START,TEXT$,DISKNAME$)
03930 IF START=10 AND DUM>10 THEN "CHECK ARK" : REM NOT LBR
03940 LONG IF DUM>0
03950 N1=N1+1
03960 I=I+1
03970 INDEX$(I)=LEFT$(TEXT$,2*SIZE)
03980 GOTO "READ MASTLA4"
03990 ENDIF
04000 IF START=10 THEN "CHECK ARK"
04010 REM
04020 REM NO DISKNAMES AFTER MINUS FILES
04030 IF START=26 AND (INSTR(1,TEXT$,"-")=1 OR N1=0) THEN "READ MASTLA4" ELSE
Done=1 : GOTO "SPECIAL LIST PAGE"
04040 REM
04050 "CHECK ARK"
04060 REM
04070 DUM=INSTR(START,TEXT$,DISKNAME2$)
04080 IF DUM>10 THEN "CHECK ARC"
04090 LONG IF DUM>0
04100 N2=N2+1
04110 I=I+1
04120 INDEX$(I)=LEFT$(TEXT$,2*SIZE)
04130 GOTO "READ MASTLA4"
04140 ENDIF
04150 REM
04160 "CHECK ARC"
04170 REM
04180 DUM=INSTR(START,TEXT$,DISKNAME3$)
04190 IF DUM>10 THEN "READ MASTLA4"
04200 LONG IF DUM>0
04210 N3=N3+1
04220 I=I+1
04230 INDEX$(I)=LEFT$(TEXT$,2*SIZE)
04240 ENDIF
04250 GOTO "READ MASTLA4"
04260 REM
04270 "SPECIAL LIST PAGE"
04280 REM
04290 WHILE I
04300 INDEX$(I+1)=" " : INDEX$(I+2)=" " : REM BLANK RECORDS FOR LAST PAGE
04310 IF FRAC(I/3.)>0 THEN I=I+1 : REM LAST PAGE FIX IF REMAINDER IS 1/3
04320 FOR J= 1 TO INT(I/3.+.7)
04330 PRINT INDEX$(J);" | ";INDEX$(J+INT(I/3.+.7));" | ";
INDEX$(J+INT(2.*I/3.+.7))
04340 NEXT J
04350 I=0
04360 WEND
04370 LONG IF Page<100 AND Done=0
04380 INPUT "Hit RETURN to continue ";DUM$
04390 CLS : PRINT " Working...";CHR$(13);
04400 XELSE
04410 IF Done=0 THEN PRINT CHR$(12);
04420 ENDIF
04430 IF Done=0 THEN "READ MASTLA4"
04440 PRINT
04450 LONG IF START=26
04460 PRINT "DISK NAMES on file:";N1
04470 XELSE
04480 PRINT "Total FILES in catalog:";N-1
04490 PRINT "Total .LBR/.ARK/.ARCs:";N1+N2+N3
04500 PRINT "On file:";N1;".LBRs, ";N2;".ARKs, ";N3;".ARCs"
04510 ENDIF
04520 IF Page>100 THEN PRINT CHR$(12);
04530 ROUTE 0
04540 INPUT "Hit RETURN to continue ";DUM$
04550 RUN : REM RESTART PROGRAM
04560 REM
04570 REM
04580 "LIST" : REM SELECTED LIST OR ENTIRE FILE
04590 REM
04600 REM
04610 IF Page<100 THEN CLS : PRINT " Working...";CHR$(13);
04620 REM
04630 REM READ POINTER FILE (SELECTED LIST)
04640 LONG IF DUM
04650 OPEN "I",1,FPT$
04660 LONG IF ERROR=259
04670 ERROR=0
04680 PRINT "No POINTER.FIL file available!"
04690 INPUT "Hit RETURN to continue ";DUM$
04700 RUN : REM RESTART PROGRAM
04710 ENDIF
04720 FOR I= 0 TO 57
04730 READ#1,Point(I)
04740 NEXT I
04750 CLOSE
04760 ENDIF
04770 REM
04780 REM OPEN INPUT FILE, SKIP 1ST RECORD ()
04790 Done=0 : REM EOF FLAG
04800 OPEN "I",1,FCAT$,39 : REM FIXED LENGTH
04810 LINEINPUT#1,TEXT$
04820 REM
04830 REM IF SELECTED LIST, SET 1ST RECORD POINTER (NEVER 0)
04840 LONG IF DUM
04850 LONG IF Point(DUM-PtOffset)>0
04860 RECORD #1,Point(DUM-PtOffset)
04870 XELSE
04880 Done=1
04890 GOTO "LIST PAGE"
04900 ENDIF
04910 ENDIF
04920 REM
04930 N=0 : REM # OF INDEX$ RECORDS
04940 REM
04950 "READ MASTLA5"
04960 REM
04970 REM READ RECORD
04980 LINEINPUT#1,TEXT$
04990 IF ERROR=257 THEN ERROR=0 : Done=1 : GOTO "LIST PAGE"
05000 REM
05010 REM IF SELECTED LIST, IS RECORD PAST OUR RANGE?
05020 LONG IF DUM
05030 DUM2=ASC(TEXT$)
05040 IF DUM2>DUM1 THEN Done=1 : GOTO "LIST PAGE"
05050 ENDIF
05060 REM
05070 REM STORE IN INDEX$
05080 N=N+1
05090 INDEX$(N)=TEXT$
05100 REM
05110 REM FINISHED WITH PAGE?
05120 IF N<Page THEN "READ MASTLA5"
05130 REM
05140 "LIST PAGE"
05150 REM
05160 WHILE N
05170 INDEX$(N+1)=" " : REM BLANK RECORD FOR LAST PAGE
05180 FOR I= 1 TO INT(N/2.+.5001)
05190 PRINT INDEX$(I);" | ";INDEX$(I+INT(N/2.+.5001))
05200 NEXT I
05210 N=0
05220 WEND
05230 LONG IF Page<100
05240 INPUT "Hit RETURN to continue ";DUM$
05250 CLS : PRINT " Working...";CHR$(13);
05260 XELSE
05270 PRINT CHR$(12);
05280 ENDIF
05290 IF Done THEN ROUTE 0 : RUN : REM RESTART PROGRAM
05300 GOTO "READ MASTLA5"
05310 REM
05320 REM
05330 REM SUBROUTINES
05340 REM
05350 REM
05360 "FILE ERROR"
05370 REM
05380 REM
05390 PRINT
05400 LONG IF DISKNAME$=""
05410 PRINT "-DISKNAM.nnn missing in DISK.DIR!"
05420 GOTO "ABORT"
05430 ENDIF
05440 PRINT "File error in DISK.DIR: Missing file or wrong format!"
05450 REM
05460 "ABORT"
05470 REM
05480 PRINT "Program aborted"
05490 END
05500 REM
05510 REM
05520 "FILE ERROR2"
05530 REM
05540 REM
05550 PRINT
05560 PRINT "Disk full error!"
05570 GOTO "ABORT"
05580 REM
05590 REM
05600 "DISK NAME"
05610 REM
05620 REM
05630 REM INSERT DISK NAME ONCE
05640 LONG IF LEN(DISKNAME2$)=0
05650 DISKNAME2$=RIGHT$(DISKNAME$,SIZE-1) : REM REMOVE -
05660 DUM$=DISKNAME$+","+DISKNAME2$+",DISKNAME. "
05670 GOSUB "INDEX$ INSERT"
05680 ENDIF
05690 RETURN
05700 REM
05710 REM
05720 "INDEX$ INSERT"
05730 REM
05740 REM
05750 REM INSERT ENTRY
05760 LONG IF N>0
05770 FOR I= 1 TO N
05780 IF INDEX$(I)<DUM$ THEN 5800
05790 INDEX$I(I)=DUM$ : N=N+1 : RETURN
05800 NEXT I
05810 ENDIF
05820 REM
05830 REM PUT AT END
05840 N=N+1
05850 INDEX$(N)=DUM$
05860 RETURN
05870 REM LAST LINE OF CATLA.BAS
10 ENDIF
05820 REM
05830 REM PUT AT END
05840 N=N+1
05850 INDEX$(N)=DUM$
05860 RETURN
05870 REM LAST LIN