II. rész
Folytatjuk előző számunkban elkezdett alapismeretek tárgyalását a DOS
- FAT típusú - file-kezelése végett. Eddig megismerkettünk a lemez struktúra
felépítésével úgy, mint a boot-szektorral, a FAT jelentôségével - és működésével,
ezáltal a file-ok tárolási metódusával, a fő- ill. alkönyvtárak felépítésével,
elhelyezkedésével (esetleges alkönyvtár töredezettséggel). Folytassuk ott
ahol ugymond. "abbafejeztük": (magyarul ezt úgy mondják, hogy ahol abbahagytuk)
szóval folytassuk a könyvtárak felépítésénél, az egyes könyvtár-bejegyzésekhez
tartozó információk visszanyeréséhez.
Egy könyvtár-bejegyzés felépítése,
az elôzô számban elmondottak szerint így néz ki:
PDirectoryEntry = ^TDirectoryEntry;
TDirectoryEntry = record
FileName : TChar8;
Extension: TChar3;
Attribute: Byte;
Reserved : Array[1..10]
of Byte;
Time,
Date,
ClusterNumber:
Word;
FileSize
: Longint;
end;
-
A FileName logikus, hogy a filenevet tartalmazza ami sima DOS esetén
- mint ahogy a hosszból látszik - 8 karakter lehet maximum. Ha 8 karakternél
kevesebbôl áll akkor az utolsó karakter után #32 (az-az space) áll. (Pl.:
'FILENEV'#32)
-
Hasonlóan az Extension a kiterjesztést tartalmazza itt. max 3 karakterbôl
áll. A filenévnél leírtak szerint itt is ha kevesebb, mint 3 karakterbôl
áll akkor az üres helyek #32-vel kitöltöttek. (Pl.: 'C'#32#32)
-
Az Attribute nyilván a file hozzáférésijogait ill. rajta végezhetô
müveleteket adja meg. Az alábbi bit kiosztás szerint épül fel az Attribute
Byte.
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
-
|
-
|
a
|
d
|
v
|
s
|
h
|
r
|
-
Ahol a 7. és 6. bit nem definiált, ill. hálózatos file-kezelésre
van fenntartva
-
Az 5. bit (persze 0-tól számozva balról) az achive bit melynek jelentése
(régi jelentése), ha értéke = 1 (Attribute and $20) akkor
a file még nem volt archiválva az XCOPY vagy a BACKUP programmal.
-
A 4. bit jelentése ha a bit bekapcsolt állapotban van (Attribute and
$10) akkor az adott könytárbejegyés nem file, hanem könyvtár.
-
Ha csak a 3. bit (Attribute = $08) van bekapcsolva akkor a könyvtárbejegyzés
(Filename+Extension = 11 karakter) az adott lemez lemeznevét (katalógusnevet)
jelenti.
-
Ha a 2. bit be van kapcsolva (Attribute and $04) akkor a file system
(rendszer) file, ilyenek a: IBMIO.SYS és IBMDOS.SYS file-ok. Ezeknek törlése
DOS-ból (DOS prompt-ból) nem lehetséges addig (Nem NC alól !) amíg az ATTRIB
paranccsal ki nem kapcsoljuk ezen bit-et.
-
Ha a 1. bit bekapcsolt (Attribute and $02) akkor a file rejtett
file, az-az nem látható a sima DOS DIR paranccsal, hanem csak a DIR /a:h
-val.
-
Ha a 0. bit bekapcsolt (Attribute and $01) akkor az a file (esetleg
könyvtár - akkor az csak a törlésre vonatkozik) írás | törlés védett.
A DOS nem enged alapesetben írni a read-only file-okba.
-
A 10 db fenntartott Byte a Reserved tömbben számunkra általános
esetben haszontalan, mert a DOS belsôleg használja azt a file keresésnél.
A lemezrôl beolvasott 10 Reserved Byte-nak az értéke 0.
-
A Time mezô azonban már sokkal hasznosabb: mert a létrehozás vagy
az utolsó módosítás idejét tartalmazza, az alábbi felépítés szerint. 16
bit-bôl áll a Time mezô hisz egy Word-nek van deklarálva
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
hour
|
minute
|
sec/2
|
-
Az utolsó modosítás másodpercét így kapjuk vissza: sec:=Time and $1F
ekkor egy 0 és 30 közötti számot kapunk amit
2-vel kell megszoroznunk.
-
Az utolsó modosítás idejének percét így kapjuk vissza: Time and $7E0
ekkor egy 0 és 59 közötti számot kapunk amit
5-tel jobbra kell eltolni az SHR paranccsal, tehát így kapjuk vissza: perc:=(Time
and $7E0) SHR 5.
-
Az utolsó modosítás idejének óráját így kapjuk vissza: Time and $F800
ekkor egy 0 és 23 közötti számot kapunk amit
11-tel jobbra kell eltolni az SHR paranccsal, tehát így kapjuk vissza:
ora:=(Time and $F800) SHR 11.
-
A file utolsó modosításának dátumát is hasonló műveletekkel kapjuk vissza
a Date Word-ből:
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
év
|
hó
|
nap
|
-
Az utolsó modosítás napját így kapjuk meg: nap:=Date and $1F; (Valós
érték: 0-31-ig)
-
Az utolsó modosítás hónapját így kapjuk meg: honap:=(Date and $1E0)
SHR 5; (Valós érték: 1-12-ig)
-
Az utolsó modosítás évét így kapjuk meg: ev:=((Date and $F800) SHR 9)+1980;
(Valós érték: 1-119-ig) FIGYELEM az évhez 1980-at kell hozzáadni, mert
1980-tól kezdték számozni.
-
A ClusterNumber Word-rôl már elôzô számunkban épp eleget regéltem,
lényege röviden: ettôl a cluster számtól kezdôdik a tényleges adata a file
ill. könyvtárnak.
-
A FileSize Longint pedig összetéveszthetetlenül a file byte-ban
mért hosszát adja meg. Innen tudja a DOS, hogy az utolsó cluster-bôl mennyi
byte-ot kell beolvasni, hisz a file-hosz nem mindig (sôt ritkán)
osztható a cluster-rel maradék nélkül. Az utolsó cluster-bôl beolvasandó
byte-ok száma: beolv:=FileSize mod ClusterPerByte; Ahol a ClusterPerByte
az egy cluster-ben talalható maximális byte-ok számát adja meg. Ez a boot-szektorban
található Sector_Cluster és Byte_Sector szorzataként számítható
ki. Erre késôbb még nagy szükségünk lesz.
A file-kezelés DOS megszakítással
Mivel célunk egy olyan objektum létrehozása mely abszolút támogatja mind
paraméterben és mind formátumban a file-kezelés DOS megvalosítását, ezért
elôbb meg kell ismernünk a DOS file-kezelô rutinjait.
Miért akarjuk teljesen kompatibilissé tenni az objektumunk metódusainak
paraméterezését az DOS azonos rutinjainak paraméterezésével ? Egyszerű:
hogy használhasuk a lehetô legkisebb változtatással azon programjainkat
melyen assembly beszúrással kezelik a file-okat. Végigvesszük a legalapvetôbb
file-kezelési rutinokat.
A legalapvetôbb és egyben legrégibb file-kezelési módszer a DOS-ban
(ill. a CP/M-ben akkor még anno 1980 felé) az FCB-s file-kezelés.
De mi is ez az FCB ??? Tudjuk, hogy a CP/m-ben és a DOS 1.0-ban csak egy
könyvtár a fôkönyvtár volt (ahogy a jó öreg C64-esek OP rendszerében)
s abba volt minden belesuvvasztva, hisz 10 MB-ba nem sok minden férhetett.
Tehát egy könyvtár van. Így az elsô file-kezelô utasítások amik az FCB-vel
oldottak meg azok is egy könyvtárban tudnak műveletet végezni a file-okkal.
Mi maga az FCB ?
Teljes neve: File Control Block. Ez nem más, mint egy rekord melyben
az adatokat tároljuk, hogy EGY file-lal (DOS 1.0 még nincsenek wildchar
* és ? karakterek !) műveletet végezhessünk. Ez a rekord tartalmazza:
-
a meghajtót, hogy hol keresse a megadott file-t
-
a file nevét és kiterjesztését
E két alap dolgot mindenképen tartalmaznia kell, hogy a DOS megtalálhassa
az adott névhez illô file-t. Pl. az alább közölt TFCB rekord alapján adjuk
meg az információkat az OpenFileByFCB DOS rutinnak, s ha létezik a file
megnyitja azt. A megnyitás abból áll, hogy kitölti az FCB rekord üresen
maradt mezôit, ilyenek pl. a FileSize (file-hossz), FileDate
- FileTime (az utolsó modosítás dátuma - ideje), DOS 5.0+ -nál már
az Attributumot, a file kezdô cluster-ér a StartCluster-t
és StartSector-t is visszaadja. (A most kevésbbé fontos mezôkkel
nem foglalkozunk.)
Ha egy file-t megnyitottunk az Open (AH=0Fh) paranccsal, akkor azt le
is kell zárni (Close) az AH=10h paranccsal, mert a DOS a nyitott FCB-s
file-ok bizonyos adatait tárolja, s csak korlátozott, pl. 20 file-t lehet
max. egyszerre FCB-vel megnyitni. (A CONFIG.SYS-ben lehet megadni a max.
egyszerre FCB-vel megnyitható file-ok számat, FCBS = 20 paranccsal.) FCB-vel
file írás | olvasás:
Az FCB-vel történô file-ba írás ill. onnan olvasás már más mezôk értelemszerű
feltöltését is igényeli ezek:
-
A LogicalRecSize: Word adja meg, hogy egyszerre mekkora darabot
(byte-ban mérve) olvassunk | vagy írjunk a file-ból, az
-
aktuális file pozícitótól a CurrBlockNum-tól.
-
Ha az olvasás vagy írás sikeresen megtörtént, akkor az aktuális pozíció
a CurrBlockNum és a RecordInCurBlk fel van frissítve (passzív
- magyartalan!). A RecordInCurBlk az aktuális blokk beli rekord
számát adja meg, ha a rekord mérete nem nem szektornyi (pontosabban nem
Byte / Sector-nyi).
-
Az olvasás eredménye a file-ból kiolvasott adat, a DTA (Mi a DTA ? Lásd
alább.) címén jelenik meg. Hasonló módon ha írni akarunk a file-ba
akkor az oda irandó byte-okat a DTA címétôl az íráskor megadott FCB-ben
hossz alapján másolja a DTA-ból a file-ba.
Enny az alapvetô dolog amit az FCB-rôl tudni illik, de elôre bocsájtom,
hogy csak ismeretterjesztés miatt közlöm a teljesség igénye nélkül, hisz
manapság senki (persze kivéve a mazoistákat.) nem FCB-vel kezeli
a file-okat.
(A DOS 2.0-ban a UNIX-ból átvett módon megjelent az alkönyvtár fogalma.
Bármely könyvtárban lehet FCB-vel file-t kezelni akár a fôkönyvtárban.
Annyi az FCB-s megkötés, hogy csak az aktuális könyvtárban keresi a file-t.
Tehát C:\X\ könyvtárban nyitottuk meg a file-t és az épp aktuális könyvtár
a C:\Y\ akkor illik - tudomásom szerint - visszaváltani a C:\X\-be.
A DOS 5.0+ FCB-s kezelését mutatom be az alábbiakban, mert töbségünk DOS
5.0 feletti leginkább 6.22 ill. 7.0-t használ.) Lássuk az FCB-s és egyéb
járulékos alapvetô DOS parancsot - rutint:
-
Select default drive - az aktuális meghajtó kiválasztása:
AH = 0Eh
DL = drive (00h = A; 01h = B ...)
INT 21h (EZUTÁN csak azt tüntetjük fel ahol nem INT 21h-es megszakítást
használunk.
Return (visszaadott érték): AL: az elvileg használható meghajtó betűk
száma (A - érték(AL))
Most az FCB (már elavultnak számító) utasítások jönnek:
-
OpenFileByFCB - File megnyitása File Control
Block-kal (FCB-vel)
AH = 0Fh
DS:DX = A megnyitandó file FCB címe
INT 21h
Ret: AL = 00h akkor sikeres a file megnyitás; 0FFh sikertelen - jog
letiltva.
Az FCB felépítése:
PFCB = ^TFCB;
TFCB = record
{for DOS 5.0+}
DriveNumber
: Byte;
FileName
: TChar8;
FileExt
: TChar3;
CurrBlockNum
: Word;
LogicalRecSize:
Word;
FileSize
: Longint;
FileDate,
FileTime
: Word;
{S+}SysFileEntry :
Byte;
Attribute
: Byte;
ExtraInfo
: Byte;
StartCluster
: Word;
SectorNumber
: Word;
{E+}DirEntrypSec :
Byte;
RecordInCurBlk:
Byte;
RndAccRecNum
: Longint;
{R4sFCBsPos
: Byte;}
end;
-
CloseFileByFCB - FCB-vel megnyitott file bezárása
AH = 10h
DS:DX = a megnyitott FCB címe
Ret: AL = 00h sikeres; AL=0FFh sikertelen.
-
FindFirstByFCB - a megadott FCB-vel megegyezô elsô file keresése.
AH = 11h
DS:DX = a megnyitott FCB címe (DOS 3.0-tól használhatunk filenévnek
*-ot és ?-t is.)
Ret: AL = 00h sikeres, ilyenkor a [DTA] címen a file dir-entry-je (könyvtárbejegyzése
található); AL=0FFh sikertelen. (Mi a DTA lásd alább !)
-
FindNextByFCB - az FCB-vel megegyezô második és további file-ok keresése
AH = 12h
DS:DX = a megnyitott FCB címe
Ret: AL = 00h sikeres, ilyenkor a [DTA] címen a file dir-entry-je (könyvtárbejegyzése
található); AL=0FFh sikertelen.
(Létezik ExtendedFCB is, de ezzel nem foglalkozunk mert senki sem
használja.)
-
DeleteFileByFCB - File törlése FCB-vel
AH = 13h
DS:DX = a NEM megnyitott FCB címe
Ret: AL = 0 az adott file-t letörölve sikeresen, ha AL = 0FFh nem sikerült
letörölni
-
SeqReadByFCB - folyamatos file-olvasás megnyitott FCB-vel
AH = 14h
DS:DX = a megnyitott FCB
Ret: AL = 0 Az olvasás sikeres a [DTA]-n van az adat.
AL = 1 vége a file-nak nincs mit olvasni
AL = 2 Ha a DTA+FCB.RecordSize túlmutat a DTA szegmensén. (Ilyenkor
új DTA-t kell lefoglalni.)
AL = 3 Vége a file-nak. File utáni byte-kat olvastunk be, így kinullázva.
-
SeqWriteByFCB - folyamatos file-írás megnyitott FCB-vel
AH = 15h
DS:DX = a megnyitott FCB
[DTA] - A DTA címén kell lennie a file irandó byte-oknak
Ret: AL = 0 sikeresen megtörtént az írás
AL = 1 Tele a lemez, nem sikerült felírni
AL = 2 Ha a DTA+FCB.RecordSize túlmutat a DTA szegmensén. (Ilyenkor
új DTA-t kell lefoglalni.)
-
CreateFileByFCB - új file létrehozása (vagy a régi felülírása) FCB-vel
AH = 16h
DS:DX = a NEM megnyitott FCB
Ret: AL = 0 a file létrehozva, FCB megfelelô mezôi feltöltve
AL = 0FFH nem sikerült letrehozni ill. felülírni
-
RenameFileByFCB - file átnevezése FCB-vel
AH = 17h
DS:DX az alább definiált átnevezési felépítés? FCB rekord címe
AL = 0 a file-t sikerült átnevezni (AL=0FFh nem sikeres, pl. Nem létezik
a file.)
PRFCB = ^TRFCB;
TRFCB = record
{TRFCB: FCB for renaming}
DriveNumber:
Byte; {az átnevezendô file meghajtója}
OldFileName:
TChar8; {régi név}
OldFileExt
: TChar3; {régi kiterjesztés}
NillAreaLow:
Array[1..5] of Char; {üres - fenntartott}
NewFileName:
TChar8; {új név}
NewFileExt
: TChar3; {új kiterjesztés}
NillAreaHi
: Array[1..9] of Char; {üres - fenntartott}
end;
-
GetCurrentDrive - Az aktuális katlógus - partíció - logikai-lemez betűjelénel
lekérdezése
AH = 00h
Ret: AL {00 = A; 01 = B ...}
Mi az a DTA ???
A DTA (Disk Transfer Address) a DOS egy speciális memória területe
ahova a DOS számunkra ill. ahova mi a DOS számára a file-kezeléssel kapcsolatos
adatokat - információs rekordokat helyez | helyezhetünk el. A DTA címe
minden programnál elôször kiosztódik automatikusan: ezt a PSP $80-dik indexérôl
olvashatjuk le (ez egy offszet-cím).
Pl.: A DTA-t használja adatcserére a DOS önmaga és az ôt használó program
között az FCB-s file-kezelô utasítások | rutinok, ill. a file handle-vel
működô utasítások.
Ha hosszabb DTA területet szeretnénk, hogy nagyobb darabokat olvashassunk
FCB-Seq-Read-del, akkor azt a SetDTA-val állíthatjuk be.
-
SetDTA
AH = 1Ah
DS:DX az új DTA címe
Ret: semmi
-
GetAllocationInformationForDefDrive - Az aktuális drive FAT infójának lekérdezése
AH = 1Bh
Ret: DS:BX = A FAT id byte, mely megadja, hogy milyen típusú lemezrôl
van szó
DX = Az összes cluster száma a meghajtón
AL = Egy cluster-ben található szektorok száma. (Az-az hány szektorból
áll egy cluster.)
CX = Byte/Sector: Egy szektorban tárolható maximális byte-ok száma.
-
GetAllocationInformationForSpecDrive
AH = 1Ch
DL = meghajtó (00 - aktuális, 01 - A; 02 - B, ...)
Ret: DS:BX = A FAT id byte, mely megadja, hogy milyen típusú lemezrôl
van szó
DX = Az összes cluster száma a meghajtón
AL = Egy cluster-ben található szektorok száma. (Az-az hány szektorból
áll egy cluster.)
CX = Byte/Sector: Egy szektorban tárolható maximális byte-ok száma.
-
GetDPBForDefDrive - Drive Parameter Block lekérdezése az aktuális drive-ra
AH = 1Fh
Ret: AL = 00h sikeres így: DS:DX-ben a DPB címe (AL = 0FFh nem létezô
drive)
Felépítése: (FIGYELEM: Ez egy hasznos dolog, sok információt tartalmaz
a lemezrôl, meg kelleni fog !)
PDriveParameterBlock =
^TDriveParameterBlock;
TDriveParameterBlock
= record
Drive
: Byte; {0: A, 1: B . . .}
UNWDeviceDriver
: Byte;
BytePerSector
: Word;
SectorPerCluster
: Byte;
SqrNSectorACluster:
Byte;
BootSizeInSector
: Word;
FATNumber
: Byte;
MaxDirectories
: Word;
FirstDataSector
: Word;
MaxCluster
: Word;
SectorPerFAT
: Word;
FirstDIRsSector
: Word;
DeviceHeader
: PDeviceHeader;
MediaID
: Byte;
AccessByte
: Byte;
NextDPB
: PDriveParameterBlock;
FirstFreeCluster
: Word;
FreeClusterssNumb
: Word
end;
{R4s_REM}
-
ReadRandomRecByFCB - Adott rekord olvasása a file-ból FCB-vel
AH = 21h
DS:DX = a megnyitott FCB
Ret: AL = 0 Az olvasás sikeres a [DTA]-n van az adat.
AL = 1 vége a file-nak nincs mit olvasni
AL = 2 Ha a DTA+FCB.RecordSize túlmutat a DTA szegmensén. (Ilyenkor
új DTA-t kell lefoglalni.)
AL = 3 Vége a file-nak. File utáni byte-kat olvastunk be, így kinullázva.
FIGYELEM: Ez különbözik az AL = 14-es funkciótól itt akármelyik rekordot
olvashatjuk !
-
WriteRandomRecByFCB - Adott rekord írása file-ba FCB-vel
AH = 22h
DS:DX = a megnyitott FCB címe
[DTA] - A DTA címén kell lennie a file irandó byte-oknak
Ret: AL = 0 sikeresen megtörtént az írás
AL = 1 Tele a lemez, nem sikerült felírni
AL = 2 Ha a DTA+FCB.RecordSize túlmutat a DTA szegmensén. (Ilyenkor
új DTA-t kell lefoglalni.)
FIGYELEM: Ez különbözik az AL = 14-es funkciótól itt akármelyik rekordot
olvashatjuk !
-
GetFileSizeByFCB
AH = 23h
DS:DX - a NEM megnyitott FCB címe
Ret: AL = 0 a file-t megtalálta az aktuális könyvtárban, és a file
hossza az FCB.FileSize mezôben van.
AL = 0FFh a file-t nem találta meg az aktuális könyvtárban.
-
SetRandomRecNumbForFCB - AZ FCB rekord CurrentBlock (CurBlk) és CurrentRecord
(CurRec) beállítása FCB -vel.
AH = 24h
DS:DX a megnyitott FCB címe
Ret: semmi
-
RandomBlockReadByFCB - több rekord olvasása FCB-vel
AH = 27h
DS:DX = a megnyitott FCB címe
CX = a beolvasandó rekordok száma
Ret: AL = 0 Az olvasás sikeres a [DTA]-n van az adat.
AL = 1 vége a file-nak nincs mit olvasni
AL = 2 Ha a DTA+(FCB.RecordSize
túlmutat *CX) a DTA szegmensén. (Ilyenkor új DTA-t kell lefoglalni.)
AL = 3 Vége a file-nak. File utáni byte-kat olvastunk be, így kinullázva.
FIGYELEM: Ez különbözik az AL = 14-es és 21 funkciótól itt akármelyik
s akérmennyi rekordot olvashatunk !
-
RandomBlockWriteByFCB - több rekord írása FCB-vel
AH = 28h
DS:DX = a megnyitott FCB címe
[DTA] - A DTA címén kell lennie a file irandó byte-oknak
CX = a file irandó rekordok száma
Ret: AL = 0 sikeresen megtörtént az írás
AL = 1 Tele a lemez, nem sikerült felírni
AL = 2 Ha a DTA+(FCB.RecordSize * CX) túlmutat a DTA szegmensén. (Ilyenkor
új DTA-t kell lefoglalni.)
FIGYELEM: Ez különbözik az AL = 15-es és 22 funkciótól itt akármelyik
s akérmennyi rekordot olvashatunk ! Ha CX = 0 akkor a file hosszá állíthatjuk
be a FCB-vel !
-
GetDTA - Az aktuális DTA címének lekérdezése
AH = 2Fh
Ret: ES:BX az aktuális DTA címe
-
GetDiskParameterBlock
AH = 32h
DL = meghajtó (00 - aktuális, 01 - A; 02 - B, ...)
Ret: AL = 00h sikeres így: DS:DX-ben a DPB címe (AL = 0FFh nem létezô
drive)
FIGYELEM: Ez egy hasznos dolog, sok információt tartalmaz a lemezrôl,
meg kelleni fog !
Felépítése, lásd fent !
-
GetFreeDiskSpace
AH = 36h
DL = meghajtó (00 - aktuális, 01 - A; 02 - B, ...)
Ret: AX = 0FFFFh ha hibás meghajtót adtunk meg DL-ben.
Egyébként: AX = Sector per cluster
BX = üres cluster-ek száma
CX = byte / szektor
DX = az összes cluster száma a lemezen
A DL-edik drive-on az üres hely = AX * CX *BX
A DL-edik drive-on az összes hely = AX * CX * DX
Lássunk erre egy egyszerű kis példát, mely a szabad lemez területet
kérdezi le.
Ez elôször megadja AH = 036h-s kódot DL-be annak a meghajtónak a betű-sorszámát
melyre kíváncsiak vagyunk. és meghíjuk a megszakítást. Ha AX =0FFFFh akkor
rossz meghajtót adtunk meg DL-ben, ha nem akkor összeszorozzuk AX-et CX-et
és BX-et. (Régen még elmondtam, hogy hogyan működik a MOV asm parancs
aki nem emlékszik rá nézzen utána az \!OLDUSER\pcxall.exe-ben.)
function DiskFreeSpace(Drive:
Byte): Longint; Assembler;
asm
mov ax, 3600h
{Ret: AX: Sec/Clus }
mov dl, Drive
{ BX: Avaible Clus }
int 21h
{ CX: Byte/Sec }
cmp ax, 0ffffh {
DX: Total Clus }
je @NotReady
mul cx
mul bx
jmp @Exit
@NotReady:
xor ax, ax
xor dx, dx
@Exit:
end;
Nos végre, szerencsére végeztünk az alapvetô FCB-s vackokkal, következô
számunkban már sokkal érdekesebb file-kezeléssel foglalkozunk, méghozzá
a file-handle típusúval melyet minden program - és programozási-nyelv használ.
(Esetleges kérdéseiteket várom eMail címemre ...) Mára ennyi, mert holnap
vizsgázok ábrázoló-geometriából ...
Bérczi László
