2 ! +++++++++++++++++++++++++++++++++++ 3 ! Program .... FILSTAT.800 4 ! Utg}va 1.2 1983-01-22 5 ! av (c) Bo Kullmar 9 ! Ins{nt av Bo Kullmar, medl 1789. 10 ! Anger var en fils block finns p} 11 ! skiva f|r disk med dubbel density 12 ! enkel sida. 13 ! * = Headerblock 14 ! # = Datablock 15 ! F|r disk ABC830. F|r att k|ras under superdoset m}ste programmet {ndras. 17 ! +++++++++++++++++++++++++++++++++++ 40 ! Bo Kullmar 60 FLOAT 80 EXTEND 300 DIM B$=257% 310 DIM Sp}rnr%(20%),L{ngd$(20%)=8% 320 DIM Sektornr%(20%),Antsekt%(20%) 1000 ; CHR$(12%);RED DBLE ' *** FILSTATUS F\R DISKFIL ***' : ; : ; 1010 ; YEL 'Vilken dirve (Drive 0 def)? '; 1020 GET Drive$ 1030 Rad%=PEEK(65363%) 1040 IF Drive$<>'1' AND Drive$<>'0' THEN Drive$='0' : ; CUR(Rad%,29%) '0' ELSE ; CUR(Rad%,29%) Drive$ 1050 Drive%=VAL(Drive$) 1060 ; 1070 ; YEL; : INPUT 'Filnamn (BAC default)? 'Program$ 1080 Rad%=PEEK(65363%)-1% 1090 WHILE INSTR(1%,Program$,'.')<>0% 1100 L{ngd%=LEN(Program$) 1110 IF L{ngd%>12% THEN 1070 1120 Pos%=INSTR(1%,Program$,'.') 1130 Programl$=LEFT$(Program$,Pos%-1%) 1140 Programr$=RIGHT$(Program$,Pos%+1%) 1150 L{ngd%=LEN(Programr$) 1160 IF L{ngd%>4% THEN 1070 1170 GOTO 1190 1180 WEND 1190 WHILE INSTR(1%,Program$,'.')=0% 1200 Pos%=INSTR(1%,Program$,'.') 1210 L{ngd%=LEN(Program$) 1220 IF L{ngd%>8% THEN 1070 1230 ; CUR(Rad%,24%+L{ngd%) '.BAC' 1240 Programl$=Program$ 1250 Programr$='BAC' 1260 GOTO 1280 1270 WEND 1280 FOR C%=LEN(Programl$) TO 7% 1290 Programl$=Programl$+CHR$(32%) 1300 NEXT C% 1310 Program$=Programl$+Programr$ 1320 FOR I%=1% TO 8% 1330 Bok%=ASCII(MID$(Program$,I%,1%)) 1340 IF Bok%>93% THEN MID$(Program$,I%,1%)=CHR$(Bok%-32%) 1350 NEXT I% 1360 FOR I%=9% TO 11% 1370 Bok%=ASCII(MID$(Program$,I%,1%)) 1380 IF Bok%>93% THEN MID$(Program$,I%,1%)=CHR$(Bok%-32%) 1390 NEXT I% 1400 ; : ; YEL; 1410 ; 'Utskrift p} skrivare (J/) ? '; 1420 GET \$ : ; \$ 1430 IF \$='J' OR \$='j' THEN Pr%=1% 1440 Bl%=INSTR(1%,Program$,' ') 1450 IF Bl%=0% THEN Bl%=8% ELSE Bl%=Bl%-1% 1460 Fil$=LEFT$(Program$,Bl%)+'.'+RIGHT$(Program$,9%) 1470 POKE -767%,Drive% 1480 Z%=CALL(24678%,192%) 1490 FOR I%=0% TO 7% 1500 Byte%(I%)=PEEK(-2577%+I%) 1510 NEXT I% 1520 FOR F%=0% TO 7% 1530 IF Byte%(F%)<2% THEN 1640 1540 Z%=CALL(24678%,512%+F%*32%) 1550 FOR B%=62720% TO 62976% 1560 B$=B$+CHR$(PEEK(B%)) 1570 NEXT B% 1580 B%=INSTR(1%,B$,Program$) 1590 IF B%=0% THEN 1630 1600 Sp}r%=PEEK(62720%+B%-5%) 1610 Sektor%=PEEK(62720%+B%-4%)/32% 1620 GOTO 2000 1630 B$='' : NEXT F% 1640 ; 1650 ; RED 'Filen finns ej p} skivan i drive ' Drive$ '!' 1660 ; 1670 END 2000 ! L{ser headerblocket 2010 Z%=CALL(24678%,Sp}r%*256%+Sektor%*32%) 2020 Byte%=62720% 2030 Filnr%=FNFilnr%(PEEK(Byte%+0%)) 2040 IF PEEK(Byte%+1%)<>0% AND PEEK(Byte%+2%)<>0% THEN Z%=FNFel% 2050 IF PEEK(Byte%+3%)<>255% THEN Z%=FNFel% 2060 Pos%=4% 2070 Block%=1% 2080 WHILE PEEK(Byte%+Pos%)<>255% 2090 Sp}rnr%(Block%)=PEEK(Byte%+Pos%) 2100 Pos%=Pos%+1% 2110 L{ngd%(Block%)=PEEK(Byte%+Pos%) 2120 Sektornr%(Block%)=(L{ngd%(Block%) AND 224%)/32% 2130 Antsekt%(Block%)=(L{ngd%(Block%) AND 31%)+1% 2140 Pos%=Pos%+1% 2150 Block%=Block%+1% 2160 WEND 2170 Antsekt%=0% 2180 FOR I%=1% TO Block%-1% 2190 Antsekt%=Antsekt%+Antsekt%(I%) 2200 NEXT I% 3000 IF Pr% THEN PREPARE 'PR:VSA36C72.55' AS FILE Pr% 3010 IF Pr% THEN T%=20% ELSE T%=1% 3020 IF Pr% THEN ; #Pr%,TAB(20%) '*** FILSTATUS F\R DISKFILEN ' Fil$ ' ***' : ; #Pr% 3030 ; #Pr%, 3040 ; #Pr%,TAB(T%) CYA 'Internt filnummer:' Filnr% 3050 ; #Pr%, 3060 ; #Pr%,TAB(T%) CYA 'Antal block:' Block%-1% ' Antal sektorer:' Antsekt% 3070 ; #Pr%, 3080 IF Pr% THEN ; #Pr% 3090 I%=1% 3100 Max%=8% 3110 Min%=0% 3120 ; #Pr%,TAB(T%) YEL 'Sp}r: Sektor:' 3130 ; #Pr%,TAB(T%) YEL ' 1 1 1 1 1 1' 3140 ; #Pr%,TAB(T%) YEL ' 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5' 3150 Z%=FNIf40% 3160 ; #Pr%,TAB(T%) CYA Sp}rnr%(1%);TAB(T%-1%+(7%+Sektornr%(I%)*2%)) GRN '*'; : R{knare%=1% 3170 Fgsp}rnr%=Sp}rnr%(I%) 3180 Sektornr%(I%)=Sektornr%(I%)+1% 3190 Z%=FNSkrivblock% 3200 FOR I%=2% TO Block%-1% 3210 R{knare%=0% 3220 Flagga3%=6% 3230 Z%=FNSkrivblock% 3240 Fgsp}rnr%=Sp}rnr%(I%) 3250 NEXT I% 3260 ; #Pr%, : ; #Pr%, 3270 IF Pr% THEN 3280 ELSE 3310 3280 ; #Pr% : ; #Pr% 3290 ; #Pr%,TAB(T%) ' * = Headerblock' 3300 ; #Pr%,TAB(T%) ' # = Datablock' 3310 END 4000 DEF FNFilnr%(A%) 4010 Filnr%=(A% AND 240%)/16%+(A% AND 15%)*15% 4020 RETURN Filnr% 4030 FNEND 4040 DEF FNFel% 4050 ; CHR$(7%,7%,7%,7%) 4060 ; DBLE 'FEL I EN BYTE KOLLA HEADERBLOCKET!' 4070 END 4080 RETURN 0% 4090 FNEND 4100 DEF FNIf40% 4110 WHILE Sp}rnr%(I%)>39% 4120 Sp}rnr%(I%)=Sp}rnr%(I%)-40% 4130 Sektornr%(I%)=Sektornr%(I%)+8% 4140 Max%=16% 4150 Min%=8% 4160 RETURN 0% 4170 WEND 4180 IF Sektornr%(I%)<8% THEN Max%=8% : Min%=0% 4190 RETURN 0% 4200 FNEND 4210 DEF FNSkrivblock% 4220 IF Flagga%=5% THEN Flagga%=9% ELSE Flagga%=0% 4230 Z%=FNIf40% 4240 IF Sektornr%(I%)=Max% THEN Sp}rnr%(I%)=Sp}rnr%(I%)+1% : Sektornr%(I%)=Min% : Flagga%=9% : Flagga2%=3% 4250 Z%=FNIf40% 4260 IF Flagga2%<>3% OR Flagga3%=6% THEN IF Fgsp}rnr%<>Sp}rnr%(I%) THEN Flagga%=9% : Flagga3%=0% : ; #Pr%, 4270 WHILE R{knare%22% THEN GET \$ 4320 Sektornr%(I%)=Sektornr%(I%)+1% 4330 WHILE Sektornr%(I%)=Max% 4340 Sp}rnr%(I%)=Sp}rnr%(I%)+1% 4350 Fgsp}rnr%=Sp}rnr%(I%) : Sektornr%(I%)=Min% 4360 Flagga%=9% : GOTO 4380 4370 WEND 4380 Z%=FNIf40% 4390 WEND 4400 IF Flagga%=9% THEN Flagga%=5% 4410 RETURN 0% 4420 FNEND