Předchozí strana Obsah Další strana

5. MODULÁRNÍ PROGRAMOVÁNÍ


  1. Unity CRT, SYSTEM, GRAPH, DOS, OVERLAY, PRINTER
    1. Unita CRT
    2. Unita SYSTEM
    3. Unita GRAPH
    4. Unita DOS
    5. Unita OVERLAY
    6. Unita PRINTER
  2. Vlastní unity

5.1. UNITY CRT, SYSTEM, GRAPH, DOS, OVERLAY, PRINTER

5.1.1. UNITA CRT

Tato jednotka obsahuje programové prostředky, které zajišťují kontrolu režimů obrazovky, řízení systému zobrazení, vstupu z klávesnice, obsahují podporu práce s okny, barvami a zvuky. Jednotka implementuje řadu mocných prostředků, které dávají plnou kontrolu nad vzhledem počítače. Jednotka Crt může být použita v programech, které pracují na počítačích IBM PC, AT, PS/2, a kompatibilních.

Využití jednotky se definuje v programu v deklaraci jednotek (uses). Použitím této jednotky se zvyšuje rychlost výstupních operací, neboť požadavek výstupu je programy adresován přímo BIOSu nebo programy přímo přistupují do obrazové paměti grafické karty počítače.

V této jednotce je implementována podpora práce s okny na obrazovce, a to pomocí procedury WINDOW. Okno se dá definovat na obrazovce na jakékoliv pozici a je určeno souřadnicemi. Tyto souřadnice se vždy vztahují relativně k aktivnímu oknu. Levý horní roh okna má souřadnice (1,1), tyto souřadnice má levý horní roh každého nově vytvořeného okna. Vnitřní plocha okna se chová jako celá obrazovka. V okně se dají vkládat a mazat řádky, posouvat textem, pohybovat kurzorem apod.

Pokud pracujeme s celou obrazovkou, je tato rozdělena na 80 sloupců a 25 řádků. Na jiných grafických adaptérech však lze nastavit toto rozdělení i na 40 sloupců a 25 řádků, na EGA a VGA adaptérech lze nastavit režimy se 43 nebo 50 řádky, případně se 132 sloupci.

Řídící kódy:

Konstanty nastavení barev:

Black - černá 0 LightBlue - světle modrá 9
Blue - modrá 1 LightGreen - světle zelená 10
Green - zelená 2 LightCyan - světle modrozelená 11
Cyan - modrozelená 3 LightRed - světle červená 12
Red - červená 4 LightMagenta - světle fialová 13
Magenta - fialová 5 Yellow - žlutá 14
Brown - hnědá 6 White - bílá 15
LightGray - světle šedá 7 Blink - blikání 128
DarkGray - tmavě šedá 8    

Konstanty nastavení režimu zobrazení:

Proměnné jednotky CRT:

Frekvence jednotlivých tónů pro tvorbu hudby:

  0 1 2 3 4 5 6 7
C 16,4 32,7 65,4 130,8 261,6 523,3 1046,5 2093
C# 17.3 34,6 69,3 138,6 277,2 554,4 1108,7 2217,5
D 18,4 36,7 73,4 146,8 293,7 587,3 1174,7 2349,3
D# 19,4 38,9 77,8 155,6 311,1 622,3 1244,5 2489
E 20,6 41,2 82,4 164,8 329,6 659,3 1318,5 2637
F 21,8 43,7 87,3 174,6 349,2 698,5 1396,9 2793,8
F# 23,1 46,2 92,5 185 370 740 1480 2960
G 24,5 49 98 196 392 784 1568 3136
G# 26 51,9 103,8 207,7 415,3 830,6 1661,2 3322,4
A 27,5 55 110 220 440 880 1760 3520
A# 29,1 58,3 116,5 233,1 466,2 932,3 1864,7 3729,3
H 30,9 61,7 123,5 246,9 493,9 987,8 1975,5  

Procedury a funkce jednotky:

Programy k této unitě:

5.1.2. UNITA SYSTEM

je základní jednotkou Pascalu a obsahuje všechny standardní procedury a funkce. Nemusí se deklarovat v klausuli uses, neboť tuto jednotku používají všechny unity a programy standardně. Jednotka obsahuje procedury a funkce pro řešení operací vstupně-výstupních, aritmetických, goniometrických, procedury a funkce pro práci s řetězci, pro dynamické proměnné a pro práci se soubory.

Procedury a funkce jednotky:

5.1.3. UNITA GRAPH

Tato jednotka v sobě implementuje knihovnu více než 50 grafických procedur a funkcí, které využívají všech možností grafické karty počítače. Řízení grafické karty v Pascalu zajišťují grafické ovladače, které jsou implementovány v grafických knihovnách se standardní příponou .BGI. Standardně dodávané knihovny dokáží ovládat grafické karty typů CGA, EGA, Hercules, ATT400, MCGA, VGA a IBM-8514. Následující výpis ukazuje ovladače i typy adaptérů:

Cga.bgi
ovladač pro grafické adaptéry CGA a MCGA
Egavga.bgi
ovladač pro grafické adaptéry EGA a VGA
Herc.bgi
ovladač pro grafický adaptér Hercules
Att.bgi
ovladač pro grafický adaptér AT&T 6300 (400 řádků)
PC3270.bgi
ovladač pro grafický adaptér IBM 3270 PC
IBM8514.bgi
ovladač pro grafický adaptér IBM-8514

Procedury a funkce jednotky:

5.1.4. UNITA DOS

Tato jednotka obsahuje procedury a funkce pro přímou komunikaci běžící aplikace a operačního systému a procedury a funkce, které řeší standardní operace operačního systému.

Procedury a funkce jednotky

5.1.5. UNITA OVERLAY

Tato jednotka obsahuje procedury a funkce pro tvorbu překryvných modulů programu. A co rozumíme překryvným modulem programu? Jsou to části programu, které sdílejí v operační paměti stejnou oblast určenou pro kód programu. Tato oblast paměti, která je pro překryvné moduly vyhrazena, se v průběhu vykonávání programu naplňuje jiným kódem, za běhu programu tedy dochází v této oblasti k překrývání kódu.

Z předchozího vyplývá, že používání překryvných modulů snižuje nároky programů na operační paměť počítače,stejně tak jako umožňuje spouštět programy, jejich velikost kódu přesahuje velikost operační paměti. Při využití překryvných modulů se do paměti zavádí pouze část kódu programu a překryvné moduly se postupně nahrávají z disku do vyhrazené paměti, určené právě pro překryvné moduly.

Více se o tomto můžeme dovědět např. z [2].

5.1.6. UNITA PRINTER

Tato jednotka se využívá k propojení výstupů programu na tiskárnu. Obsahuje deklaraci textového souboru Lst, který se přiřadí k zařízení LPT1. Poté se může směrovat výstup programu na tiskárnu pomocí příkazu

 writeln(Lst,'Vystup na tiskarnu.'); 

 

5.2. VLASTNÍ UNITY

Jednotky jsou základy modulárního programování v Pascalu a lze je používat pro vytvoření vlastních knihoven a pro rozdělení dlouhých programů do logicky souvisejících modulů.

Již hotová jednotka, tedy přeložená pekladačem Borland Pascalu, je uložena ve strojovém kódu. Procedury a funkce, které jsou z jednotky využívány, se vkládají do kompilátoru Pascalu přímo v binárním tvaru. Využívání jednotek v programech tedy zkracuje dobu překladu.

A dále. Jednotky, které si sami vytvoříme, nemusí obsahovat procedury, funkce a jiné prvky, které využijeme pouze v jednom programu. Mohou zahrnovat určité spektrum problémů, které chceme pomocí procedur a funkcí v jednotkách řešit. Takto vytvořené knihovny potom můžeme s úspěchem využívat celou skupinou programů. Další důležitý význam mají knihovny v tom smyslu, že rozdělují obsáhlý program do tématických modulů. Jednotlivé jednotky řeší potom např. vstupní operace, výstupní operace, práci s grafikou (pokud např. vytváříme pěkné uživatelské grafické rozhraní programu), apod. Důsledkem tohoto rozdělení obsáhlého programu na dílčí jednotky je také v určitých případech vyřešení problému s velkým množstvím segmentu pro kód programu (globálních proměnných, nových námi definovaných datových typů apod.). Jeden segment pro kód programu může nabýt maximální velikosti 64 kB. Pokud program rozdělíme do jednotek, překladač pro každou využívanou jednotku vytváří nový segment pro kód programu.

Vlastní jednotky vytváříme přesně podle definované struktury:

 unit Identifikátor;    { Záhlaví jednotky } 
  
 interface            { Veřejné symboly } 
   uses                 { Klauzule uses } 
   const               { Konstanty } 
   type                  { Typy } 
   var                    { Proměnné } 
   procedure      { Procedury } 
   function          { Funkce } 
  
 implementation    { Soukromé symboly } 
   uses                      { Klauzule uses } 
   label                      { Návěští } 
   const                    { Konstanty } 
   type                      { Typy } 
   var                        { Proměnné } 
   procedure          { Procedury } 
   function              { Funkce } 
 begin         { Inicializace } 
   příkazy;    { Příkazy } 
 end

Nyní si jednotlivé části jednotky podrobněji probereme:

Hlavička jednotky -
Hlavička jednotky začíná klíčovým slovem unit, za nímž následuje jméno jednotky, kterým se odkazujeme na jednotku v hlavním programu v klauzuli uses. Toto jméno musí být jedinečné, nesmí se shodovat se jménem jiných jednotek.
Část interface -
V částí interface se za klíčovým slovem uses uvádí jednotky, které nová jednotka používá. Také se zde deklarují konstanty, datové typy, proměnné, procedury a funkce, které jsou veřejné, dostupné uživatelům jednotky. V této části jsou uvedena pouze záhlaví procedur a funkcí. Těla procedur a funkcí jsou v implementační části.
Externí procedury se uvádějí klíčovým slovem external.
Procedury a funkce s direktivou inline uvádějí strojový kód přímo v této části, deklarace a tělo v části implementation se již neuvádí.
Deklarace forward není povolena.
Část implementation -
V částí interface se za klíčovým slovem uses uvádí jednotky, které nová jednotka používá. Také se zde deklarují konstanty, datové typy, proměnné, procedury a funkce, které nejsou veřejné, jsou nedostupné uživatelům jednotky. V této části jsou uvedena záhlaví procedur a funkcí i s těly těchto procedur a funkcí.
Inicializační část -
Inicializační část je poslední část jednotky. Obsahuje buď vyhrazené slovo end. (žádný inicializační kód), nebo příkazovou část, která má být vykonána při inicializaci jednotky. Tato příkazová část je uzavřena mezi vyhrazenými slovy begin a end.

Vlastní jednotky se překládají stejně jako běžné aplikační programy. Překladač Borland Pascalu sám pozná, kdy překládá aplikaci a kdy knihovnu. Podle toho také rozlišuje výsledný typ programu: aplikační program má koncovku EXE, kdežto přeložená knihovna má koncovku TPU.

Při provádění jakýchkoliv změn v části interface musíte opět přeložit nejen tuto knihovnu, ale také všechny knihovny, které tuto knihovnu využívají. Pokud však provedete nějakou změnu v části implementation, nemusíte již ostatní knihovny, které tuto knihovnu využívají, znovu překládat.


Předchozí strana Obsah Další strana