Listing of file='TBO.CKDS' on disk='vmedia/toolbox.wvd.zip'
# Sector 520, program filename = 'TBO.CKDS' 0010 REM TBO.CKDS -- DJA 10/9/86 0020 DIM A$(16,2)8,F$(2047)8,C$(4094)2,W$(4094)2,L$(4094)2,B$3 0040 DIM V$2,V0$2,V2$2,M$50,M1$50,T$(5)2,A$3,Q(5) 0050 T$()="SDSP ? P D" 0060 PRINT HEX(03);"Check disk Utility" 0070 LINPUT "Device address to check (or ALL)",-B$ : A$=B$ 0075 IF B$="all" OR B$="ALL" THEN READ A$ : IF A$="end" THEN END 0080 $TRAN(A$,"AaBbCcDdEeFf")R 0090 SELECT #2 <A$> 0095 PRINT : PRINT HEX(0C) 0100 PRINT " Address=";A$ 0110 REM %----- get index information ---------------------------------------- --- 0120 DATA LOAD BA T #2,(0) A$() 0130 Z=VAL(STR(A$(1,1),2,1))-1 : REM LAST SECTOR OF INDEX 0140 Q2=VAL(STR(A$(1,1),3,2),2)-1 : REM CURR END (LAST USED) SECTOR 0150 Q3=VAL(STR(A$(1,1),5,2),2)-1 : REM HIGHEST LEGAL SECTOR 0160 PRINT Z,"LAST INDEX SECTOR" : PRINT Q2,"CURRENT END" : PRINT Q3,"END DISK" 0170 REM %----- verify index ------------------------------------------------- --- 0180 IF Q2<Q1+1 THEN PRINT "CURRENT END OVERLAPS INDEX" 0190 IF Q3<Q2 THEN PRINT "CURRENT END BEYOND ENDOFDISK" 0200 DATA LOAD BA T #2,(Q3)A$() : ERRORPRINT "DEFINED END IS BAD SECTOR" 0210 PRINT " ---------- File self-consistency conflicts -------------------- ---------" 0220 FOR I=1 TO 5 : Q(I)=0 : NEXT I 0225 Q=0 : F$()=" " : C$()=ALL(FF) 0230 REM %----- get index sectors ------------------------------------------- 0240 FOR I=0 TO Z 0250 DATA LOAD BA T #2,(I) A$() 0260 IF I=0 THEN J9=2 : ELSE J9=1 0270 REM %----- verify index sector file entries ---------------------------- 0280 FOR J=J9 TO 16 0290 IF STR(A$(J,1),1,1)=HEX(10) THEN GOTO 340 0300 IF STR(A$(J,1),1,1)=HEX(11) THEN GOTO 350 0310 IF STR(A$(J,1),1,1)=HEX(21) THEN GOTO 450 0320 IF STR(A$(J,1),1,1)=HEX(00) THEN GOTO 470 0330 HEXPRINT A$(J,1) : STOP "ILLEGAL INDEX ENTRY TYPE"# 0340 % ACTIVE FILE 0350 % SCRATCHED FILE 0360 Q=Q+1 : F$(Q)=A$(J,2) 0370 REM %----- check file parameters for self consistency ------------- 0380 LIMITS T #2, F$(Q),C1,C2,C3,C4 : Q(C4+3)=Q(C4+3)+1 0390 IF C3<=C2-C1+1 THEN 410 0400 GOSUB '51("Sectors used > Filesize:",F$(Q)) 0410 % 0420 REM should check C4 to see whether it agrees with A$(J,1) 0430 C$(2*Q-1)=BIN(C1,2) : C$(2*Q)=BIN(C2,2) 0440 GOTO 490 0450 % DELETED ENTRY 0460 GOTO 490 0470 % UNUSED ENTRY 0480 GOTO 490 0490 NEXT J 0500 NEXT I 0510 PRINT " ----------------- Statistics ---------------------------------- --------" 0520 PRINTUSING 529,"Programs",Q(4), "Scratched Programs",Q(2) : PRINTUSING 529,"Datafiles",Q(5),"Scratched datafiles",Q(1) 0529 % ############## #### ###################### #### 0530 IF Q(3)<>0 THEN STOP "LIMITS BUG "# 0540 REM %----- sort starting and ending sector addresses -------------- 0550 PRINT " ---------- File conflicts: ------------------------------------ ---------" 0560 MAT SORT C$() TO W$(),L$() 0570 DEFFN'0 "LIST D 400,";HEX(0D) 0580 DEFFN'1 0590 REM %----- check sorted sector address values --------------- : REM %.....get next sector address..... 0600 A9=VAL(L$(1),2) 0610 IF VAL(C$(A9),2)<= Z THEN GOSUB '51("File overlaps INDEX:",F$((A9+1)/2)) 0620 REM A=number of current file : REM B=1 if sector address is start, 2 if end 0630 I=0 : V$=HEX(FFFF) : A,B=9999999 0640 I=I+1 : V0$=V$ : A0=A : B0=B : A9=VAL(L$(I),2) : A=INT((A9+1)/2) : B=2-MOD(A9,2) 0650 IF C$(A9)=HEX(FFFF) THEN 790 0660 V$=C$(A9) 0670 IF B0=9999999 THEN 780 0680 IF B0<>1 THEN 740 0690 REM %.....last entry was a starting sector..... 0700 IF A=A0 THEN GOTO 780 : GOSUB '50("Overlapping files (end):") 0710 % ??? IF B<>2 THEN GOSUB '50("Overlapping files (start): ") 0720 GOTO 780 0730 REM %.....last entry was an ending sector..... 0740 IF B=1 THEN 750 : GOSUB '50("Overlapping files (end):") : GOTO 780 0750 IF V$>V0$ THEN 760 : GOSUB '50("Single sector overlap:") : GOTO 780 0760 V2$=V0$ ADDC HEX(01) : IF V$=V2$ THEN 780 0770 GOSUB '50("Gap in disk between files:") 0780 GOTO 640 0790 IF Q=0 THEN 800 0792 IF VAL(V$,2)>Q2 THEN GOSUB '51("File beyond current end:",F$(A0)) 0800 PRINT "DONE WITH TEST" 0810 IF B$="all" OR B$="ALL" THEN 75 0815 END 0820 REM %----- error message display ------------------------------------- 0830 DEFFN'50(M$) 0840 %PRINT F$(A0),F$(A),M$ 0850 GOSUB '51(M$,F$(A0)) 0860 GOSUB '52(F$(A)) 0870 RETURN 0880 DEFFN'51(M1$,F1$) 0890 LIMITS T #2, F1$,C1,C2,C3,C4 0900 PRINTUSING 910, M1$,T$(C4+3),F1$,C1,C2,C3 0910 % ################################### ## ######## ##### ##### #### # 0920 RETURN 0930 DEFFN'52(F1$) 0940 LIMITS T #2, F1$,C1,C2,C3,C4 0950 PRINTUSING 960, T$(C4+3),F1$,C1,C2,C3 0960 % ## ######## ##### ##### #### # 0970 RETURN 2000 DATA "d20","d21","d22","d23","d24","d25" 2010 DATA "d60","d61","d62","d63","d64","d65" 2020 DATA "end"