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