100 REM SAVE RESCUE.BAC v 1.4 B|rje Gustavsson, Osby 0479-10620 110 REM 120 REM *=*=*=*=*=*=*=*=*=*=*=*=*=*=* huvudprogram *=*=*=*=*=*=*=*=*=*=*=*=*=* 130 REM 140 DIM P%(255%),B%(7%) 150 U%=PEEK(590)/2%-20% : REM f|r tab vid 40/80 tkn 160 REM ____________________ information _____________ 170 ; CHR$(12%)CUR(0%,U%+7%)'** RESCUE.BAC v 1.4 **' 180 ; CUR(1%,U%+7%)STRING$(22%,61%) 190 ; : ; 'Detta program f|rs|ker r{dda program p} en skiva som f|rlorat informationen i biblioteket. '; 195 ; 'De restaurerade filerna f}r extension .RES' : ; 200 ; 'Programmet kan dock inte r{dda allt.' 205 ; 'Om du t.ex. sparat n}got p} skivan efter det biblioteket f|rst|rts, s} har n}got'; 210 ; 'annat program p} skivan skrivits |ver.' : ; 220 ; 'Programmet kan ocks} missuppfatta gammal information p} skivan.' : ; 230 ; 'Skivan {r anv{ndbar direkt efter restaureringen, men alla sektorer {r markerade som upptagna.'; 240 ; ' Kopiera d{rf|r skivan med COPYLIB eller liknande program.' 250 REM ____________________ s{tt drive ____________ 260 ONERRORGOTO 260 : REM vid fel inmatning 270 ; CUR(22%,0%)'Vilken drive'; : INPUT D% 280 IF D%<0% OR D%>7% 270 : REM felaktigt drivenummer 290 POKE -767%,D% : REM s{tt drivenumret 300 ONERRORGOTO 0 310 Z%=CALL(24678%)+CALL(24675%) : IF PEEK(-747%) 1000 : REM kolla drive 320 REM _______________ l{s in en sektor ____________ 330 FOR S%=24% TO 639% : REM sekt d{r det kan finnas program 340 ; CUR(22%,16%)'Sektor'S% 350 T%=INT(S%/8%) 360 ; CUR(22%,28%)'Sp}r'T%/2% 370 S4%=S%-T%*8% 380 Z%=CALL(24678%,32%*S%) : REM l{s sektor 390 IF PEEK(-747%) 1000 : REM felkod fr}n diskkontrollen 400 IF PEEK(62721%)=0% GOSUB 470 : REM kolla om det {r en header 410 NEXT S% : REM n{sta sektor 420 GOSUB 890 : REM justera sektor 6 (bitmap lockout) 430 ; CUR(20%,0%)'Skivan klar.' 440 END 450 REM *=*=*=*=*=*=*=*=*=* slut p} huvudprogrammet *=*=*=*=*=*=*=*=*=*=*=*=* 460 REM 470 REM ================================ jobbet ============================ 480 FOR I%=0% TO 255% : P%(I%)=PEEK(62720%+I%) : NEXT I% : REM spar headerinf 490 GOSUB 540 : REM r{kna ut filnamnets plats i LIB-sekt 500 GOSUB 580 : REM kalkylera filstorlek 510 GOSUB 660 : REM kolla och ordna i LIB-sekt 520 RETURN 530 REM 540 REM ___________ r{kna ut filnamnets plats i LIB-sekt ___ 550 P1%=INT(P%(0%)/16%) : REM relativ plats i sektorn (1-15) 560 S1%=P%(0%)-P1%*16% : REM relativ LIB-sekt (0-7) 570 RETURN 580 REM __________________________ kalkylera filstorlek ____ 590 FOR I%=5% TO 237% STEP 2% : REM m|jliga platser f|r filfragment 600 IF (P%(I%)=255% AND P%(I%-1%)=255%) OR (P%(I%)=255% AND P%(I%+1%)=255%) 640 : REM inga fler fragment 610 S9%=P%(I%) AND 31% : REM fragmentets storlek 620 S2%=S2%+S9% : REM kumulera 630 NEXT I% : REM n{sta fragment 640 S2%=S2%+1% : REM plus headern 650 RETURN 660 REM ____________________ kolla och ordna i LIB-sekt ____ 670 Z%=CALL(24678%,32%*(16%+S1%)) : REM s1%=LIB-sekt nr relativt sekt 16 680 S9%=62720+(P1%*16%) : REM p1%=LIB-platsnr relativt i sekt 690 IF PEEK(S9%)<>T% 780 : REM r{tt pekare till headerns sp}r? 700 IF PEEK(S9%+1%)<>S4%*32% 780 : REM r{tt sektor p} headerns sp}r? 710 FOR I%=4% TO 14% : REM antal m|jliga bokst{ver i ett filnamn 720 S8%=PEEK(S9%+I%) : REM h{mta ett tecken 730 IF S8%<32% OR S8%>93% 780 : REM kolla om godk{nt tecken 740 NEXT I% : REM n{sta tecken i ev. filnamn 750 IF PEEK(S9%+15%)<>255% 780 : REM saknas slutbyte 760 POKE S9%+2%,S2%,SWAP%(S2%) : S2%=0% : REM skriv in filstorlek 770 GOTO 870 : REM skriv sekt p} skiva 780 FOR I%=62720% TO 62735% : POKE I%,0% : NEXT I% : REM 16 st 0 f|rst i sekt 790 POKE S9%,T%,S4%*32%,S2%,SWAP%(S2%) : S2%=0% : REM l{gg in headerpek+storlek 800 FOR I%=S9%+4% TO S9%+11% : REM l{gg in p} filnamnsplats 810 POKE I%,32% : REM blanksteg 820 NEXT I% : REM n{sta tkn p} filnamnsplats 830 F4%=F4%+1% : REM r{knare f|r antal restaurerade filer 840 IF F4%>25% F4%=0% : F5%=F5%+1% : REM r{knare till filnamn 850 POKE S9%+4%,70%,73%,76%,65%+F5%,65%+F4% : REM l{gg in filnamn 8 tkn 860 POKE S9%+12%,82%,69%,83% : REM l{gg in extension RES 870 Z%=CALL(24675%,32%*(16%+S1%))+CALL(24675%,32%*(8%+S1%)) : REM skriv sektor 880 RETURN 890 REM _______________ justera sektor 6 (bitmap lockout) ____ 900 Z%=CALL(24678%,32%*6%) : REM l{s sektor 6 910 FOR I%=0% TO 79% 920 POKE 62720%+I%,255% : REM sp{rra alla sektorer 930 NEXT I% 940 FOR I%=0% TO 7% 950 POKE 62959%+I%,16% : REM |ppnar f|r l{sning av filnamn 960 NEXT I% 970 Z%=CALL(24675%,32%*6%) : REM skriv justerad sektor 6 980 RETURN 990 REM ===================================================== felhantering 1000 ; : RESTORE : FOR A%=1% TO 4% : READ N%,F$ : IF (PEEK(-747%) AND N%) ; CHR$(7%)F$ 1010 NEXT A% 1020 END 1030 DATA 8, 'Checksummafel' 1040 DATA 16, 'D}lig disk' 1050 DATA 64, 'Skivan skrivskyddad' 1060 DATA 128,'Luckan |ppen'