1000 ! +++++++++++++++++++++++++++++++++++ 1010 ! Program... FILSTAT.BAS 1020 ! Utg}va 1.35 1986-06-16 1030 ! Utrustning ABC800-serien + UFD-dos el LUXNET-dos 1040 ! 1050 ! 1983-01-22 <1789> Bo Kullmar, Konstruerat 1060 ! 1985-10-25 <5357> Kristoffer Eriksson, Mod. f|r UFD-DOS 1070 ! 1986-01-22 <1789> Mod. f|r LUX-NET DOS 1080 ! 1986-01-23 <5357> Omarbetat, r{ttat, kombinerat 1090 ! 1986-02-03 <5357> PFN-skillnad i LUX-NET, '.Ufd'='/', ABC830 1100 ! 1986-02-19 <5357> Byte 3 = 254 => BACKUPad 1110 ! 1986-03-21 <5357> FNUs.(Sektor) i FNRead:s felmeddelande 1115 ! 1986-06-16 <5357> J{ttebugg: 8 libsektorer => 16 1120 ! 1130 ! Ins{nt av <5357> 1140 ! 1150 ! Ger en lista |ver en fils segment med logiska och fysiska sektornr. 1160 ! Kr{ver UFD- eller LUXNET-dos, valfri drivetyp. Klarar l{nkade RIB:ar. 1170 ! Kan troligen modifieras f|r {ldre dos, se kommentarer i FNDevdes 1180 ! och FNRead. 1190 ! +++++++++++++++++++++++++++++++++++ 1200 ! 1210 INTEGER : EXTEND 1220 DIM Cluster(128),L{ngd(128),Sektornr(128),Antsekt(128),Byte(15) 1230 Dosbuf=SWAP%(PEEK(64787)) 1240 DIM Dosbuf$=0 : POKE VAROOT(Dosbuf$),0,1,Dosbuf,SWAP%(Dosbuf),0,1 1250 Dostyp=-1 : IF PEEK(24678)=195 THEN Dostyp=PEEK(24688) AND 254 1260 ! i LUXNET blir Dostyp=8 1270 Komp830=0 ! S{tt till -1 om du har en 830-skiva i en 832 1280 Prfil$='PR:VSA36C72.55' ! Skrivarport 1290 Prinit$="" ! Ev styrkod till skrivare 1300 Vmarg=12 1310 Gul$=YEL 1320 Bl}$=CYA 1330 R|d$=CHR$(7)+RED 1340 ! 1350 ; CHR$(12);RED DBLE ' *** FILSTATUS F\R DISKFIL ***' NRML : ; : ; 1360 ! 1370 Drive=-1 : WHILE Drive<0 OR Drive>31 OR Libsek=0 1380 ; Gul$; 1390 INPUT 'Vilken drive (namn eller nr) ? 'Drive$ 1400 IF Drive$='' THEN 3070 1410 IF RIGHT$(Drive$,LEN(Drive$))=":" THEN Drive$=LEFT$(Drive$,LEN(Drive$)-1) 1420 ON ERROR GOTO 1440 : Drive=VAL(Drive$) : ON ERROR GOTO 1430 WHILE 0 1440 Drive=FNDevnr(FNCaps$(Drive$)) 1450 WEND 1460 Libsek=16 : Lmapsek=15 : Libcntsek=14 1470 Ufdpek=0 1480 IF Drive=30 THEN Ufdpek=24685 ! UFD 1490 IF Drive=31 AND Dostyp=8 THEN Ufdpek=24695 ! LFD 1500 IF Drive=27 AND Dostyp=8 THEN Ufdpek=24697 ! PFD 1510 WHILE Ufdpek 1520 Drive=PEEK(PEEK2(Ufdpek)+2) 1530 Libsek=PEEK2(PEEK2(Ufdpek)) 1540 Libcntsek=Libsek-1 1550 IF Libsek=0 THEN ; RED CHR$(7) "UFD ej aktiverat" 1560 IF 0 WEND 1570 Devdata=FNDevdes(Drive) 1580 WHILE (Devdata AND 192)=128 OR Komp830 ! ABC830 1590 Lmapsek=7 1600 IF Ufdpek=0 THEN Libcntsek=6 ! Libsek=8 f|r reservlib p} gammal 830 1610 IF 0 WEND 1620 WEND 1630 ! 1640 ; Gul$; : INPUT 'Filnamn (BAC default)? 'Fil$; 1650 IF Fil$='' THEN 1370 1660 Fil$=FNCaps$(Fil$) 1670 IF RIGHT$(Fil$,LEN(Fil$))="/" THEN Fil$=LEFT$(Fil$,LEN(Fil$)-1)+'.Ufd' 1680 WHILE 1 1690 Pos=INSTR(1,Fil$,'.') 1700 IF Pos>9 THEN 1640 1710 IF Pos=0 THEN Fil$=Fil$+'.BAC' : ; '.BAC'; : WEND 1720 Program$=LEFT$(Fil$,Pos-1)+SPACE$(9-Pos)+LEFT$(RIGHT$(Fil$,Pos+1)+' ',3) 1730 ! 1740 ; : ; Gul$ 'Utskrift p} skrivare (J/) ? '; 1750 GET \$ : ; \$ 1760 IF \$='J' OR \$='j' THEN Pr=1 1770 ! 1780 ! ___L{s in filantal i biblioteks-sektorer___ 1790 FOR I=0 TO 15 : Byte(I)=16 : NEXT I 1800 Z=FNRead(Libcntsek) ! Oftast Bitmap 1810 IF Z=128 THEN STOP 1820 IF Z=0 THEN FOR I=0 TO 15 : Byte(I)=PEEK(Dosbuf+239+I) : NEXT I 1830 ! 1840 ! ___L{s in clusterstorlek___ 1850 Clusiz=0 1860 Z=FNRead(Lmapsek) ! Lockoutmap 1870 IF Z=0 THEN Clusiz=PEEK(Dosbuf+255) 1880 IF Clusiz<>(SWAP%(Devdata) AND 7) THEN ; RED 'Clustersize {r inte den vanliga.' 1890 IF Clusiz>7 THEN ; RED 'Clustersize {r orimligt stor: 2 **' Clusiz : Z=-1 1900 IF Z THEN ; F{rg1$; : INPUT 'Clusterstorlek: 'Clusiz ELSE Clusiz=2^Clusiz 1910 IF Clusiz<8 THEN Ldafac=32/Clusiz ELSE Ldafac=1 1920 ! 1930 ! ___Lokalisera filen i biblioteket____ 1940 FOR F=0 TO 15 1950 WHILE Byte(F)>0 AND Byte(F)<255 1960 IF FNRead(Libsek+F) THEN ; R|d$ "Bibliotekssektor" F "ol{sbar." 1970 B=INSTR(1,Dosbuf$,Program$)-1 1980 WHILE MOD(B,16)=4 1990 N{starib=SWAP%(PEEK2(Dosbuf+B-4))/Ldafac 2000 Libl{ngd=PEEK2(Dosbuf+B-2) 2010 Pfn=F OR B AND -16 2020 GOTO 2100 2030 WEND 2040 IF 0 WEND 2050 NEXT F 2060 ; 2070 ; R|d$ 'Filen finns ej p} enhet ' Drive$ '!' 2080 ; 2090 END 2100 ! 2110 ; Gul$ STRING$(79,ASCII("-")) 2120 WHILE Pr 2130 Gul$=SPACE$(Vmarg) : R|d$=SPACE$(Vmarg) : Bl}$=SPACE$(Vmarg) 2140 PREPARE Prfil$ AS FILE Pr 2150 ; #Pr Prinit$; 2160 ; #Pr,Gul$ '*** FILSTATUS F\R DISKFILEN ' Fil$ ' ***' : ; #Pr 2170 IF 0 WEND 2180 ; #Pr,Bl}$ 'Det {r fil nr' B/16 'i bibliotekssektor' F; 2190 ; #Pr,' (fysisk sektor ' NUM$(FNUs.(F+Libsek)) ')' 2200 ; #Pr,Bl}$ 'Internt filnummer: ' NUM$(FNFilnr(Pfn)) ', PFN = ' NUM$(Pfn) '.' 2210 ; #Pr 2220 ! 2230 WHILE N{starib<>-1 AND NOT Flgavbryt 2240 Rib=N{starib 2250 Ribnr=Ribnr+1 2260 ; #Pr,Bl}$ "Headerblock (RIB) p} sektor" FNUs.(Rib) 2270 ! 2280 ! ___L{s RIB____________ 2290 IF FNRead(Rib) THEN ; #Pr,R|d$ "RIB ol{sbar." : STOP 2300 Lrn=PEEK2(Dosbuf+1) 2310 N{starib=PEEK2(Dosbuf+230) : IF Dostyp<>8 THEN N{starib=-1 2320 F|rrarib=PEEK2(Dosbuf+232) 2330 Lrnbas=PEEK2(Dosbuf+234) 2340 Lrl{ngd=PEEK2(Dosbuf+236) 2350 L{nkar=PEEK(Dosbuf+254) : IF Dostyp<>8 THEN L{nkar=1 2360 X=PEEK(Dosbuf+0) 2370 WHILE X<>Pfn 2380 IF Dostyp<>8 THEN ; #Pr,R|d$ 'Fysiskt filnr (PFN) =' X ', borde vara' Pfn; 2390 IF Dostyp=8 THEN ; #Pr,Bl}$ 'Fysiskt filnr (PFN) lagrat i RIB:' X; 2400 ; #Pr,'(RIB byte 0).' 2410 IF 0 WEND 2420 IF Lrn THEN ; #Pr,R|d$ 'Logiskt sektornr (LRN) =' FNUs.(Lrn) ', ska vara 0 (RIB byte 1W).' 2430 X=PEEK(Dosbuf+3) 2440 IF X=254 THEN ; #Pr,Bl}$ 'Filen har s{kerhetskopierats (RIB byte 3 = 254).' 2450 IF X<254 THEN ; #Pr,R|d$ 'Oanv{nd byte {r' X ', ska vara 255 (RIB byte 3).' 2460 ! 2470 ! ___L{s segmentdata____ 2480 Pos=4 2490 Block=1 2500 WHILE PEEK(Dosbuf+Pos)<>255 AND Block<127 2510 Segm=SWAP%(PEEK2(Dosbuf+Pos)) 2520 Pos=Pos+2 2530 Cluster(Block)=Segm/Ldafac AND NOT Clusiz-1 2540 L{ngd(Block)=(Segm AND (Ldafac*Clusiz)-1)+1 2550 Sektornr(Block)=Cluster(Block) 2560 Antsekt(Block)=L{ngd(Block)*Clusiz 2570 Block=Block+1 2580 WEND 2590 WHILE Pos>229 AND Dostyp=8 2600 N{starib=-1 : F|rrarib=-1 : L{nkar=1 2610 ; #Pr,Bl}$ 'Inte en LUX-NET-fil (Segmetpekarna slutar inte f|re byte 230)' 2620 IF 0 WEND 2630 ! 2640 ! ___Summera sektorer___ 2650 Antsekt=0 2660 FOR I=1 TO Block-1 2670 Antsekt=Antsekt+Antsekt(I) 2680 NEXT I 2690 ! 2700 ! ___Skriv ut data______ 2710 ; #Pr,Bl}$ 'Antal segment: ' NUM$(Block-1); 2720 ; #Pr,', vilka rymmer' FNUs.(Antsekt) 'sektorer.' 2730 WHILE Ribnr=1 2740 IF Dostyp=8 THEN ; #Pr,Bl}$ 'Antal biblioteks-l{nkar:' L{nkar 2750 ; #Pr,Bl}$ 'Antal anv{nda sektorer '; 2760 IF Libl{ngd OR Dostyp<>8 OR Lrl{ngd=-1 THEN ; #Pr 'enligt LIB:' FNUs.(Libl{ngd) ' '; 2770 IF Dostyp=8 AND Lrl{ngd<>-1 THEN ; #Pr 'enligt RIB:' FNUs.(Lrl{ngd) '(RIB byte 236W)'; 2780 ; #Pr 2790 IF 0 WEND 2800 WHILE Dostyp=8 2810 IF N{starib<>-1 THEN ; #Pr,Bl}$ 'N{sta RIB-sektor:' FNUs.(N{starib) '(RIB byte 230W)' 2820 IF F|rrarib<>-1 THEN ; #Pr,Bl}$ 'F|rra RIB-sektorn:' FNUs.(F|rrarib) '(RIB byte 232W)' 2830 IF Lrnbas<>-1 THEN ; #Pr,Bl}$ 'Sista logiska sektornr (LRN) i sista segmentet i f|rra RIB:' FNUs.(Lrnbas+1) '(RIB byte 234)' 2840 IF 0 WEND 2850 ; #Pr, 2860 IF Pr THEN ; #Pr 2870 ! 2880 ! ___Skriv ut segment___ 2890 ; #Pr,Gul$ " Logisk Fysisk Segmentl{ngd" 2900 ; #Pr,Gul$ "Seg Sektor-Sektor Sektor-Sektor Sektorer Clustrar" 2910 Sektor=0 2920 FOR I=1 TO Block-1 2930 R{knare=0 2940 Flagga3=6 2950 ; #Pr Gul$; 2960 ; #Pr USING "###: #####_-#####" I FNUs.(Sektor) FNUs.(Sektor+Antsekt(I)-1); 2970 ; #Pr USING " #####_-#####" FNUs.(Cluster(I)) FNUs.(Cluster(I)+Antsekt(I)-1); 2980 ; #Pr USING " ### ###" Antsekt(I) L{ngd(I) 2990 Sektor=Sektor+Antsekt(I) 3000 Fgsp}rnr=Cluster(I) 3010 IF NOT FNPaus THEN NEXT I 3020 ; #Pr, : ; #Pr, 3030 IF Pr THEN ; #Pr : ; #Pr 3040 WEND 3050 IF Flgavbryt THEN ; #Pr Bl}$ '-Avbrutet-' 3060 IF Pr THEN ; #Pr CHR$(12); 3070 END 3080 ! 3090 DEF FNFilnr(A) 3100 Filnr=(A AND 240)/16+(A AND 15)*15 3110 RETURN Filnr 3120 FNEND 3130 ! 3140 DEF FNUs.(I) 3150 IF I<0 THEN RETURN 65536.+I ELSE RETURN I 3160 FNEND 3170 ! 3180 DEF FNDevnr(Enhet$) LOCAL A 3190 IF Dostyp=-1 THEN RETURN VAL(RIGHT$(Enhet$,LEN(Enhet$))) 3200 A=PEEK2(65403) 3210 WHILE A 3220 IF CHR$(PEEK(A+2),PEEK(A+3),PEEK(A+4))=LEFT$(Enhet$+" ",3) THEN RETURN PEEK(A+7) 3230 A=PEEK2(A) : WEND 3240 RETURN -1 3250 FNEND 3260 ! 3270 DEF FNDevdes(Devnr) LOCAL A,Devdes 3280 IF Dostyp=-1 THEN RETURN 0 ! RETURN 128 f|r gammalt ABC830-dos 3290 Devdes=PEEK2(24683) 3300 IF (Devnr AND 31)<4 THEN Devnr=PEEK(Devdes) 3310 RETURN PEEK2(Devdes+(Devnr AND 28)) 3320 FNEND 3330 ! 3340 DEF FNCaps$(S$) LOCAL P,T$=160 3350 T$=S$ 3360 WHILE P="`" THEN MID$(T$,P,1)=CHR$(ASCII(MID$(T$,P,1))-32) 3390 WEND 3400 RETURN T$ 3410 FNEND 3420 ! 3430 DEF FNRead(Sektor) LOCAL Fsektor,E 3440 Fsektor=Sektor 3450 IF Komp830 THEN Fsektor=Fsektor*4 3460 ! Fsektor=Fsektor*32 ! Gammalt ABC830-dos 3470 ! Fsektor=(FSektor AND 7) OR (FSektor AND NOT 7)*32 ! N}'t annat gammalt 3480 POKE -767,Drive 3490 E=CALL(24678,Fsektor) 3500 E=PEEK(64789) 3510 IF E THEN ; RED CHR$(7) "Disk-fel" E "p} sektor" FNUs.(Sektor) 3520 RETURN E 3530 FNEND 3540 ! 3550 DEF FNPaus LOCAL I$=1 3560 WHILE SYS(5) 3570 GET I$ 3580 WHILE I$=" " 3590 ; " -Pause- "; : GET I$ 3600 ; STRING$(9,8) SPACE$(9) STRING$(9,8); 3610 IF 0 WEND 3620 IF ASCII(I$)=192 THEN Flgavbryt=-1 3630 WEND 3640 RETURN Flgavbryt 3650 FNEND