100 REM 110 REM +-----------------------------+ 120 REM ! D I S K S T A T -ABC80 ! 130 REM ! =============== DISKETTE ! 140 REM ! STATUS ! 150 REM ! ! 160 REM ! (c) Per Lindberg 1980-01-27 ! 170 REM ! ! 180 REM ! *************************** ! 190 REM ! *** The mad programmer *** ! 200 REM ! *** strikes again..... *** ! 210 REM ! *************************** ! 220 REM +-----------------------------+ 230 REM 240 REM ** INIT ** 245 Q%=79% 250 C1$="X01BALQ" 260 D%=1% : POKE -767%,D% 270 DEFFNP%(A%)=PEEK(A%)+SWAP%(PEEK(A%+1%)) 280 DEFFNM%(I%,J%)=I%-I%/J%*J% 290 DEFFNA%(Y%,X%)=31744%+5%*(Y% AND 24%)+128%*(Y% AND 7%)+X% 300 ; CHR$(12%); 310 ; TAB(0%)"TRACK/SECTOR MAP DRIVE 1" 320 ; " 1 2 3" 330 ; "0123456789012345678901234567890123456789"; 340 ; CUR(3%,0%)"========================================"; 350 ; CUR(12%,0%)"========================================"; 360 REM +----------------------+ 370 REM ! M E N Y ! 380 REM +----------------------+ 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%=ASC(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%); : END 512 GOSUB 1600 : IF Q%<40% Q%=79% ELSE Q%=39% 513 GOTO 390 520 ; CHR$(7%);CUR(15%,9%); : GOTO 480 530 REM +---------------------------+ 540 REM ! S E T D R I V E N R ! 550 REM +---------------------------+ 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 REM +---------------------------+ 590 REM ! SCAN FOR DISK ERRORS ! 600 REM +---------------------------+ 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 REM +---------------------------+ 760 REM ! MAP DISK FILES ! 770 REM +---------------------------+ 780 GOSUB 1600 790 ; CUR(0%,26%)"FILE SPACE:"; 800 F1%=0% 810 GOTO 1080 820 REM +---------------------------+ 830 REM ! COMPLETE LIB CHECK ! 840 REM +---------------------------+ 850 GOSUB 1600 860 ; CUR(0%,26%)"LIB CHECK:"; 880 F1%=-1% 890 REM +---------------------------+ 900 REM ! S C A N L I B R A R Y ! 910 REM +---------------------------+ 920 REM S% -SECTOR IN LIB 930 REM N% -ITEM IN LIB REC 940 REM T1% S1% -DESCRIPTOR REC TRACK/SECTOR 950 REM I% -ITEM IN DESCRIPT REC 960 REM T2% S3% -FILE REC.BLOCK START 970 REM S2% -NR OF REC IN BLOCK 980 REM S4% -REC COUNTER 990 REM T2% S5% -NEXT REC IN FILE 1000 REM N1% -FILE NR 1010 REM N2% -REC NR 1020 REM 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 REM +--------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 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$(ASC(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$(ASC(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 REM +---------------------------+ 1580 REM ! CLEANUP SCREEN ! 1590 REM +---------------------------+ 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 11001 IF A$='H' THEN OPEN 'PR:' ASFILE 1 : GOSUB 65000 11002 ; #1CHR$(13%,13%,13%,13%) 11003 GOTO 11000 11010 ; CUR(23%,0%)SPACE$(39%); : GOTO 1600 64999 REM Underprogram f|r utskrift av bildsk{rmsinneh}ll, G|ran St. 65000 DEFFNC%(Y%,X%)=PEEK(884%+2%*Y%)+SWAP%(PEEK(885%+2%*Y%))+X% 65001 F1%=INP(58%) AND 2% : IF F1%=2% THEN ; CHR$(7%) : RETURN : REM om skrivaren ej tillslagen vid "HARDCOPY" 65002 FOR Y%=0% TO 23% 65003 A$='' 65004 FOR X%=0% TO 39% 65005 A$=A$+CHR$(PEEK(FNC%(Y%,X%))) 65006 NEXT X% 65007 FOR I%=40% TO 1% STEP -1 65008 IF ASC(MID$(A$,I%,1%))<>32% THEN 65010 65009 NEXT I% 65010 A$=LEFT$(A$,I%) 65011 ; #1A$ 65012 NEXT Y% 65014 RETURN