1 REM Ins{nd av Erik Wetterberg <5948> 1987-01-21 Diskett 2 ! 10 ! LIST READISC.BAS 11 ! 20 ! READISC - L[SNING FR]N DISK 21 ! L{ser sektorer fr}n disk. Kan tolka directorys och bitmap 22 ! |ver lediga cluster. Testad under UFD-DOS mot h}rddisk (HD), 23 ! flexskiva (MF) och RAM-disk. F|ruts{tter att bitmapen finns 24 ! p} sektor 14 (vilket kanske inte st{mmer f|r alla minnen) 25 ! och att directoryt b|rjar i sektor 16. Hur det klarar gamla 26 ! DOS har jag ingen aning om. 27 ! 30 ! utvecklat p} Facit DTC 2 40 ! testat p} Facit DTC 2 med HD, MF och RAM 50 ! anpassat (efter b{sta f|rm}ga) ocks} till ABC806 60 ! anpassning till andra datorer kan g|ras i FNInittang 70 ! Erik Wetterberg <5948> 80 ! ---------------- 81 ! Rev 19870314.1916 Bengt Sandgren <2776> 82 ! rad 2135 tillkommit f|r att ge alla ABC80x sammma tangentfunktioner 83 ! P} rad 2300 har "CHAIN NUL:" tagits bort 84 ! Text p} rad 2170 {ndrad 85 ! 86 ! 87 ! 88 ! Vad g|r Pf3 ??? 89 ! 90 ! ------------------------------------------------------ 100 EXTEND 110 INTEGER 120 ON ERROR GOTO 420 130 DIM Bitbl$=256%,Aktbuf$=256%,Filnamn$=14%,Drive$=3% 140 DIM Ti$=0% : POKE VAROOT(Ti$),0%,17%,30783%,SWAP%(30783%),0%,17% 150 DIM Visa$=0% : POKE VAROOT(Visa$),1840%,SWAP%(1840%),30800%,SWAP%(30800%),1840%,SWAP%(1840%) 160 Nextprog$=FNInarg$ 170 PRINT CHR$(12%) 180 Z%=FNInittang% 190 True%=(1%=1%) 200 Hex%=True% : Dirmode%=True% 210 Blnr%=16% 220 Drive$=SPACE$(3%) : Drive$=FNSetdrive$ 230 Dirbl%=FNReaddir%(16%) 240 Kom$=FNGet$ 250 WHILE Kom$<>"Q" AND Kom$<>Esc$ 260 IF Kom$=Ret$ THEN IF Dirmode% THEN Dirbl%=FNReaddir%(Dirbl%) ELSE Blnr%=FNVisabl%(Blnr%) 270 IF Kom$=Fram$ THEN IF Dirmode% THEN Dirbl%=FNReaddir%(Dirbl%+3%) ELSE Blnr%=FNVisabl%(Blnr%+1%) 280 IF Kom$=Back$ THEN IF Dirmode% THEN Dirbl%=FNReaddir%(Dirbl%-3%) ELSE Blnr%=FNVisabl%(Blnr%-1%) 290 IF Kom$=Pf$(1%) THEN Blnr%=FNVisabl%(FNReadtal%("BLOCK: ",Blnr%,0%,12%)) 300 IF Kom$=Pf$(2%) THEN Dirbl%=FNReaddir%(FNReadtal%("DIR: ",16%,0%,12%)) 310 IF Kom$=Pf$(3%) THEN Slask%=FNMapread% 320 IF Kom$=Pf$(4%) THEN Drive$=FNSetdrive$ 330 IF Kom$=Pf$(5%) THEN Hex%=NOT Hex% 340 Kom$=FNGet$ 350 WEND 360 Rad25$=SPACE$(80%) 370 PRINT CUR(22%,0%); 380 ON ERROR GOTO 400 390 IF Nextprog$<>"" THEN CHAIN Nextprog$ 400 END 410 ! ----- FELHANTERING huvudprogrammet 420 IF ERRCODE=53% THEN RESUME 430 PRINT "ERRCODE: ";ERRCODE 440 STOP 450 ! ================== funktioner ================== 460 ! 470 DEF FNGet$ LOCAL T$=1 480 WHILE SYS(5%)=0% 490 Ti$=MID$(TIME$,3%,17%) 500 WEND 510 GET T$ 520 RETURN T$ 530 FNEND 540 ! 550 DEF FNBlanka$=CUR(1%,0%)+SPACE$(1840%) 560 DEF FNBlankstat$=CUR(0%,12%)+SPACE$(26%) 570 ! 580 DEF FNSetdrive$ LOCAL Dr$=3 590 ! -- inst{llning av aktuell drive 600 Dr$=FNReadtxt$("DRIVE: ",Drive$,0%,0%) 610 WHILE NOT FNPokedr%(Dr$) 620 PRINT CHR$(7%); 630 Dr$=FNReadtxt$("DRIVE: ",Drive$,0%,0%) 640 WEND 650 Bitbl$=FNReadbl$(14%) 660 IF FNGetstatus%>0% THEN PRINT CHR$(7%) CUR(0%,24%) "Felkod: ";FNGetstatus%; 670 RETURN Dr$ 680 FNEND 690 ! 700 DEF FNPokedr%(In$) 710 IF In$="RAM" THEN POKE -767%,29% : RETURN True% 720 IF RIGHT$(In$,3%)<"0" OR RIGHT$(In$,3%)>"3" THEN RETURN NOT True% 730 IF INSTR(1%,"DRHDMFMOSF",LEFT$(In$,2%))=0% THEN RETURN NOT True% 740 POKE -767%,(INSTR(1%,"DRHDMFMOSF",LEFT$(In$,2%))-1%)*2%+VAL(RIGHT$(In$,3%)) 750 RETURN True% 760 FNEND 770 ! 780 DEF FNReadbl$(Innr%) LOCAL Buff$=0 790 ! l{sning av block fr}n disk 800 Slask%=FNPokedr%(Drive$) 810 POKE VAROOT(Buff$),0%,1%,62720%,SWAP%(62720%),0%,1% 820 Slask%=CALL(24678%,Innr%) 830 RETURN Buff$ 840 FNEND 850 ! 860 DEF FNGetstatus%=PEEK(-747%) 870 ! 880 DEF FNGetclust% 890 IF (PEEK(-767%) AND 28%)=4% THEN RETURN 32% 900 IF (PEEK(-767%) AND 28%)=12% THEN RETURN 1% 910 RETURN 4% 920 FNEND 930 ! 940 DEF FNUsedcl%(Clnr%)=ASCII(MID$(Bitbl$,(Clnr%/8%)+1%,1%)) AND (2%^(7%-MOD(Clnr%,8%))) 950 ! 960 DEF FNVisabl%(Innr%) LOCAL C$=1,Rad%,Rpos%,Pos% 970 ! visning av block p} sk{rmen 980 Dirmode%=NOT True% 990 PRINT FNBlankstat$; 1000 PRINT CUR(0%,0%) "DRIVE: ";Drive$; 1010 PRINT CUR(0%,12%) "BLOCK:";Innr%; 1020 PRINT CUR(0%,24%); 1030 Aktbuf$=FNReadbl$(Innr%) 1040 IF FNGetstatus%>0% THEN PRINT CHR$(7%) "Felkod: ";FNGetstatus%; : RETURN Innr% 1050 IF FNUsedcl%(Innr%/FNGetclust%) THEN PRINT "ANV[NT CLUSTER"; ELSE PRINT "LEDIGT CLUSTER"; 1060 PRINT FNBlanka$; : PRINT CUR(2%,0%); 1070 Pos%=1% : L$="" 1080 WHILE Pos%<=256% 1090 C$=MID$(Aktbuf$,Pos%,1%) 1100 IF Hex% THEN Ct$=HEX$(ASCII(C$)) ELSE Ct$=NUM$(ASCII(C$)) 1110 PRINT SPACE$(3%-LEN(Ct$))+Ct$+" "; 1120 IF ASCII(C$)<32% OR ASCII(C$)>126% THEN L$=L$+"." ELSE L$=L$+C$ 1130 Pos%=Pos%+1% 1140 IF MOD(Pos%,16%)=1% THEN PRINT L$; : L$="" 1150 WEND 1160 RETURN Innr% 1170 FNEND 1180 ! 1190 DEF FNMapread% LOCAL Kol%,Pos%,Rad%,Clfakt% 1200 IF FNGetstatus%>0% THEN PRINT CHR$(7%) CUR(0%,24%) "Felkod: ";FNGetstatus%; : RETURN 0% 1210 PRINT FNBlanka$; 1220 Kol%=1% : Pos%=1% : Rad%=2% : Clfakt%=8%*FNGetclust% 1230 WHILE Pos%<89% 1240 PRINT CUR(Rad%,Kol%); 1250 PRINT USING "#####" (Pos%-1%)*Clfakt%; 1260 PRINT " (" FNVisabit$(MID$(Bitbl$,Pos%,1%)) ") "; 1270 Pos%=Pos%+1% 1280 IF Rad%=23% THEN Rad%=2% : Kol%=Kol%+20% ELSE Rad%=Rad%+1% 1290 WEND 1300 RETURN 0% 1310 FNEND 1320 ! ------------------ 1330 DEF FNVisabit$(In$) LOCAL Bit%,Innr%,Ut$=8 1340 Innr%=ASCII(In$) 1350 Ut$=SPACE$(8%) 1360 Bit%=1% 1370 WHILE Bit%<=8% 1380 IF 2%^(Bit%-1%) AND Innr% THEN MID$(Ut$,9%-Bit%,1%)="*" 1390 Bit%=Bit%+1% 1400 WEND 1410 RETURN Ut$ 1420 FNEND 1430 ! ------------------ 1440 DEF FNReaddir%(In%) LOCAL Buff$=256,Kol%,Pos%,Rad%,Block%,Maxblock%,Clfakt% 1450 Dirmode%=True% 1460 Kol%=0% : Block%=In% : Rad%=2% : Maxblock%=Block%+3% 1470 PRINT FNBlankstat$+FNBlanka$; 1480 PRINT CUR(0%,0%) "DRIVE: ";Drive$; 1490 PRINT CUR(0%,12%) "DIR:";Block%;"-";Maxblock%; 1500 Clfakt%=32%/FNGetclust% 1510 WHILE Block%<=Maxblock% 1520 Buff$=FNReadbl$(Block%) 1530 IF Block%=16% THEN Pos%=17% ELSE Pos%=1% 1540 WHILE Pos%<256% 1550 IF CVT$%(MID$(Buff$,Pos%+2%,2%))<1% THEN GOTO 1610 1560 PRINT CUR(Rad%,Kol%); 1570 PRINT USING "#####" (ASCII(MID$(Buff$,Pos%,1%))*256%+ASCII(MID$(Buff$,Pos%+1%,1%)))/Clfakt%; 1580 PRINT CUR(Rad%,Kol%+7%) MID$(Buff$,Pos%+4%,11%); 1590 PRINT CUR(Rad%,Kol%+19%); 1600 PRINT USING "###" CVT$%(MID$(Buff$,Pos%+2%,2%)); 1610 Pos%=Pos%+16% 1620 IF Rad%=22% AND Block%1% THEN MID$(Ltxt$,Lnr%-1%,81%-Lnr%)=RIGHT$(Ltxt$,Lnr%) : Lnr%=Lnr%-1% : GOTO 1740 1790 IF Lch$=Linedel$ THEN MID$(Ltxt$,1%,LEN(In$))=SPACE$(LEN(In$)) : Lnr%=1% : GOTO 1740 1800 IF Lch$=Back$ AND Lnr%>1% THEN Lnr%=Lnr%-1% : GOTO 1750 1810 IF Lch$=Fram$ AND Lnr%126% THEN PRINT CHR$(7%); : GOTO 1760 1830 IF Lnr%>LEN(In$) THEN PRINT CHR$(7%); : GOTO 1760 1840 IF Lch$>CHR$(95%) THEN Lch$=CHR$(ASCII(Lch$) AND NOT 32%) 1850 PRINT Lch$; : MID$(Ltxt$,Lnr%,1%)=Lch$ 1860 Lnr%=Lnr%+1% : GOTO 1760 1870 FNEND 1880 ! 1890 DEF FNReadtal%(Inprompt$,In%,Inrad%,Inkol%) LOCAL Ltxt$=5 1900 ! inl{sning av ett heltal 1910 ON ERROR GOTO 1950 1920 Ltxt$=FNReadtxt$(Inprompt$,NUM$(In%)+SPACE$(5%-LEN(NUM$(In%))),Inrad%,Inkol%) 1930 IF Ltxt$=SPACE$(5%) THEN RETURN 0% ELSE RETURN VAL(Ltxt$) 1940 ! ------- felhantering fnreadtal -------- 1950 IF ERRCODE=210% THEN PRINT CHR$(7%) : RESUME 1920 1960 PRINT " ** FNReadtal Errcode: " ERRCODE : STOP 1970 FNEND 1980 ! 1990 DEF FNInarg$ LOCAL Arg$=0,Pos% 2000 Pos%=CALL(81%) 2010 POKE VAROOT(Arg$),160%,0%,Pos%,SWAP%(Pos%),160%,0% 2020 Pos%=INSTR(1%,Arg$,",") 2030 IF Pos%=0% THEN RETURN "" 2040 Arg$=RIGHT$(Arg$,Pos%+1%) 2050 Pos%=INSTR(1%,Arg$,CHR$(13%)) 2060 IF Pos% THEN RETURN LEFT$(Arg$,Pos%-1%) ELSE RETURN "" 2070 FNEND 2080 DEF FNInittang% 2090 DIM Rad25$=0% : POKE VAROOT(Rad25$),0%,80%,32640%,SWAP%(32640%),0%,80% 2100 DIM Esc$=1%,Ret$=1%,Del$=1%,Linedel$=1%,Fram$=1%,Back$=1% 2110 DIM Pf$(1%:14%)=1% 2120 Pf$(1%)=CHR$(192%) : Pf$(2%)=CHR$(193%) : Pf$(3%)=CHR$(194%) : Pf$(4%)=CHR$(195%) 2130 Pf$(5%)=CHR$(196%) : Pf$(6%)=CHR$(197%) : Pf$(7%)=CHR$(198%) : Pf$(8%)=CHR$(199%) 2135 IF PEEK(39%)>0% OR PEEK(39%)<5% OR PEEK(39%)=10% THEN GOTO 2160 2140 IF PEEK(39%)<>4% THEN GOTO 2220 2150 ! ----- tangentkoder ABC 80x ---------------- 2160 OUT 56%,6%,57%,25% 2170 Rad25$="PF1:L{s PF2:Dir PF6:Sluta - Ange drive i formen MF0 eller MF1 " 2180 Esc$=CHR$(197%) : Ret$=CHR$(13%) 2190 Del$=CHR$(199%) : Linedel$=CHR$(24%) 2200 Fram$=CHR$(9%) : Back$=CHR$(8%) 2210 RETURN 0% 2220 IF PEEK(39%)<>6% THEN GOTO 2290 2230 ! ----- tangentkoder Facit DTC 2 ------------ 2240 Rad25$="PF1:L{s PF2:Dir" 2250 Esc$=CHR$(27%) : Ret$=CHR$(13%) 2260 Del$=CHR$(8%) : Linedel$=CHR$(24%) 2270 Fram$=CHR$(163%) : Back$=CHR$(162%) 2280 RETURN 0% 2290 PRINT CHR$(12%)+"Programmet ej anpassat f|r denna dator"+CHR$(7%) 2300 RETURN 0% ! CHAIN "NUL:" 2310 FNEND