2 ! +++++++++++++++++++++++++++++++++++ 3 ! Program .... DISKSTAT.800 4 ! Utg}va 1.0 1983-01-22 5 ! av (c) Per Lindberg 6 ! {ndrat till ABC800 av Bo Kullmar 8 ! Ins{nt av Bo Kullmar, 1789. 9 ! Anv{nds 80 tkns sk{rm s} utnyttjas endast halva ytan av bildsk{rmen. 10 ! F|r disk ABC830. F|r att k|ras med superdoset m}ste programmet {ndras! 11 ! F|r info om programmet se ABC-Bladet nr 3, 1981, sid 5. 12 ! +++++++++++++++++++++++++++++++++++ 100 ! 110 ! +-----------------------------+ 120 ! ! D I S K S T A T -ABC800 ! 130 ! ! =============== DISKETTE ! 140 ! 1 STATUS ! 150 ! ! ! 160 ! ! (c) Per Lindberg 1980-01-27 ! 170 ! ! ! 180 ! ! *************************** ! 190 ! ! *** The mad programmer *** ! 200 ! ! *** strikes again..... *** ! 210 ! ! *************************** ! 220 ! +-----------------------------+ 230 ! 240 ! ** INIT ** 242 EXTEND : FLOAT 245 Q%=79% 250 C1$="X01BALQ" 260 D%=1% : POKE -767%,D% 270 DEF FNP%(A%)=PEEK(A%)+SWAP%(PEEK(A%+1%)) 280 DEF FNM%(I%,J%)=I%-I%/J%*J% 290 DEF FNA%(Y%,X%)=31744%+5%*(Y% AND 24%)+128%*(Y% AND 7%)+X% 300 ; CHR$(12%); 310 ; TAB(1%) "TRACK/SECTOR MAP DRIVE 1" 320 ; " 1 2 3" 330 ; "0123456789012345678901234567890123456789"; 340 ; CUR(3%,0%) "========================================"; 350 ; CUR(12%,0%) "========================================"; 360 ! +----------------------+ 370 ! ! M E N Y ! 380 ! +----------------------+ 390 ; CUR(14%,0%); : IF Q%<40% ; 'ENKEL'; ELSE ; 'DUBBEL'; 391 ; ' DENSITET' 395 ; CUR(15%,0%) "COMMAND:" 400 ; "-------" 410 ; 'X -BYT DENSITET' 420 ; "0 -SELECT DRIVE 0" 430 ; "1 -SELECT DRIVE 1" 440 ; "B -SCAN FOR BAD SECTORS" 450 ; "A -MAP FILE ALLOCATION" 460 ; "L -COMPLETE LIBRARY CHECK" 470 ; CUR(15%,9%) " ";CUR(15%,9%); 480 GET C$ : C%=ASCII(C$) : IF C%>95% C%=C%-32% : C$=CHR$(C%) 490 ; C$; 500 ON 1%+INSTR(1%,C1$,C$) GOSUB 520,512,560,570,610,780,850,511 510 GOTO 390 511 ; CHR$(12%); : GOTO 12160 512 GOSUB 1600 : IF Q%<40% Q%=79% ELSE Q%=39% 513 GOTO 390 520 ; CHR$(7%);CUR(15%,9%); : GOTO 480 530 ! +---------------------------+ 540 ! ! S E T D R I V E N R ! 550 ! +---------------------------+ 560 GOSUB 1600 : D%=0% : POKE -767%,D% : ; CUR(0%,23%) "0"; : RETURN 570 GOSUB 1600 : D%=1% : POKE -767%,D% : ; CUR(0%,23%) "1"; : RETURN 580 ! +---------------------------+ 590 ! ! SCAN FOR DISK ERRORS ! 600 ! +---------------------------+ 610 GOSUB 1600 : E1%=0% 611 IF Q%>39% ; CUR(21%,0%) STRING$(40%,61%) 620 ; CUR(0%,26%) "DISK STATUS:"; 650 FOR T%=0% TO Q% 660 FOR S%=0% TO 7% 670 Z%=CALL(24678%,SWAP%(T%)+32%*S%) 680 E%=PEEK(-747%) 685 X%=S% : Y%=T% : GOSUB 10000 700 IF E% E1%=E1%+1% : ; ""; : ; CUR(22%,15%) "LATEST STATUS ERROR:" E% " "; ELSE ; "."; 710 NEXT S% 720 NEXT T% 730 ; CUR(22%,0%) E1% " ERRORS"; 740 GOTO 11000 750 ! +---------------------------+ 760 ! ! MAP DISK FILES ! 770 ! +---------------------------+ 780 GOSUB 1600 790 ; CUR(0%,26%) "FILE SPACE:"; 800 F1%=0% 810 GOTO 1080 820 ! +---------------------------+ 830 ! ! COMPLETE LIB CHECK ! 840 ! +---------------------------+ 850 GOSUB 1600 860 ; CUR(0%,26%) "LIB CHECK:"; 880 F1%=-1% 890 ! +---------------------------+ 900 ! ! S C A N L I B R A R Y ! 910 ! +---------------------------+ 920 ! S% -SECTOR IN LIB 930 ! N% -ITEM IN LIB REC 940 ! T1% S1% -DESCRIPTOR REC TRACK/SECTOR 950 ! I% -ITEM IN DESCRIPT REC 960 ! T2% S3% -FILE REC.BLOCK START 970 ! S2% -NR OF REC IN BLOCK 980 ! S4% -REC COUNTER 990 ! T2% S5% -NEXT REC IN FILE 1000 ! N1% -FILE NR 1010 ! N2% -REC NR 1020 ! N3% N4% -FILE/REC NR TO BE TESTED 1080 Z%=CALL(24678%,192%) 1090 IF PEEK(-747%) ; CUR(13%,0%) "DISK STATUS ERROR -CAN'T READ DISK MAP" : RETURN 1095 IF Q%>39% ; CUR(21%,0%) STRING$(40%,61%); 1100 S1%=0% : S2%=0% : F%=-1% 1110 FOR T%=0% TO Q% 1120 D%=PEEK(62720%+T%) 1130 FOR R%=0% TO 7% 1131 X%=R% : Y%=T% : GOSUB 10000 1140 IF (D% AND 2%^(7%-R%)) THEN F%=-1% ELSE ; "."; : S1%=S1%+1% : IF F% S2%=S2%+1% : F%=0% 1150 NEXT R% : NEXT T% 1160 ; CUR(22%,9%) S1% " SECTORS FREE IN" S2% " BLOCKS"; 1170 ! +--------FILE ALLOC---------+ 1180 N$="A" : U%=0% 1190 FOR S%=0% TO 7% 1200 Z%=CALL(24678%,SWAP%(2%)+32%*S%) 1210 IF PEEK(-747%) ; CUR(4%+S%,2%) ""; : GOTO 1540 1220 ; CUR(4%+S%,2%) "*"; 1230 FOR N%=0% TO 14% 1240 IF PEEK(62736%+N%*16%+2%)=255% THEN GOTO 1530 : REM NEXT FILE 1250 T1%=PEEK(62736%+N%*16%) : S1%=PEEK(62736%+N%*16%+1%)/32% 1255 X%=S1% : Y%=T1% : GOSUB 10000 1260 Z%=CALL(24678%,SWAP%(T1%)+32%*S1%) 1270 IF PEEK(-747%) ; ""; : GOTO 1510 1280 ; N$; 1290 N1%=PEEK(62720%) : N1%=N1%/16%+16%*(N1%-N1%/16%*16%) 1300 N2%=PEEK(62721%)+SWAP%(PEEK(62722%)) 1310 IF N2%<>0% POKE FNA%(X1%,Y1%),PEEK(FNA%(X1%,Y1%)) OR 128% : GOTO 1510 1320 FOR I%=4% TO 256% STEP 2% 1330 T2%=PEEK(62720%+I%) 1340 IF T2%=255% 1510 1350 S2%=PEEK(62720%+I%+1%) 1360 S3%=S2%/32% : S2%=S2%-32%*S3% 1370 S5%=S3%-1% 1380 FOR S4%=0% TO S2% 1390 S5%=S5%+1% 1400 IF S5%=8% S5%=0% : T2%=T2%+1% 1405 X%=S5% : Y%=T2% : GOSUB 10000 1410 IF I%<>4% OR S4%<>0% ; CHR$(ASCII(N$)+32%); 1420 IF F1%=0% THEN 1480 1425 ; CUR(X1%,Y1%); 1430 Z%=CALL(24678%,SWAP%(T2%)+32%*S5%) : IF PEEK(-747%) ; ""; : GOTO 1470 1440 N3%=PEEK(62720%) : N3%=N3%/16%+16%*(N3%-N3%/16%*16%) 1450 N4%=PEEK(62721%)+SWAP%(PEEK(62722%)) 1460 IF N3%<>N1% OR N4%<>N2% POKE FNA%(X1%,Y1%),PEEK(FNA%(X1%,Y1%)) OR 128% 1470 N2%=N2%+1% 1480 NEXT S4% 1490 Z%=CALL(24678%,SWAP%(T1%)+32%*S1%) 1500 NEXT I% : X%=S1% : Y%=T1% : GOSUB 10000 1501 ; N$; : POKE FNA%(X1%,Y1%),PEEK(FNA%(X1%,Y1%)) OR 128% : GOTO 1510 1510 U%=U%+1% : N$=CHR$(ASCII(N$)+1%) : IF N$>"Z" N$="A" 1520 Z%=CALL(24678%,SWAP%(2%)+32%*S%) 1530 NEXT N% 1540 NEXT S% 1550 ; CUR(22%,0%) RIGHT$(NUM$(U%),2%) TAB(3%) "FILES,"; 1560 GOTO 11000 1570 ! +---------------------------+ 1580 ! ! CLEANUP SCREEN ! 1590 ! +---------------------------+ 1600 FOR I%=4% TO 11% : ; CUR(I%,0%) SPACE$(40%); : NEXT I% : ; CUR(0%,24%) SPACE$(20%); 1610 FOR I%=13% TO 22% : ; CUR(I%,0%) SPACE$(40%); : NEXT I% 1620 RETURN 10000 IF Y%>39% Y1%=Y%-40% : X1%=X%+9% ELSE X1%=X% : Y1%=Y% 10010 X1%=X1%+4% : ; CUR(X1%,Y1%); 10020 RETURN 11000 ; CUR(23%,0%) 'Tryck p} "RETURN" (H=Hardcopy PR:) '; : GET A$ : IF A$=CHR$(13%) GOTO 11010 11003 IF A$='H' OR A$='h' THEN Z%=FNHardcopy% 11005 GOTO 11000 11010 ; CUR(23%,0%) SPACE$(39%); : GOTO 1600 12000 DEF FNHardcopy% LOCAL Max%,Adress%,Teck% 12010 PREPARE 'PR:VSA36C72.5' AS FILE 9% 12020 Max%=PEEK(-172%) 12030 FOR I%=0% TO 23% 12040 IF Max%=40% THEN ; #9%,TAB(20%); 12050 IF Max%=40% THEN Adress%=31744%+I%*128%-I%/8%*984% ELSE Adress%=30720%+I%*80% 12060 FOR Y%=Adress% TO Adress%+Max%-1% 12070 Teck%=PEEK(Y%) 12080 IF Teck%<32% THEN Teck%=32% 12090 ; #9%,CHR$(Teck%); 12100 NEXT Y% 12110 ; #9% 12120 NEXT I% 12130 CLOSE 9% 12140 RETURN 0% 12150 FNEND 12160 END