· Text 5010 · w8 · inlagg
Jag vet inte om det tydligt skrivits hur man begär att få läsa nästa
sektor när man anropar IO-drivern.
Det förhåller sig på följande vis att en ascii-trea (CHR¤(3)) på träffas
i filen. När man läser filen med GET får man med sig denna trea, vilket
man inte får med INPUT (tacksamt va?). Nästa gång man gör GET läser driver-
rutinen in nästa sektor, varför? Därför att det är meningen.
I själva verket görs följande (i maskinkod)
; IX pekar på LU.blocket
; A = Läst tecken
cp 3
jr nz,_continue
ld (ix+19),0
_continue
...
Det vill säga: När ett ascii 3 påträffas "nollställs" RAB (Random Access
Buffertoffset) Vilket är adressen till DOS-buffertens början. Och eftersom
varje buffert ligger på jämna 256-steg innebär en nollställning av det
lägre byten att den ställs att peka på början.
När man sedan anropar GET ytterligare en gång och (ix+19)=0 läses nästa
sektor in, plus informationen som ligger i början av varje sektor.
Slutligen: Om man vill få ett program (BASIC) att börja läsa i nästa
sektor nollställer man helt enkelt (ix+19).
DEF FNRns(Filno) LOCAL LUBL ! Read Next Sector
Lubl=PEEK2(65344)
WHILE Lubl<>0
IF PEEK2(Lubl+2)=Filno Lublock=Lubl
Lubl=PEEK2(Lubl)
WEND
POKE Lublock+19,0
RETURN -1
FNEND
Voila!!! Reserverat för "tryck"-fel.