10 REM LINCATC 260390 20 PRINT"[147]PROGRAM LINCATC":PRINT 30 DIM F$(400),T(400),S(400),NB(400) 40 INPUT "WHICH DISK DRIVE NUMBER (8/9/10/11)";U 50 OPEN15,U,15 60 PRINT"PUT THE WORK DISK WITH THE FILELIST[146] DATA INTO DRIVE #";U;"." 70 INPUT"OK TO PROCEED (Y/N)";Z$ 80 IF Z$<>"Y" THEN CLOSE15:STOP 90 OPEN1,U,2,"FILELIST,S,R" 100 INPUT#15,A,B$,C,D:PRINT A;B$;C;D 110 IF A<>0 THEN PRINT"'FILELIST' NOT FOUND. ABORT.":CLOSE1:CLOSE15:STOP 120 D$="":FOR I=1 TO 4:GET#1,E$:D$=D$+E$:NEXT I 130 PRINT"FILELIST[146] DRIVE TYPE ";D$;"[146]" 140 IF D$="1541" OR D$="1571" THEN DTRK=18:DSCT=1: GOTO170 150 IF D$="1581" THEN DTRK=40:DSCT=3 :GOTO170 160 PRINT"DRIVE TYPE NOT RECOGNISED. ABORTING.":CLOSE1:CLOSE15:STOP 170 PRINT"DIRECTORY TRACK IS";DTRK 180 PRINT"STARTING SECTOR IS";DSCT 190 NF=0 200 PRINT"FILENAME,TRACK,SECTOR,SIZE:" 210 INPUT#1,A$,B,C,D 220 PRINT A$;B;C;D 230 NF=NF+1 240 F$(NF)=A$:T(NF)=B:S(NF)=C:NB(NF)=D 250 REM SET FILE NAME, TRACK & SECTOR START, BLOCK SIZE. 260 IF A$<>"END" GOTO210 270 NF=NF-1 280 CLOSE1 290 PRINT"FOUND ";NF;"DIRECTORY FILE ENTRIES." 300 REM NOW WRITE THE DIRECTORY OUT TO THE DIRECTORY TRACK 310 PRINT:PRINT"CHANGE DISK[146]: PUT CORRUPTED DISK IN DRIVE" 320 INPUT"OK TO PROCEED (Y/N)";Z$ 330 IF Z$<>"Y" THEN CLOSE15:STOP 340 PRINT"ABOUT TO OVERWRITE THE ENTIRE DIRECTORY":PRINT"TRACK #";DTRK;"." 350 INPUT"SHALL I CONTINUE (Y/N)";Z$ 360 IF Z$<>"Y" THEN CLOSE15:STOP 370 PRINT#15,"I0":REM INIT DRIVE:NB MUST HAVE DISK HEADER AND ID ALREADY SET 380 IF D$="1571" THEN PRINT#15,"U0>M1":REM MAKE SURE IN 1571 MODE, IF NEED BE. 390 T1=DTRK:S1=DSCT:REM STARTING TRACK,SECTOR FOR THE DIRECTORY REWRITE 400 SP$=CHR$(160):FORI=1TO11:SP$=SP$+CHR$(160):NEXT I 410 Z$=CHR$(0) 420 FOR I=1 TO NF STEP 8 430 :OPEN4,U,4,"#" 440 :PRINT#15,"B-P";4;0 :REM SET POINTER IN 1541/1571/1581 BUFFER AREA 450 :IF (I+7)=NF THEN PRINT#4,CHR$(0);CHR$(255); :REM LAST DIRECTORY BLOCK 470 :PRINT "T/S: ";I;T1;S1+1;"[146]" 480 :REM LINK TO NEXT SECTOR 490 :FOR K=0 TO 7 500 : FF=I+K:IF FF>NF THEN FOR L=1TO(8-K)*32-2:PRINT#4,Z$;:NEXTL:GOTO620 510 : PRINT#4,CHR$(130);:REM ASSUME TYPE PGM FILE 520 : PRINT#4,CHR$(T(FF));CHR$(S(FF)); 530 : FI$=LEFT$(F$(FF),4)+SP$ 540 : PRINT#4,FI$; 550 : FOR Z=1TO9:PRINT#4,Z$;:NEXT Z 560 : B2=INT(NB(FF)/256):B1=NB(FF)-256*B2 570 : PRINT#4,CHR$(B1);CHR$(B2); 580 : IF K<7 THEN PRINT#4,Z$;Z$; 590 : PRINT FF;T(FF);S(FF);"<";FI$;">" 600 : PRINT B1;B2 610 : NEXT K 620 :PRINT#15,"U2";4;0;T1;S1 630 :INPUT#15,A,B$,C,D:IF A=0 THEN GOTO670 640 : PRINT: PRINTA;B$;C;D:PRINT"PROBLEM WRITING TO DISK. PLEASE CHECK" 650 : PRINT"CORRECT DISK IS IN DRIVE, WRITE ENABLED" 660 : PRINT"ABORTING PROGRAM.":CLOSE4:CLOSE15:STOP 670 :S1=S1+1:REM SET FOR NEXT SECTOR 680 :CLOSE4 690 NEXT I 700 CLOSE15 710 PRINT:PRINT"DIRECTORY WRITTEN. END OF LINCATC." 720 PRINT"NOW CHECK DIRECTORY, IDENTIFY FILES AND" 730 PRINT"RENAME WHERE NECESSARY."