470 likes | 637 Views
Knižnica CRT. Správa obrazovky. Knižnica CRT. práca s obrazovkou - ClrEol , ClrScr , nastavenie zobrazovacieho módu - HighVideo , LowVideo , NormVideo , TextMode , práca so zvukom - Delay, NoSound, Sound , práca s farbou - TextBackgruond, TextColor
E N D
Knižnica CRT Správa obrazovky
Knižnica CRT • práca s obrazovkou - ClrEol, ClrScr, • nastavenie zobrazovacieho módu - HighVideo, LowVideo, NormVideo, TextMode, • práca so zvukom - Delay,NoSound, Sound, • práca s farbou - TextBackgruond, TextColor • práca s oknami - Window, DdelLine, InsLine • vstup s klávesnice a jej test -keyPressed, Readkey • kurzorová adresácia - WhereX, WhereY, Gotoxy Pascal 2006
ClrScr; Vymaže obsah obrazovky a umiesti kurzor do ľavého horného rohu. Obrazovka po vymazaní má aktuálnu farbu pozadia. Procedúra sa vzťahuje k aktívnemu oknu. uses Crt; begin Writeln('Hello. Stlač kláves <enter>...'); Readkey; ClrScr; end. Pascal 2006
ClrEol; Vymaže všetky znaky od polohy kurzoru do konca riadku v okne. Pozíciu kurzoru neposunie. Znaky sa nahradia medzerami, ktoré sa zobrazia s aktuálnym atribútom. uses Crt; begin ClrScr; Writeln('Haló, ako je dnes?'); Writeln('Stlač kláves <enter> ...'); Readln; GotoXY(1,2); ClrEol; Writeln ('Je príjemné ťa počuť!'); end. Pascal 2006
Sound (Hz : word); NoSound; Sound() spustí zvukový generátor. Parameter definuje kmitočet, na ktorom bude generátor pracovať. Kmitočet sa udáva v hertzoch. Zvukový generátor pracuje, pokiaľ sa nevyvolá procedúra NoSound. Nosound() - Vypne zvukový generátor. Procedúra sa musí vyvolať, keď chceme ukončiť činnosť zvukového generátoru po predchádzajúcom volaní sound. Pascal 2006
Delay (ms : word); Pozastaví vykonávanie programu na definovaný počet milisekúnd, ktoré udáva parameter ms. Definovaný časový interval sa nedodrží úplne presne, pretože procedúra čas zaokrúhli na strojové cykly. uses Crt; begin Sound(220); {začne pípať } Delay(200); { 200 ms } NoSound; { ukončí pípanie } end. Pascal 2006
TextBackground (color : byte); Nastaví farbu pozadia. Parameter Color je celočíselný výraz, ktorý môže nadobúdať hodnôt 0-7. V knižnici CRT sa ukladá aktuálny atribút zobrazenia textu v premennej TextAttr. Procedúra TextBackground nastavuje bity 4-6 tejto premennej. Pascal 2006
TextColor (color : byte); Nastaví farbu popredia znaku. Parameter Color je celé číslo z intervalu 0..15, ktoré definuje farbu. V knižnici CRT sa ukladá aktuálny atribút zobrazenia textu do premenné TextAttr. Procedúra TextColor nastavuje bity 0-3, pokiaľ je hodnota color väčšia ako 15, potom sa nastavuje aj bit blikania - bit č.7. Pascal 2006
ReadKey; Prečíta znak z klávesnice. Ak bola funkcia KeyPressedtrue pred vyvolaním funkcie ReadKey, funkcia vracia znak okamžite. V opačnom prípade funkcie čaká na stlačenie klávesu. Každý kláves klávesnice generuje kód o veľkosti dva byty. Pre základné klávesy je ASCII kód uložený na prvom generovanom byte, pri rozširujúcich klávesoch je rozšírený kód uložený na druhom generovanom byte. Pascal 2006
ReadKey; uses Crt; var C: Char; begin Writeln('Stlač kláves ... '); C := Readkey; Writeln(' Stlačil si ',C,', jeho hodnota je ',Ord(C),'.'); Writeln('Stlač funkčný kláves ... '); C := Readkey; If c=#0 then c:=readkey; Writeln(' Stlačil si ',C,', jeho hodnota je ',Ord(C),'.'); end. Pascal 2006
KeyPressed: boolean; Vracia logickú hodnotu true, keď bol stlačený ľubovolný kláves na klávesnici. Vo všetkých ostatných prípadoch funkcia vracia logickú hodnotu false. Funkcia neinterpretuje stlačenie rozširujúcich kláves Shift, Alt, NumLocck, Ctrl, a pod.. Stlačený znak zostane vo vyrovnávacej pamäti klávesnice a musí sa vybrať pomocou funkcie ReadKey. uses Crt; begin repeat until KeyPressed; {čaká na stlačenie ... } end; Pascal 2006
GoToXY (X,Y : byte); Nastaví polohu kurzoru v aktívnom okne. Polohu kurzoru definujú parametre X a Y. X definuje súradnicu stĺpca, Y definuje súradnicu riadku. Súradnice ľavého horného rohu okna je (1,1). uses Crt; begin GotoXY(10,10); Writeln('Hello'); end. Pascal 2006
WhereX: byte; WhereY: byte; Vracia horizontálnu a vertikálnu súradnicu X a Y polohy kurzoru, stĺpca, vzhľadom k aktuálnemu oknu. uses Crt; begin Writeln; Writeln; Write('Táto veta je na #'); Writeln(WhereX, '. stĺpci v okne.'); Writeln(WhereY, '. riadku okna.'); end. Pascal 2006
Knižnica DOS • Základné procedúry a funkcie • Práca so súbormi a diskami • Stavové procedúry a funkcie Pascal 2006
DOS – základné prvky • spracovanie dátumu a času - GetDate, GetFTime, GetTime, PackTime, SetDate, SetFTime, SetTime, UnpackTime • riadenie behu programu a komunikácia so systémom - exec, keep, SwapVectors, DosExitCode, • ostatné - GetBreak, SetBreak Pascal 2006
GetDate (var rr, mm, dd, dow : word ); Vracia aktuálny dátum nastavený v operačnom systéme. • Parameter rr môže byť v rozsahu 1980..2099, • Mm môže byť v rozsahu 1..12, • Dd v rozsahu 1..31, • Dow - DayOfWeek v rozsahu 0..6, pričom týždeň začína nedeľou, ktorej prináleží hodnota 0. Pascal 2006
GetDate - príklad uses Dos; const days : array [0..6] of String[9]= ('Nedeľa', 'Pondelok', 'Utorok', 'Streda', 'Štvrtok', 'Piatok', 'Sobota'); var y, m, d, dow : Word; begin GetDate(y,m,d,dow); Writeln('Dnes je ',days[dow],',',m:0,'/',d:0,'/',y:0); end. Pascal 2006
PackTime (var DT : DateTime; var Time : longint ); Vykoná konverziu údaju dátumu a času na záznam o veľkosti 4 byte. Typ prvého parametra je definovaný v knižnici DOS takto type DateTime = record Year, Month, Day : word; Hour, Min, Sec : word; end; DT je parametrom volania procedúry a definuje časový údaj. Parameter Time je výstupným parametrom a vracia komprimovaný údaj s veľkosťou 4 byte. Pascal 2006
UnpackTime (Time : longint; var DT : DateTime); Vykoná konverziu záznam s veľkosťou 4 byte na údaj typu dátumu a času. Typ druhéhoparametra je definovaný v knižnici DOS takto type DateTime = record Year, Month, Day : word; Hour, Min, Sec : word; end; Parameter Time je vstupným parametrom a obsahuje komprimovaný údaj s veľkosťou 4 byte. DT je výstupným parametrom volania procedúry do ktorého sa ukladá časový údaj v definovanom tvare. Pascal 2006
Exec (Path, CmdLine : string); Spustí program pomocou systémového interpreta príkazov. Názov programu je definovaný parametrom Path, príkazový riadok parametrom CmdLine. Procedúra Exec nemení stav pridelení operačnej pamäti. Spúšťanému programu musí stačiť dostupná pamäť haldy. Pokiaľ procedúra neprebehne korektne, premenná DosError sa nastaví na nenulovú hodnotu, vo väčšine prípadov je to hodnota 8. Pascal 2006
Spustenie programu {$M $4000,0,0 } { 16K stack, bez heapu } uses Dos; var PrgName, CmdLine: string; begin Write('Zadaj názov programu včítane cesty: '); ReadLn(PrgName); Write('Parameter volaného programu : '); ReadLn(CmdLine); WriteLn('Teraz by sa mal vykonať ...'); SwapVectors; Exec(PrgrName, CmdLine); SwapVectors; WriteLn('...návrat späť '); ifDosError <> 0 then Write('Chyba #', DosError) else Write('kod návratu = ',DosExitCode); end. Pascal 2006
Keep (ExitCode : word); Ukončí vykonávanie programu, ale jeho kód ponechá v operačnej pamäti. Po vykonaní procedúry zostáva kód ukončeného programu v operačnej pamäti včítane dátového segmentu a segmentu zásobníku. V programoch, ktoré využívajú procedúru Keep je nutné definovať maximálnu veľkosť haldy pomocou direktívy prekladača $M. Parameter procedúry definuje návratový kód procesu, ktorý je možné vyhodnotiť v nadriadenom procese. Procedúra sa používa pre vytváranie programov TSR - "Terminate and Stay Resident“ Pascal 2006
Práca s diskami a súbormi • informáciao stave diskových jednotiek -DiskFree, DiskSize • vyhľadávanie súborov - FindFirst, FindNext, Fsearch • operácie nad atribútmi súboru - GetFAttr, SetFAttr • doplnenie alebo rozloženie mena súboru - Fexpand, Fsplit Pascal 2006
DiskFree (Drive : word) longint; Vracia počet voľných bytov na definovanej diskovej jednotke. Parameter Drive označuje diskovú jednotku, na ktorej sa má funkcia vykonať, 0,1 a:, 2 b: atď. Výsledok funkcie je hodnota typu longint. uses Dos; begin Writeln(DiskFree(0) div 1024, ' kB voľných '); end. Pascal 2006
DiskSize (Drive : word) : longint; Vracia celkovú kapacitu diskovej jednotky v bytoch. Parameter Drive označuje diskovou jednotku, na ktorej sa má funkcia vykonať, pričom 0 je aktuálne jednotka, 1 A, 2 B atď. Výsledok funkcie je typu longint. uses Dos; begin Write(DiskSize(0) div 1024, ' Kbytes capacity'); end. Pascal 2006
FindFirst (Path : string; Attr : word; var S : SearchRec); Vyhľadá v adresári prvý výskyt definovaného súboru. Parameter Path definuje cestu prístupu k adresári a vyhľadávaný súbor. Súbor sa môže definovať úplným menom a rozšírením alebo pomocou masky zostavenej z pomocných znakov „*“ a „?“, pričom „?“ znamená jeden znak a „*“ je vo význame všetko. V prípade, že sa definuje maska súboru, vyhľadá sa prvý súbor, ktorý odpovedá definovanej maske. Pascal 2006
Atribúty súboru alebo adresáru Parameter Attr definuje atribút hľadaného súboru, alebo adresáru: • ReadOnly $01 • Hidden $02 • SysFile $04 • VolumeID $08 • Directory $10 • Archive $20 • AnyFile $3F Pascal 2006
FindNext (var S : SearchRec); Vyhľadá ďalší výskyt definovaného súboru v adresári podľa definície, ktorá sa vykonala pri poslednom volaní procedúry FindFirst. Procedúra nadväzuje na procedúru FindFirst a pokračuje v hľadaní ďalších výskytov definovaného súboru v adresári. Výsledok hľadania sa vráti vo formáte záznamu, ktorý sa definuje ako : type SearchRec = record Fill: array[1..21] of byte; Attr: byte; Time: longint; Size: longint; Name: string[12]; end; Pascal 2006
Findfirst, findnext var DirInfo: SearchRec; begin FindFirst('*.PAS', Archive, DirInfo); while DosError = 0 dobegin ´[<>18] Writeln(DirInfo.Name); FindNext(DirInfo); end; end. Pascal 2006
DOS – stavové prvky • nastavenie verifikácie v operačnom systéme - GetVerify, SetVerify • ošetrenieprerušenia -Intr, MsDos, GetIntVec, SetIntVec • identifikácia systému - DosVersion • prístup na systémové deklarácie premenných - EnvCount, EnvStr, GetEnv, Pascal 2006
EnvCount: integer;EnvStr (Index : integer) : string;GetEnv (EnvVar : string) : string; Vracia počet reťazcových konštánt v systémovom prostredí operačného systému MS-DOS (SET). Výsledok funkcie je typu integer. Funkcia spočíta všetky reťazce v segmente systémového prostredia. Každý reťazec je v systémovom prostredí uložený vo formáte : premenná = hodnota a je ukončený znakom null. Reťazce zo systémového prostredia je možné vybrať pomocou funkcie EnvStr. Pascal 2006
Unit Graph V jednotke Graph je implementovaná úplná knižnica podprogramov grafiky na rôznych úrovniach, od vysoko úrovňových až k bitovo orientovaným rutinám. Podprogramy vedia pracovať s rôznymi druhmi písma, ktorých veľkosť je možné modifikovať. Súbory BGI Pascal 2006
InitGraph a CloseGraph V grafickom programe identifikuje procedúra InitGraph technické prostriedky grafiky, zavedie a inicializuje príslušný grafický riadiaci program, nastaví systém do grafického režimu a potom predá riadenie volajúcemu podprogramu. Procedúra CloseGraph zruší riadiaci program grafiky z pamäti a obnoví predchádzajúci režim zobrazovacej jednotky. Pascal 2006
CrtMode – restore a set Podprogramy RestoreCrtMode a SetCrtMode slúžia k prepínaniu medzi textovým a grafickým režimom. Po inicializácii jednotky procedúrou InitGraph, sa zvolí správny typ monitoru pre požadovaný riadiaci program a režim. Podprogramy jednotky umožňujú vykonávať autodetekciu grafického hardware, v tomto prípade sa nastaví režim s najvyššou kvalitou zobrazenia. Pascal 2006
Move-, Line-, OutText Grafické režimy nepracujú s kurzorom, ale s tzv, grafickým ukazovateľom alebo grafickým kurzorom. Grafický ukazovateľ je neviditeľný. V grafických režimoch sa ukazovateľ nastaví na posledný bod kreslenej čiary, podľa použitej grafickej procedúry. Pre nastavenie pozície ukazovateľa je v grafických režimoch k dispozícii procedúra MoveTo a má rovnaký význam ako procedúra GotoXY v textovom režime. Aktuálny ukazovateľ posunujú len tie procedúry, ktoré ho používajú ako MoveTo, MoveRel, LineTo, LineRel, alebo OutText. Pascal 2006
SetTextStyle, OutTextXY V grafických režimoch je možné rovnako pracovať s textami. Sú k dispozícii dva základné druhy písma : • bitovo mapované písmo v matici 8x8 bitov • úsečkové písmo, ktoré sa definuje sadou vektorov kreslenia písma Úsečkové typy písma sú výhodné pre kreslenie veľkých znakov, pri zväčšovaní a zmenšovaní písma. Naopak bitovo mapované písmo je vhodné pre zobrazenie menších znakov. Nastavenie typu písma sa môže vykonať procedúrou SetTextStyle. Výstup grafického textu sa realizuje procedúrou OutTextXY. Pascal 2006
GetImage, PutImage, viewPort • Ďalšiu skupinu grafických procedúr sú procedúry pre kreslenie a vyplňovanie obrazcov, bodov, čiar, kružníc, oblúkov, elíps, pravouholníkov, polygónov, pruhov, trojrozmerných stĺpcov a kruhových výrezov pre grafy. Je možné nastaviť spôsob kreslenia čiar, vyplnenie stĺpca alebo mnohouholníka. • Na grafickej obrazovke je možné definovať výrez, tzv. ViewPort, ku ktorému sa vzťahuje grafický výstup. Pokiaľ sa ViewPort definuje na obrazovke, ostatné časti obrazovky sú pre grafické procedúry neprístupné. Výrezy časti obrazu je možné taktiež ukladať do pamäti počítače pomocou procedúry GetImage a spätne zobrazovať na obrazovku pomocou procedúry PutImage. Pascal 2006
Knižnica OVERLAY Jednotka obsahuje podporu vytvárania rozširujúcich – prekrývaných - modulov programu. Rozširujúce moduly sú časti programu, ktoré zdieľajú v operační pamäti rovnakú oblasť, ktorá je určená pre kód programu. Oblasť pamäti, vyhradená rozširujúcim modulom, sa môže v priebehu vykonávania programu plniť iným programových kódom. Pascal 2006
P1 novýexe programaprekrývanémoduly Pôvodnýexe Samostatné súbory s príponou *.ovr P3 P2 P2 P5 Viac ako 64 Kb P3 P1 P4 P4 Prg P5 Prg Pascal 2006
Moduly knižnice Overlay Rozširujúce – prekrývané - moduly sa môžu ukladať do rozšírenej pamäti počítača (t.j. do pamäti nad 640 KB - EMS). Pri preklade programu, ktorý pracuje s prekrývanými modulmi, prekladač automaticky generuje výstupný modul s príponou „*.OVR“ - overlay. Tento modul potom prináleží hlavnému programu, ktorý sa uloží v súbore s príponou „*.EXE“. Súbor .EXE obsahuje statickú časť kódu programu a súbory .OVR rozširujúci kód. Základné moduly overlay :OvrClearBuf, OvrGetBuf, OvrGetRetry, OvrInit, OvrInitEMS, OvrSetBuf, OvrSetRetry Pascal 2006
Overlay - príklad Program Example; {$F+} Uses Overlay, CRT, Dos, ExInOut, ExPrint; {$O ExInOut} {$O ExPrint} V klauzule uses sa musí vždy ako prvá uvádzať knižnica Overlay. Pokiaľ jednotky nebudú preložené s voľbou {$O+}, bude prekladač generovať chybové hlásenie. Zo štandardných knižníc sa môže používať v rozširujúcich moduloch len knižnica DOS. Obecne platí, že nie je možné v prekrývaných moduloch používať knižnice, ktoré vykonávajú obsluhu prerušenia. Pascal 2006
Knižnica Printer Jednotka Printer obsahuje prepojenie výstupu z programu na tlačiareň. Jednotka deklaruje textový súbor nazvaný LST a priradí ho k zariadeniu LPT1. Bez použitia jednotky nie je možné smerovať výstup na tlačiareň pomocou odkazu na zariadenie LST, bez vlastnej deklarácie súboru LST. V programoch je možné vykonávať všetky odkazy na výstupné zariadenie, napríklad: WriteLn(LST,'Výstup na štandardnú tlačiareň...'); Pascal 2006