10 'BACKLIST.bas List names of files on Backup Disk 20 'SAVE"backlist.bas" 30 DIM PRT$(200) : KEY OFF 40 COLOR 7,1:CLS 50 '----- prompt for input ----- 60 LOCATE 1,1:PRINT "BACKLIST (Ver 2.0) - Display Directories/Files on DOS 3.3 Backup Disks"; 70 LOCATE 2,1:PRINT " Jim Imbrogno - (216) 447-1600 Cleveland, Ohio"; 80 LOCATE 5,15:PRINT "Enter Drive Letter: "; 90 DR$=INKEY$:IF DR$="" THEN GOTO 90 100 IF ASC(DR$) > 96 THEN DR$=CHR$(ASC(DR$)-32) 'convert to Upper Case 110 LOCATE 5,35:PRINT DR$; 120 LOCATE 7,15:PRINT "Press to display File Names, or"; 130 LOCATE 8,15:PRINT "Press to display Directory Names ONLY"; 140 TYPE$=INKEY$:IF TYPE$="" THEN GOTO 140 150 IF ASC(TYPE$) > 96 THEN TYPE$=CHR$(ASC(TYPE$)-32) 'convert to Upper Case 160 IF TYPE$ <> "D" AND TYPE$ <> "F" THEN SOUND 2500,.5 :GOTO 120 170 LOCATE 10,15:PRINT "Press

to send report to PRINTER"; 180 LOCATE 11,15:PRINT "Press any other key to show report on SCREEN"; 190 DEVICE$=INKEY$:IF DEVICE$="" THEN GOTO 190 200 IF ASC(DEVICE$) > 96 THEN DEVICE$=CHR$(ASC(DEVICE$)-32) 'convert to Upper Case 210 IF DEVICE$="P" THEN OPEN "LPT1:" FOR OUTPUT AS #2 ELSE OPEN "SCRN:" FOR OUTPUT AS #2 220 '---------------------------------------------------------------------- 230 FILE$=DR$+":CONTROL.*" 240 ITEM%=0 250 ON ERROR GOTO 2130 260 CLS:LOCATE 1,1:FILES FILE$:NBR$="" 270 IF E%=53 GOTO 1860 'File not found 280 'IF E%=57 GOTO 890 'Device I/O error 290 FOR X%=10 TO 12 300 NBR$=NBR$+CHR$(SCREEN(2,X%)) 'get backup disk number 310 NEXT X% 320 FILE$=DR$+":CONTROL."+NBR$ 'complete file name 330 DISK%=VAL(NBR$) 'disk number 340 '----- display Header ----- 350 CLS:COLOR 7,1 360 LOCATE 1,1:PRINT "BACKLIST (Ver 2.0) - Display Directories/Files on DOS 3.3 Backup Disks"; 370 LOCATE 2,1:PRINT " Jim Imbrogno - (216) 447-1600 Cleveland, Ohio"; 380 LOCATE 3,5:PRINT "Drive: ";:LOCATE 3,12:COLOR 14,0:PRINT DR$;:COLOR 7,1:LOCATE 3,16:PRINT "Disk #: ";:COLOR 14,0:PRINT NBR$;:COLOR 7,1 390 IF DEVICE$ <> "P" THEN GOTO 440 400 PRINT #2,"__________________" 410 PRINT #2,"BACKLIST (Ver 2.0) - Display Directories/Files on DOS 3.3 Backup Disks" 420 PRINT #2,"Drive: ";DR$;" Disk #: ";NBR$ 430 LOCATE 7,15:COLOR 15,1:PRINT " Sending output to PRINTER ";:COLOR 7,1 440 LOCATE 5,1 450 '----- read data in CONTROL.nnn file ----- 460 OPEN "R",#1,FILE$,1 470 IF E%=53 GOTO 1860 'File not found 480 FIELD 1,1 AS F$ 490 BYTES=LOF(1) 500 R%=0 510 ' 520 '----- process HEADER Record ----- 530 RECD$=SPACE$(139) 'init record workspace 540 FOR X%=1 TO 139 550 R%=R%+1 : IF R% > BYTES THEN GOTO 1860 'EOJ 560 GET 1,R% 'read next byte 570 MID$(RECD$,X%,1) = F$ 'load workspace 580 NEXT X% 590 ITEM%=ITEM%+1 600 PRT$(ITEM%)=RECD$ 'put workspace record in array 610 GOSUB 1790 'output results 620 ' 630 '----- MAINLINE Loop - Process the rest of the CONTROL.nnn file ----- 640 IF R%+1 > BYTES THEN GOTO 1860 'EOJ 650 GET 1,R%+1 'read next byte 660 IF F$="F" THEN GOSUB 760 : GOTO 700 '(Directory Record) 670 IF F$=CHR$(34) AND TYPE$="F" THEN GOSUB 870 :GOTO 700 'chr$(34) = " (File Rec) 680 IF F$=CHR$(34) AND TYPE$="D" THEN R%=R%+34:ITEM%=ITEM%+1:PRT$(ITEM%)=F$ :GOTO 700 'skip over File Rec 690 STOP:R%=R%+1 : GOTO 630 'if didn't detect Directory or File record, then increment byte & loop back 700 'sub-routine processed some data, now output the results 710 GOSUB 1790 'output results 720 GOTO 630 'loop back (R% was incremented in the sub-routines 730 '========================================================================== 740 ' SUB-ROUTINES 750 '========================================================================== 760 '===== Process DIRECTORY Record ===== 770 RECD$=SPACE$(70) 'init work space 780 FOR X%=1 TO 70 'for each byte 790 R%=R%+1 : IF R% > BYTES THEN GOTO 1860 800 GET 1,R% 'read a byte 810 MID$(RECD$,X%,1) = F$ 'build record workspace 820 NEXT X% 830 ' 840 ITEM%=ITEM%+1 'index for PRT$ array 850 PRT$(ITEM%)=RECD$ 'put workspace into array 860 RETURN 870 '===== Process FILE Record ===== 880 RECD$=SPACE$(34) 890 FOR X%=1 TO 34 900 R%=R%+1 : IF R% > BYTES THEN GOTO 1860 910 GET 1,R% 920 IF X% > 1 AND X% < 14 THEN IF F$=CHR$(0) THEN LSET F$=CHR$(32) 'replace null with space, only in FILE NAME part of file 930 MID$(RECD$,X%,1) = F$ 940 NEXT X% 950 ITEM%=ITEM%+1 960 PRT$(ITEM%)=RECD$ 970 S1$=MID$(PRT$(ITEM%),15,4) 'Size #1 980 S2$=MID$(PRT$(ITEM%),25,4) 'Size #2 990 T$=MID$(PRT$(ITEM%),31,2) 'Time 1000 D$=MID$(PRT$(ITEM%),33,2) 'Date 1010 B1 = ASC(MID$(T$,2,1)) : B2 = ASC(MID$(T$,1,1)) 'get values & flip bytes 1020 HH=0 'init 1030 HH= HH + ((B1 AND 128)/8) 1040 HH= HH + ((B1 AND 64)/8) 1050 HH= HH + ((B1 AND 32)/8) 1060 HH= HH + ((B1 AND 16)/8) 1070 HH= HH + ((B1 AND 8)/8) 1071 AP$="am":IF HH >= 12 THEN AP$="pm" 'AM or PM 1072 IF HH > 12 THEN HH=HH-12 'convert from 24hr clock 1073 IF HH < 10 THEN HH$=" "+MID$(STR$(HH),2,1) ELSE HH$=MID$(STR$(HH),2,2) 1080 MM=0 'init 1090 MM= MM + ((B1 AND 4)*8) 1100 MM= MM + ((B1 AND 2)*8) 1110 MM= MM + ((B1 AND 1)*8) 1120 MM= MM + ((B2 AND 128)/32) 1130 MM= MM + ((B2 AND 64)/32) 1140 MM= MM + ((B2 AND 32)/32) 1142 IF MM < 10 THEN MM$="0"+MID$(STR$(MM),2,1) ELSE MM$=MID$(STR$(MM),2,2) 1150 SS=0 'init 1160 SS= SS + (B2 AND 16) 1170 SS= SS + (B2 AND 8) 1180 SS= SS + (B2 AND 4) 1190 SS= SS + (B2 AND 2) 1200 SS= SS + (B2 AND 1) 1210 SS= SS * 2 'stored in 2-second increments 1212 IF SS < 10 THEN SS$=" "+MID$(STR$(SS),2,1) ELSE SS$=MID$(STR$(SS),2,2) 1215 HMS$=HH$+":"+MM$ '+":"+SS$ '(seconds not needed) 1220 B1 = ASC(MID$(D$,2,1)) : B2 = ASC(MID$(D$,1,1)) 'get values & flip bytes 1230 YR=1980 'init (to base year) 1240 YR= YR + ((B1 AND 128)/2) 1250 YR= YR + ((B1 AND 64)/2) 1260 YR= YR + ((B1 AND 32)/2) 1270 YR= YR + ((B1 AND 16)/2) 1280 YR= YR + ((B1 AND 8)/2) 1290 YR= YR + ((B1 AND 4)/2) 1300 YR= YR + ((B1 AND 2)/2) 1302 YR$=MID$(STR$(YR),4,2) 1310 MO=0 'init 1320 MO= MO + ((B1 AND 1)*8) 1330 MO= MO + ((B2 AND 128)/32) 1340 MO= MO + ((B2 AND 64)/32) 1350 MO= MO + ((B2 AND 32)/32) 1352 IF MO < 10 THEN MO$=" "+MID$(STR$(MO),2,1) ELSE MO$=MID$(STR$(MO),2,2) 1360 DA=0 'init 1370 DA= DA + (B2 AND 16) 1380 DA= DA + (B2 AND 8) 1390 DA= DA + (B2 AND 4) 1400 DA= DA + (B2 AND 2) 1410 DA= DA + (B2 AND 1) 1412 IF DA < 10 THEN DA$=" "+MID$(STR$(DA),2,1) ELSE DA$=MID$(STR$(DA),2,2) 1415 MDY$=MO$+"-"+DA$+"-"+YR$ 1420 B1 = ASC(MID$(S1$,4,1)) : B2 = ASC(MID$(S1$,3,1)) : B3 = ASC(MID$(S1$,2,1)) : B4 = ASC(MID$(S1$,1,1)) 'get values & flip bytes 1430 SZ=0 'init 1440 SZ= SZ + ((B1 AND 128) * 2^24) 1450 SZ= SZ + ((B1 AND 64) * 2^24) 1460 SZ= SZ + ((B1 AND 32) * 2^24) 1470 SZ= SZ + ((B1 AND 16) * 2^24) 1480 SZ= SZ + ((B1 AND 8) * 2^24) 1490 SZ= SZ + ((B1 AND 4) * 2^24) 1500 SZ= SZ + ((B1 AND 2) * 2^24) 1510 SZ= SZ + ((B1 AND 1) * 2^24) 1520 SZ= SZ + ((B2 AND 128) * 2^16) 1530 SZ= SZ + ((B2 AND 64) * 2^16) 1540 SZ= SZ + ((B2 AND 32) * 2^16) 1550 SZ= SZ + ((B2 AND 16) * 2^16) 1560 SZ= SZ + ((B2 AND 8) * 2^16) 1570 SZ= SZ + ((B2 AND 4) * 2^16) 1580 SZ= SZ + ((B2 AND 2) * 2^16) 1590 SZ= SZ + ((B2 AND 1) * 2^16) 1600 SZ= SZ + ((B3 AND 128) * 2^8) 1610 SZ= SZ + ((B3 AND 64) * 2^8) 1620 SZ= SZ + ((B3 AND 32) * 2^8) 1630 SZ= SZ + ((B3 AND 16) * 2^8) 1640 SZ= SZ + ((B3 AND 8) * 2^8) 1650 SZ= SZ + ((B3 AND 4) * 2^8) 1660 SZ= SZ + ((B3 AND 2) * 2^8) 1670 SZ= SZ + ((B3 AND 1) * 2^8) 1680 SZ= SZ + (B4 AND 128) 1690 SZ= SZ + (B4 AND 64) 1700 SZ= SZ + (B4 AND 32) 1710 SZ= SZ + (B4 AND 16) 1720 SZ= SZ + (B4 AND 8) 1730 SZ= SZ + (B4 AND 4) 1740 SZ= SZ + (B4 AND 2) 1750 SZ= SZ + (B4 AND 1) 1760 'IF MID$(PRT$(ITEM%),2,9)="DUMMY.TXT" THEN STOP 1770 'PRINT "hex: ";HEX$(ASC(MID$(s1$,4,1)));" ";HEX$(ASC(MID$(s1$,3,1)));" ";hex$(asc(mid$(s1$,2,1)));" ";hex$(asc(mid$(s1$,1,1))) 1780 RETURN 1790 '----- Display/Print Results 1800 IF ITEM%=1 THEN COLOR 14,0:PRINT #2,"[Header] ";MID$(PRT$(ITEM%),2,6);:COLOR 7,1:PRINT: GOTO 1850 1810 IF MID$(PRT$(ITEM%),1,1)="F" THEN PRINT #2," ":COLOR 14,0:PRINT #2,"[Dir] ";:COLOR 12,0:PRINT #2,MID$(PRT$(ITEM%),2,63) 1820 'IF MID$(PRT$(ITEM%),1,1)="F" AND TYPE$="D" THEN COLOR 7,1:PRINT #2," " 1830 IF MID$(PRT$(ITEM%),1,1)=CHR$(34) AND TYPE$="F" THEN COLOR 7,1:PRINT #2,MID$(PRT$(ITEM%),2,12);" ";SZ,MDY$,HMS$;AP$; " (approximate time) 1840 IF MID$(PRT$(ITEM%),1,1)=CHR$(34) AND TYPE$="D" THEN PRINT #2,"."; 1850 RETURN 1860 '----- EOJ - Prompt for more ----- 1870 CLOSE 1 1880 COLOR 7,1:PRINT:PRINT 1890 SOUND 2500,.5 1900 LOCATE 24,15:PRINT "Process another disk? (Y/N)"; 1910 LOCATE 24,43 : MORE$=INKEY$:IF MORE$="" THEN GOTO 1910 1920 IF ASC(MORE$) > 96 THEN MORE$=CHR$(ASC(MORE$)-32) 'convert to Upper Case 1930 IF MORE$ = "Y" THEN GOTO 230 1940 IF MORE$ <> "N" THEN GOTO 1890 1950 IF DEVICE$="P" THEN PRINT #2,CHR$(12); 1960 CLOSE 2 1970 END '<====== 1980 '===== get date & time =================== 1990 '===== (this test routine is never called) 2000 FOR X%= 0 TO 15 2010 PRINT X%;"=";2^X% 2020 NEXT X% 2030 F$=MKI$(5257) 2040 PRINT HEX$(ASC(MID$(F$,1,1)));" ";HEX$(ASC(MID$(F$,2,1))) 2050 T%=5257 :DIM PRT2$(16) 2060 FOR X%=1 TO 16 2070 PRT2$(X%)="0" 2080 'PRINT X%,2^(X%-1) 2090 IF (T% AND 2^(X%-1)) <> 0 THEN PRT2$(X%)="1" 2100 PRINT PRT2$(X%);" "; 2110 NEXT X% 2120 RETURN 2130 '===== trap for File error ===== 2140 E% = ERR 2150 ERRCNT%=ERRCNT% + 1 'TO PREVENT RECURSIVE ERROR LOOPING 2160 IF ERRCNT% = 1 THEN GOTO 2180 2170 END 'EXCESSIVE ERRORS; ABORT 2180 'PRINT ERR:STOP 'DEBUG 2190 IF E%<>53 THEN GOTO 2250 2200 'ERROR 53; NO MATCH ON FILE SPEC 2210 LOCATE 10,15:PRINT "NO BACKUP FILES FOUND. PRESS ANY KEY TO CONTINUE"; 2220 X$=INKEY$:IF X$="" THEN GOTO 2220 2230 ERRCNT%=0 2240 'BEEP:TRON:LOCATE 24,1 2250 'PRINT ERR:STOP 2260 RESUME NEXT