online kép - Fájl  tubefájl feltöltés file feltöltés - adja hozzá a fájlokat onlinefedezze fel a legújabb online dokumentumokKapcsolat
  
 

Letöltheto dokumentumok, programok, törvények, tervezetek, javaslatok, egyéb hasznos információk, receptek - Fájl kiterjesztések - fajltube.com

Online dokumentumok - kep
  

A DOS unit fontosabb beépített konstansai, függvényei, eljarasai; hasznalata

számítógépes



felso sarok

egyéb tételek

jobb felso sarok
 
Átviteli minöséggel kapcsolatos kérdések
Az írasjelek kódolasa
A programozasi technikak és jellemzőik
Halózat hardver eszközei
A digitalis elektronika alapjai
Halózati szolgaltatasok
Az operaciós rendszerek osztalyozasa
A központi egység
Processzorok
A Pascal programok memóriatérképe:
 
bal also sarok   jobb also sarok

A DOS unit fontosabb beépített konstansai, függvényei, eljárásai; használata:

A DOS unit szerepe, jelentõsége a Pascal programok készítése során:

Minden programozási nyelv esetén megfigyelhetõ a fejlesztõrendszer, az adott nyelv és az operációs rendszer szoros kapcsolata. Igaz ez a megállapítás minden operációs rendszerre és minden programozási nyelvre. Akár a C nyelvet és a Linux operációs rendszert választjuk, akár a Delphi fejlesztõrendszert, amely Windows 9x alatti programok készítésére alkalmas, akár a Turbo Pascal és a DOS kapcsolatát vizsgáljuk meg, mindenütt tapasztalható, hogy a programozási nyelv esz 242d38c közei és az operációs rendszer szoros kapcsolatban állnak egymással.
A programozás során felmerülhetnek olyan problémák, melyek csak az operációs rendszeren keresztül oldhatók meg. Nagyon jó példa erre a filekezelés. Találkozhatunk azonban olyan estekkel is, amikor az operációs rendszer alacsonyszintû szolgáltatásait (megszakítások) kell igénybe vennünk, vagy éppen egy BIOS hívás segítségével tudjuk megoldani a feladatot. Az utóbbi az esetben is az operációs rendszeren keresztül tudjuk elérni a BIOS szubrutinjait.
A Turbo Pascal környezetben ezt a kapcsolatot a DOS unit biztosítja, ez a unit tartalmazza azokat az eljárásokat, függvényeket, konstansokat, amelyek szükségesek az operációs rendszer szolgáltatásainak igénybevételéhez. Ezen túlmenõen a System unit egy része is ezt a kapcsolatot hivatott erõsíteni, a legalapvetõbb problémák a System unit eljárásaival, függvényeivel oldhatók meg.

A System unit fontosabb változói, függvényei, eljárásai:

Az egyik legalapvetõbb lehetõség az operációs rendszer és a program között megvalósított paraméterátadás. Lehetõségünk van arra, hogy a programunkban olyan paramétereket használjunk, melyeket a felhasználó a program indításakor a parancssorban ad meg (Hasonlóan, mint a DIR parancs paramétereit, pld: DIR C:\WINDOWS). Jó példa erre, amikor egy olyan programot szeretnénk írni, amely megkeres egy állományt a lemezen. Ha a program indításakor megadta a felhasználó a keresett állomány nevét, akkor azonnal elkezdjük a keresést, ha nem adott meg nevet, akkor a keresés elõtt rákérdezünk, mit szeretne keresni. A paraméterátadás problémáját a System unitban oldották meg, két függvény segítségével.

ParamCount függvény:
A program paramétereinek száma. Szintaxisa: PSzam:= ParamCount;
A függvény Word tipusú értékkel tér vissza. A függvény a parancssorban megadott paramétereket veszi figyelembe. Külön paraméternek számítanak az egymástól szóközzel elválasztott értékek. Ezalól csak az elsõ paraméterként megadott érték kivétel, melyet bármilyen DOS által elfogatott karakterrel elválaszthatunk a program nevétõl. Tehát ha a parancssor:
PARPROBA/W /E /D
ahol PARPROB.EXE a futtatható állomány, a ParamCount által visszaadott érték 3 lesz.

ParamStr függvény:
A program paramétereinek értéke. Szintaxisa: Par1:= ParamStr(ParSzam);
A függvény String tipusú értékkel tér vissza. A ParSzam határozza meg, hogy hanyadik paramétert kérdezzük le. A ParSzam Word tipusú változó vagy konstans lehet. Tehát ha a parancssor:
PARPROBA/W /E /D
ahol PARPROB.EXE a futtatható állomány, a ParamStr(1) függvény értéke: /W, ParamStr(2) értéke: /E, ParamStr(3) értéke: /D. Ha a ParamStr függvényt a 0. paraméter lekérdezésével hívjuk meg, a visszaadott érték a futtatható állomány neve és elérési útja lesz. Ha a ParamCount függvény által szolgáltatott értéknél nagyobb számot alkalmazunk, tehát egy nem létezõ paraméterre hivatkozunk, a ParamStr függvény üres string értéket ad vissza
 

A másik szintén a System unit által megoldott probléma az állományok és könyvtárak kezelése. Az állományok kezelése nem kapcsolódik szorosan ide (részletezve a 10-es tételben), bár az operációs rendszer szolgáltatásai közé tartozik. A könyvtárkezelõ eljárások, függvények tárgyalása (rövidsége miatt is) ide tartozhat. (ZKerekes szerint).

ChDir eljárás:
Könyvtárváltás. Szintaxisa: ChDir(Konyvtar);
Az eljárás paramétereként meg kell adni a könyvtár teljes elérési útját, meghajtóval együtt. Pld.: ChDir('C:\WINDOWS');

MkDir eljárás:
Könyvtár létrehozása. Szintaxisa: MkDir(Konyvtar);
Az eljárás paramétereként meg kell adni a könyvtár teljes elérési útját, meghajtóval együtt. Pld.: ChDir('C:\SAJAT');

RmDir eljárás:
Könyvtár törlése. Szintaxisa: RmDir(Konyvtar);
Az eljárás paramétereként meg kell adni a könyvtár teljes elérési útját, meghajtóval együtt. Pld.: ChDir('C:\VACAK');
Az eljárás alkalmazása során figyelembe kell venni a DOS alatt végzett könyvtártörlés szabályait, tehát itt is csak olyan üres könyvtárat tudunk törölni, amely éppen nem az aktuális könyvtár, és az aktuális könyvtárnál alsóbb szinten helyezkedik el a könyvtárrendszerben.

GetDir eljárás:
Aktuális könyvtár lekérdezése. Szintaxisa: GetDir(Drive, Konyvtar);
Az eljárás paraméterei:
Drive: Byte - Meg kell adnunk annak a meghajtónak a számát, amelyiken szeretnénk az aktuális könyvtárat lekérdezni. Számozás: 0 - aktuális meghajtó; 1 - A: meghajtó; 2 - B: meghajtó; 3 - C: meghajtó; ...
Könyvtar: String - Minden esetben egy változó. Ebben a változóban kapjuk vissza a könyvtár elérési útját és nevét.
 
 

A DOS unit fontosabb beépített konstansai, változói:

Ahogy az elõbb láthattuk a System unit is tartalmaz néhány eljárást, függvényt, amely az operációs rendszerrel való kapcsolat létesítését segíti, de az ilyen célú alprogramok, változók, konstansok, típusok legnagyobb része a DOS unitban kapott helyet.

A DOS unit beépített konstansai:
A beépített konstansok legfontosabb csoportját a file-attribútumokhoz kapcsolódó konstansok alkotják, amelyeket felhasználhatunk az olyan eljárásoknál (értelemszerûen), amelyek a file-ok attribútumát módosítják, de fontos szerepük van a file-ok keresése során is. A konstansok:
 
 

Konstans

Érték

Attribútum

ReadOnly


Csak olvasható

Hidden


Rejtett

SysFile


Rendszerfile

VolumeID


Lemezcimke

Directory


Könyvtár

Archive


Archiválandó

AnyFile

$3F

Bármilyen file


A DOS unit beépített változói:
A DOS unit legfontosabb beépített változója a DosError változó. Mint a nevébõl is látszik a hibakezelés során játszik jelentõs szerepet. A DosError változó segítségével tudjuk figyelni, hogy a DOS unit eljárásai sikeresen befejezõdtek-e. Természetesen egy operációs rendszer szintû hiba - hiszen ezek az eljárások ilyen hibával szakadnak meg - alapértelmezés szerint megszakítaná a program futását, ezért ha magunk szeretnénk ezeket a hibákat kezelni, akkor az direktívát kell alkalmaznunk. Ha a saját hibakezelést választjuk (egyes esetekben célszerû), nagyon figyelmesen kell eljárnunk, mert egy lekezeletlen hiba a program megszakításánál súlyosabb következményekkel járhat. Nézzünk egy példát az eddig leírtakra.
Hozzunk létre a C: meghajtón egy könyvtárat, amelynek neve legyen SAJAT.

Automatikus hibakzelés alkalmazása:

Uses DOS;
Begin
    MkDir('C:\SAJAT');
    Writeln('A C:\SAJAT konyvtarat letrehoztuk');
End.

Ha valamilyen hiba lép fel a program futtatása során - mondjuk a könyvtár már létezik - futás közbeni hiba lép fel, a program angolul kiirja a hibauzenetet és megszakad.

Saját hibekezelés alkalmazása:

Uses DOS;
Begin
   
   
   
    MkDir('C:\SAJAT');
   

   
    If DosError<0
        then Begin
           
            Writeln('Hiba lepett fel a konyvtar letrehozasa soran');
           
            Halt(1);
        End;
 
   
    Writeln('A C:\SAJAT konyvtarat letrehoztuk');
End.

A második megoldás esetén a hibakezelést magunk végezzük el. A hibát okozó mûvelet elõtt az I direktíva kikapcsolásával letiltottuk a futás közben fellépõ I/O hibák automatikus kezelését. A kritikus mûvelet után célszerû a direktívát bekapcsolni, mivel ez az alapértelmezett érték, és a programtovábbi részében is elõfordulhatnak hasonló hibák, esetleg olyanok, amelyekre nem számítunk, és nem is gondoljuk, hogy ezeket le kellene kezelnünk. A mûvelet után ellenõrizzük a DosError változó értékét, amely a mûvelet sikeres befejezése után 0, egyébként a hiba kódját tartalmazza. Ennél az egyszerû programnál a hibakezelés a hibaüzenet kiirásából és a program megszakításából áll, de ennél sokkal bonyolultabb esetek is elõfordulhatnak.

A Dos hibák kódjai:
Ezeket az értékeket veheti fel a DosError változó futási hiba esetén.

0: nincs hiba
2: a file nem létezik
3: az útvonal nem létezik
5: a hozzáférés nem megengedett
6: helytelen file-kezelés
8: kevés a memória
10: helytelen környezet (DOS környezeti változó beállításánál)
11: helytelen formátum
18: nincs több file (keresésnél)
 

A DOS unit beépített típusai:
A beépített típusok egyik része a DOS unit eljárásai, függvényei által elõállított eredmények kezelését teszi egyszerûbbé, másik része a megszakításkezelést, a regiszterek elérését, kezelését segíti.

Registers: record
A regiszterek eléréséhez a deklarációs részben fel kell vennünk egy változót, amelynek típusa Registers lesz. A Registers típus a DOS unit beépített típusa, rekord tipus. Mezõi segítségével elérhetõvé válnak a processzor regiszterei. Használata:

Uses DOS;
Var R: Registers;
Begin
    ...
    R.AH:= $09;
    R.AH:= 65;
    ...
End.

A Registers rekord mezõi a processzor regiszterei:
AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags: Word; - 16 bites regiszterek (bõvebben lásd Assembly-nél)
AH, AL, BH, BL, CH, CL, DH, DL: Byte; - 8 bites regiszterek, az elõzõ regiszterek alsó és felsõ byte-ja

DateTime: record
Az idõ és a dátum kezelését segítõ típus. Mezõi:
Year,
Month,
Day,
Hour,
Min,
Sec: Word;

SearchRec: record
A file-ok keresése során alkalmazott FindFirst és FindNext eljárások használnak ilyen tipusú változókat. Az egyes mezõkben a keresõ eljárások által megtalált állomány adatai vannak tárolva.
Fill: Array [1..21] of Byte;
Attr: Byte;
Time: Longint;
Size: Longint;
Name: String[12];
 

A DOS unit eljárásai, függvényei, a DOS unit használata:
 A DOS unit használatához a deklarációs részben szerepelnie kell a következõ sornak:
Uses DOS;

A DOS unit fontosabb eljárásait, függvényeit az alábbi négy csoportba sorolhatjuk:
- Katalógus (könyvtár) és lemezkezelés
- Dátum és idõ kezelése
- Külsõ programok indítása
- Megszakítások kezelése

Katalógus és lemezkezelés:
Ezeknek az eljárásoknak, függvényeknek az állományok kezelése során van fontos szerepük.

FindFirst eljárás:
Az elsõ megfelelõ bejegyzés keresése. Szintaxisa: FindFirst(Ut, Attr, Rek);
Ut: String - meghatározza, hogy melyik könyvtárban keressük a feltételeknek megfelelõ állományt.
Attr: Byte - meghatározza, hogy a bejegyzés milyen attribútumokkal rendelkezik. Az attribútumokhoz tartozó konstansokat lásd fentebb. Elsõsorban akkor van szerepe, ha könyvtárakat keresünk. Általában az AnyFile konstans kerül erre a helyre, ekkor minden állományt és könyvtárat figyelembe veszünk a keresésnél.
Rek: SearchRec - a keresés eredménye. Az eljárás végrehajtása után a Rek rekord mezõiben találjuk meg az állomány (könyvtár) jellemzõit. Minden esetben egy változót kell átadni az eljárásnak.

Pld:
FindFirst('C:\TP\*.PAS', AnyFile, Rek);

A keresett bejegyzés lehet egy állomány és egy könyvtár egyaránt, ezt az Attr paraméter értéke határozza meg. Általában a FindNext eljárással együtt használjuk, az összes olyan állomány keresésére, amelyek valamilyen feltételnek eleget tesznek. Ha nem talál a feltételeknek megfelelõ bejegyzést az eljárás, a DosError változó értékét 18-ra állítja, ha az Ut paraméterben  megadott könyvtár nem létezik, akkor a DosError változó értékét 2-re állítja.

FindNext eljárás:
A következõ megfelelõ bejegyzés keresése. Szintaxisa: FindNext(Rek);
Rek: SearchRec - egy elõzõleg a FindFirst eljárás által feltöltött rekord. Minden esetben változót kell átadni az eljárásnak, mivel az eredményt is ebben a rekordban kapjuk vissza.
A FindFirst eljárás után ciklusban alkalmazva megkereshetjük az összes adott feltételnek megefelelõ bejegyzést az adott könyvtárban. Ha az eljárás nem talál megfelelõ bejegyzést, akkor a DosError változó értékét 18-ra állítja.

A FindFirst és FindNext eljárások együttes alkalmazására példa a Feladatok lapon található, a Rendszerprogramozás részben: Feladat

FSearch függvény:
Megadott állomány keresésére szolgál. Szintaxisa: FSearch(FNev, Ut);
FNev: PathStr; - az állomány neve. A PathStr a DOS unit egyik kevésbé fontos beépített típusa, deklarációja:
type PathStr= String[79]; Tehát tulajdonképpen egy String[79] tipusú paraméterrõl van szó. Az állomány nevén kívül megadhatunk itt egy útvonalat is, ahol az állományt elõször keresi az eljárás. Összefoglalva az állománynevet kétféleképpen lehet megadni: vagy csak a nevet és a kiterjesztést adjuk meg (pld. TURBO.EXE) vagy megadjuk az útvonalat is (C:\TP\BIN\TURBO.EXE). (Bár az utóbbinak nincs túl sok értelme, lévén szó egy olyan eljárásról, amelynek az a feladata, hogy keressen meg egy állományt.)
Ut: String; - Ebben a paraméterben adhatjuk meg, hogy mely könyvtárakban keresse az eljárás a megadott állományt. A DOS Path környezeti változójához hasonló formában adhatjuk meg a kívánt könyvtárakat, pontosvesszõvel elválasztva.

Pld.: Keressük meg a TURBO.EXE állományt, a keresés során vegyük figyelembe a következõ könyvtárakat:
C:\, C:\WINDOWS, C:\TP, C:\TOOLS

FSearch('TURBO.EXE', 'C:\;C:\WINDOWS;C:\TP;C:\TOOLS');

A fenti három alprogram egy összetettebb alkalmazására szeretnék egy példát hozni, de mivel ebben más eljárások, függvények is szerepelnek, ez a tétel végére került.
 

Dátum és idõ kezelése:
A DOS unit segítségével tudjuk módosítani, illetve lekérdezni a rendszerdátumot és a rendszeridõt Pascal programjainkból. Lekérdezhetjük, illetve módosíthatjuk az állományok utolsó módosításának dátumát és idejét. A rendszeridõ és rendszerdátum kezelése egyszerûbb, nézzük elõször azt. A rendszeridõ és dátum kezeléséhez a következõ eljárásokra van szükségünk:

GetTime eljárás:
A rendszeridõ lekérdezése. Szintaxisa: GetTime(Ora, Perc, MP, SzMP);
Az Ora, Perc, MP, SzMp Word tipusú változók, az eljárás végrehajtása után ezek tárolják a visszaadott idõpontot.

GetDate eljárás:
A renszerdátum lekérdezése. Szintaxisa: GetDate(Ev, Ho, Nap, NapNev);
Az Ev, Ho, Nap, NapNev Word típusú változók. Az elõzõ eljáráshoz hasonlóan mûködik, egyetlen eltérés a NapNev nevû változó, amelyben a nap sorszámát kapjuk meg. A sorszám alapján kiiratható a nap neve. A sorszámozás 0-tól 6 ig tart a következõképpen: 0- Vasárnap; 1- Hétfõ; 2- Kedd; ... 6- Szombat.

SetTime eljárás:
A rendszeridõ beállítása. Szintaxisa: SetTime(Ora, Perc, MP, SzMP);
Hasonlóan mûködik a rendszeridõ lekérdezéséhez, a különbség annyi, hogy itt már nemcsak változókat, hanem konstans értékeket is használhatunk.

SetDate eljárás:
A rendszerdátum beállítása. Szintaxisa: SetDate(Ev, Ho, Nap, NapNev);
Hasonlóan mûködik a rendszerdátum lekérdezéséhez, a különbség annyi, hogy itt már nemcsak változókat, hanem konstans értékeket is használhatunk.

A rendszerdátumot és renszeridõt kezelõ eljárások alkalmazására példa a Feladatok lapon található, a Rendszerprogramozás részben: Feladat
 

A DOS unit beépített tipusainál találkoztunk már a SearchRec rekorddal, amely egy állomány adatait tartalmazza. A rekord mezõi között szerepel - sok más mellett - az állomány utolsó módosításának ideje. A Time mezõ tipusa azonban Longint, ez tartalmazza a szükséges dátumot és idõt. A Turbo Pascal (szûkebben értelmezve a DOS unit) kétféle dátumot ismer: tömörítetlen dátum, amely egy DateTime tipusú rekordban helyezkedik el, illetve a tömörített dátum, amelyet egy Longint tipusú változóban tárolhatunk. A kétféle dátumforma között két eljárás biztosítja az átjárhatóságot (konverziót).

PackTime eljárás:
Tömörítelen dátum (rekord) konvertálása Longint formátumba. Szintaxisa: PackTime(D, L);
D: DateTime; - a tömörítendõ dátumot tartalmazó változó.
L: Longint; - a tömörített dátumot tároló változó.
Az eljárás mindkét paramétere változó kell legyen. A D változóban tárolt dátumot az eljárás tömöríti, a tömörített dátumot az L változóban adja vissza.

UnPackTime eljárás:
Tömörített dátum (Longint) konvertálása Record formátumba. Szintaxisa: UnPackTime(L, D);
L: Longint; - a tömörített dátum. Változó és konstans lehet egyaránt.
D: DateTime; - a kicsomagolt dátumot tároló rekord tipusú változó.
Az eljárás elsõ paramétere változó és konstans egyaránt lehet, a második paraméter csak változó lehet, mivel ebben kapjuk vissza a kitömörített dátumot.

A fenti két eljárást kell alkalmaznunk, amikor egy FindFirst vagy FindNext eljárás által megtalált file utolsó móosítási dátumához szeretnénk hozzáférni, és akkor is amikor egy általunk meghatározott állomány adataira vagyunk kiváncsiak.

GetFTime eljárás:
A file utolsó írásának idejét kérdezhetjük le ezzel az eljárással. Szintaxisa: GetFTime(F, T);
F: File; - az állományleíró változó. Mielõtt a GetFTime eljárást használnánk, az állományhoz egy állományleíró változót kell hozzárendelni az Assign eljárás segítségével. Bõvebben lásd a Filekezelésnél (10-es tétel).
T: Longint; - a tömörített idõt tároló változó. Ez a paraméter minden esetben egy változó kell legyen.

SetFTime eljárás:
A file utolsó írásának idejét állíthatjuk be ezzel az eljárással. Szintaxisa: SetFTime(F, T);
Az eljárás használata a GetFTime eljáráshoz hasonlóan történik, annyi különbséggel, hogy itt a T nemcsak változó, hanem konstans érték is lehet.
 

Külsõ programok indítása:
A DOS unit lehetõséget biztosít arra, hogy programunkból más - az operációs rendszer által futtatható - programokat hívjunk meg. Ehhez az alábbi eljárásokra és függvényekre van szükségünk:

Exec eljárás:
Külsõ program futtatása. Szintaxisa: Exec(Programnev, Parameterek);
Programnev: String; - a futtatható állomány elérési útját, nevét és kiterjesztését tartalmazza.
Parameterek: String; - ha a külsõ programnak paramétereket szeretnénk átadni, azokat ebben a változóban kell elhelyezni.
Az eljárás EXE és COM kiterjesztésû programok futtatására alkalmas, a BAT kiterjesztésû kötegelt állományok indítása közvetlenül nem megoldható (egy trükk segítségével igen).

SwapVectors eljárás:
A megszakítási vektorok tartalmának elmentése. Szintaxisa: SwapVectors;
A SwapVectors eljárást célszerû meghíni az Exec eljárás alkalmazása elõtt és után, hogy a hívott és az általunk írt program megszakításai ne keveredjenek össze. Általában minden program használja a megszakításokat, ezért célszerû minden esetben alkalmazni ezt az eljárást, ha külsõ programot szeretnénk programunkból futtatni.

DosExitCode függvény:
Az utoljára hívott külsõ program visszatérési kódja. Szintaxisa: Kod:= DosExitCode;
A függvény visszatérési értéke alapján megtudhatjuk, hogy a program sikeresen fejezõdött-e be.
 

Megszakítások kezelése:
Ebbe a csoportba tartoznak azok az eljárások, függvények, amelyek az operációs rendszer és a BIOS alacsony szintû szolgáltatásainak igénybevételéhez szükségesek.

Intr eljárás:
Megszakítás hívása. Szintaxis: Intr(N, R);
N: Word - ezt a megszakítást fogja az eljárás aktivizálni.
R: Registers; - ez a paraméter a regiszterek aktuális értékét tartalmazza. Minden esetben változó kell legyen.
Magyarázat helyett álljon itt egy egyszerû példa a megszakítások használatára. Írjunk ki egy karaktert a képernyõre.

Uses DOS;
Var R: Registers;
Begin
    R.Ah:= $9;           
    R.Al:= Ord('A');   
    R.Bl:= $07;          
    Intr($10, R);         
End.

MsDos eljárás:
A $21 megszakítás hívása. Szintaxisa: MsDos(R);
R: Registers; - ez a paraméter a regiszterek aktuális értékét tartalmazza. Minden esetben változó kell legyen.
Az eljárás egyenértékû az Intr($21, R) eljárás hívásával. Mivel a $21 sorszámú megszakítás a DOS funkciókat aktivizálja, kiemelt szerepe van - ezeket használjuk leggyakrabban - ezért külön eljárást kapott a DOS unitban.
Egy példa az MsDos eljárás használatára: Kérdezzük le az operációs rendszer verziószámát. (Windows alatt is mûködik!)

Uses DOS;
Var R: Registers;
Begin
    R.Ax:= $3000;
    MsDos(R);      
    Writeln('Az operacios rendszer verzioszama: ', R.Al, '.', R.Ah);
End.
 
 




Találat: 1427


Felhasználási feltételek