1 REM Ins{nd av: Kristoffer Eriksson <5357> 1988-03-31 23.24.09 (WRITE) 10 ! save UFDCHECK 20 ! +-----------------------------------------------------+ 30 ! ! UFDCHECK 1.0 - Kolla/Justera antal filer i UFD. ! 40 ! ! Av Kristoffer Eriksson <5357>, 1988. ! 50 ! ! F|r ABC800-serien med UFD-DOS. ! 60 ! ! F}r fritt kopieras endast i ickekommersiellt syfte. ! 70 ! ! Hanteras varsamt - kan f|rst|ra bibliotek! ! 80 ! +-----------------------------------------------------+ 90 ! 100 ! Ver-/-Datum----/-Sign-/-Kommentar----- 110 ! 1.0 / 88-03-31 / 5357 / 120 ! 130 ! Det har rapporterats att det n}gon enstaka g}ng inte g}r att radera 140 ! UFD:er med felmeddelande om att det inte {r tomt, trots att man med 150 ! LIB inte kan se n}gra filer i UFD:et. Med det h{r programmet kan man 160 ! titta lite n{rmare p} biblioteket och eventuellt justera antalet 170 ! filer. 180 ! 190 ! 200 INTEGER : EXTEND 210 ! 220 Aread=24678 : Awrite=24675 230 POKE VAROOT(Dosbuf$),0,1,0,PEEK(64787),0,1 240 Aufdo=65527 : Aufdd=65529 250 DIM Cnt(0:15),Ejtom(0:15),Riktig(0:15) 260 ; : ; "UFDCHECK - Kolla UFD-bibliotekets integritet." : ; 270 ! 280 Offset=PEEK2(Aufdo) : Drive=PEEK(Aufdd) 290 IF Offset=0 OR Offset=-1 THEN ; "Inget UFD inst{llt." : GOTO 920 300 ; "Aktuellt UFD finns p} drive" Drive "sektor " NUM$(Offset) "." 310 ; 320 ! 330 Z=FNRw(Aread,Drive,Offset-1) 340 FOR I=0 TO 15 350 Cnt(I)=ASCII(RIGHT$(Dosbuf$,240+I)) 360 P}st}dd=P}st}dd+Cnt(I) 370 NEXT I 380 ; "Antal filer i UFD:et enligt filnamnsr{knarna:",P}st}dd 390 ! 400 Tom1$=STRING$(16,255) : Tom2$=STRING$(11,255) 410 FOR I=0 TO 15 420 Z=FNRw(Aread,Drive,Offset+I) 430 FOR Fil=1 TO 241 STEP 16 440 IF MID$(Dosbuf$,Fil,16)<>Tom1$ THEN Ejtom(I)=Ejtom(I)+1 450 IF MID$(Dosbuf$,Fil,2)<>CHR$(255,255) AND MID$(Dosbuf$,Fil+2,2)<>CHR$(255,255) AND MID$(Dosbuf$,Fil+4,11)<>Tom2$ Riktig(I)=Riktig(I)+1 460 NEXT Fil 470 Ejtomma=Ejtomma+Ejtom(I) 480 Riktiga=Riktiga+Riktig(I) 490 NEXT I 500 ; "Antal filnamn med filpekare i UFD:et:",,Riktiga 510 ; "Antal ej tomma filnamnsplatser i UFD:et:",,Ejtomma 520 ; 530 ! 540 IF EjtommaRiktiga THEN ; "Filr{knarna verkar f|r h|ga." 590 IF Ejtomma<>Riktiga THEN ; "Dessutom finns felaktiga fil-entryn i biblioteket. Skr{p?" 600 IF P}st}dd=Ejtomma THEN ; "Och filr{knarna st{mmer om man r{knar med de felaktiga entryna." 610 ! 620 ; 630 ; "Det h{r programmet kan justera filr{knarna." 640 ; "G|r inte detta om du inte m}ste. Du kan tappa bort filer eller sektorer." 650 ; "Du g|r detta helt p} EGEN RISK, med ett program som eventuellt kan bygga" 660 ; "p} felaktiga antaganden. Det kan ocks} t{nkas att det {r filnamnen som" 670 ; "borde justeras, men det kan inte det h{r programmet." 680 ; 690 ; "Efter justering b|r DISKCHEK k|ras, f|r att kolla och eventuellt justera" 700 ; "bitmappen, som kan bli fel om justeringen inneb{r att filer f|rsvinner." 710 ; 720 ; "Skriv '.' f|r att avbryta. I |vrigt rekommenderas alternativ 'F'." 730 ; 740 ; "Justera till (0), antal (F)ilnamn"; 750 IF Ejtomma<>Riktiga THEN ; ", antal (E)j tomma filnamns-entryn"; 760 ; "? "; 770 WHILE 1 780 GET I$ 790 Just=INSTR(1,"..00FfEe",I$) 800 IF Just=0 WEND 810 Just=(Just-1)/2 ! "."=0, "0"=1, "F"=2, "E"=3 820 ; MID$(".0FE",Just+1,1) 830 IF Just=0 THEN 920 840 ! 850 Z=FNRw(Aread,Drive,Offset-1) 860 FOR I=0 TO 15 870 IF Just=1 THEN N=0 ELSE IF Just=2 THEN N=Riktig(I) ELSE N=Ejtom(I) 880 MID$(Dosbuf$,240+I,1)=CHR$(N) 890 NEXT I 900 Z=FNRw(Awrite,Drive,Offset-1) 910 ; "Justerat." 920 END 930 ! 940 DEF FNRw(Op,Drive,Sektor) LOCAL E 950 POKE -767,Drive 960 E=CALL(Op,Sektor) 970 E=PEEK(64789) 980 IF E THEN ; RED CHR$(7) "Disk-fel" E "p} sektor" FNUs.(Sektor) : STOP 990 RETURN E 1000 FNEND 1010 ! 1020 DEF FNUs.(N) 1030 IF N>=0 THEN RETURN N ELSE RETURN 65536.+N 1040 FNEND