Programové jednotky Printer, Crt, Graph, Graph3

Všechny tyto jednotky mají vztah ke grafickému výstupu programu. Jednotka Graph tvoří velmi rozsáhlý systém, dnešní lekce bude proto poněkud delší.

Jednotka Printer

Tato jednotka slouží k rychlé a pohodlné obsluze tiskárny. Je velice malá, vlastně jenom deklaruje soubor Lst. Výpis do tohoto souboru znamená tisk na LPT1. (Což využijete jedině na starších počítačích.)

Raději na příkladu :

program TunaPapiru;
uses Printer;
begin
   repeat
      Writeln(Lst,'Tiskneme, tiskneme');
   until false;
end.

Jednotka Crt

Tato jednotka se využívá pro tvorbu všemožných (i nemožných) textových efektů (blikající barevné písmo, umístění textu na přesné místo obrazovky). Velice usnadňuje práci s klávesnicí a obrazovkou. Některé kompilátory obsahují příkazy jednotky Crt již v jednotce System (tedy jako příkazy, které lze použít kdykoliv.)

Ve své inicializační části tato jednotka inicializuje soubory Input (vstup z klávesnice) a Output (výstup na obrazovce).

Klasická jednotka Crt má jednu velkou nevýhodu - nefunguje na počítačích s procesorem rychlejším než 200 MHz. Na Internetu jsou však dostupné opravené jednotky Crt (i když občas třeba pod jiným názvem), které tuto chybu odstraňují. Lze také stáhnout patch, který umožní, aby staré programy, které byly napsané s využitím Crt, fungovaly i na novějších strojích.

Speciální znaky

Speciální znaky ASCII (nevypíšou se, ale něco udělají):

Speciální ASCII znaky
Pořadí Příkaz Význam
1 #7 (to samé jako Chr(7)...) Pípnutí interního generátoru (PC-speaker)
2 #8 Vrátí kurzor o jeden znak zpět (Backspace)
3 #10 LF Line Feed. Posune kurzor o řádek níž, když je kurzor dole, vše na obrazovce posune o řádek nahoru
4 #13 CR Carriage Return. Vrátí kurzor na začátek řádky. (CRLF je konec řádky)

Při čtení dat z klávesnice mají speciální význam tyto klávesy (a tyto kombinace):

Význam speciálních kláves
Pořadí Klávesa Význam
1 BackSpace Smaže poslední vložený znak
2 ESC Smaže celou řádku
3 Enter Ukončí řádku a vloží na konec znak konce řádky (CRLF)
4 Ctrl-S Stejné jako BackSpace
5 Ctrl-D Vybere znak z předchozí řádky
6 Ctrl-A Jako ESC
7 Ctrl-F Zkopíruje celou předchozí řádku
8 Ctrl-Z V případě, že jsme nastavil CheckEOF na true, ukončí řádku a vloží znak konce souboru

Konstanty jednotky Crt

Některá čísla dostala své vlastní názvy, aby bylo lépe vidět, v jakém významu jsou použita. (Pochopitelně můžeme od použití těchto názvů upustit, ale náš program pak bude pro ostatní méně srozumitelný, čemuž se chceme vyhnout, že?!)

Konstanty textových režimů

Konstanty textových režimů
Pořadí Konstanta Hodnota Význam
1 BW40 0 40x25 černobílý (Black/White) režim na barevném adaptéru (EGA,CGA,..)
2 CO40 1 40x25 barevný (Color) režim na barevném adaptéru
3 BW80 2 80x25 černobílý (Black/White) režim na barevném adaptéru
4 CO80 3 80x25 barevný (Color) režim na barevném adaptéru
5 Mono 7 80x25 černobílý (Black/White) režim na monochromatickém adaptéru (Hercules)
6 Font8x8 256 u EGA/VGA karet 43/50 řádek - lze kombinovat s ostatními konstantami sčítáním : CO80+Font8x8 - barevný režim 80x43
7 C40 C040 Totéž co CO40, zachováno v rámci kompatibility s Turbo Pascalem 3.0
8 C80 C080 Stejné jako CO80, zachováno kvůli kompatibilitě

Tyto konstanty se používají např. u procedury TextMode, či při zjišťování nastaveného režimu pomocí proměnné LastMode. Pochopitelně lze využít i číselnou reprezentaci těchto konstant, což však sníží přehlednost a přenositelnost programu (v dalších verzích mohou být daná čísla použita k jiným účelům...)

Konstanty barev

Při práci s barvou textu (či pozadí) je použití těchto konstant výhodné, protože je okamžitě vidět, co to která barva znamená (nemusíme si pamatovat příslušná čísla).

Procedury a funkce pro práci s dynamickými proměnnými
Hodnota Název Význam
0 Black Černá
1 Blue Modrá
2 Green Zelená
3 Cyan Světle modrá
5 Red Červená
6 Magenta Fialová
7 Brown Hnědá
8 DarkGray Tmavě šedá
9 LightBlue Jasně modrá
10 Lightgreen Jasně zelená
11 LightCyan Jasně světlá modrá
12 LightRed Světle červená
13 LightMagenta Světle fialová
14 Yellow Žlutá
15 White Bílá
128 Blink Blikající - lze kombinovat s ostatními: White+Blink je blikající bílá

Proměnné jednotky Crt

Pomocí těchto proměnných je možné zjistit a změnit aktuální nastavení výstupu na obrazovku a přijmu dat z klávesnice.

Procedury a funkce pro práci s dynamickými proměnnými
Pořadí Proměnná:Typ Význam
1 CheckBreak :Boolean; V případě, že ji nastavíme na false, Ctrl-Break neukončí program
2 CheckEOF :Boolean; V případě, že nastavíme na true, povolí generování znaku konce souboru - např. pomocí Ctrl-Z
3 CheckSnow :Boolean; V případě, že nastavíte na false, bude zápis do videopaměti probíhat i když se na obrazovka zrovna kreslí, což může vést k efektu "sněžení", je to ale rychlejší a např. u CGA se to vyplatí
4 DirectVideo :Boolean; V případě, že nastavíme na false, budou se pro výpis dat volat funkce operačního systému, což je mnohem pomalejší, ale lépe přenositelné (funguje pro všechny grafické karty)
5 LastMode :word; Aktuální textový režim - viz konstanty textových režimů
6 TextAttr :byte; Barva textu, pozadí, a zda je zapnuto blikání
7 WindMin :word; Levý horní roh aktuálního okna
8 WindMax :word; Pravý dolní roh aktuálního okna

Hodnoty ve WindMin a WindMax jsou uloženy takto : vyšší byte ( Hi(Wind...) ) udává Y-ovou souřadnici a nižší byte (Lo(Wind...)) udává X-ovou souřadnici.

Hodnota TextAttr je složena v jednom bytu následovně : Bbbbffff. První čtyři bity (ffff) představují barvu textu (16 možností). Další 3 bity představují barvu pozadí (8 variant) a poslední bit B obsahuje informaci o tom, zda text bliká, či ne.

Barevné konstanty lze použít pro změnu proměnné TextAttr, musíme ovšem barvu pozadí vynásobit šestnácti (aby se posunula na správné místo) :
Tedy např. TextAttr:=White+Green*16+Blink;

Poznamenejme, že možnost blikání textu lze na novějších grafických adaptérech (EGA, VGA) vypnout. (Pro barvu pozadí nám zbudou 4bity a tím pádem šestnáct možností.) Jediná možnost, jak toho dosáhnout, je zavolat službu 3 přerušení $10 :

asm
 mov AH,10h {služba práce s paletou}
 mov AL,03h {podslužba - v daném bitu nastav intenzitu nebo blikání}
 mov BL,0h  {Nastav intenzitu napíšeme-li zde MOV BL,1h nastavíme blikání}
 int $10    {přerušení pro práci s obrazovkou}
end;

Od této chvíle můžeme pomocí TextAttr dosáhnout 16 barev i v pozadí. (Procedura TextBackground však stále umožňuje jen 8 "tmavých" barev)

Procedury a funkce jednotky Crt

Procedury a funkce jednotky Crt
Pořadí Příkaz Význam
1 AssignCrt(var f:Text); Přiřadí soubor k Crt (výstup bude řešen přímým zápisem podle hodnoty DirectVideo)
2 ClrEol; Vymaže znaky od kurzoru do konce řádky
3 InsLine; Vloží prázdnou řádku před řádku, na níž je kurzor (jde-li o poslední řádku, vše se posune o řádku nahoru)
4 DelLine; Smaže řádku na níž kurzor, vše pod ní šoupne o řádku nahoru.
5 ClrScr; Smaže obrazovku (zaplní ji celou jen barvou pozadí) a umístí kurzor do levého horního rohu
6 GotoXY(X,Y:byte); Přesune kurzor na X,Y (X-číslo sloupce, Y-číslo řádky)
7 WhereX:byte; Zjistí na kterém sloupci je kurzor;
8 WhereY:byte; Zjistí na které řádce se nachází kurzor
9 TextBackground(Color:byte); Změní barvu pozadí (Bere na vědomí jen hodnoty 0..7, vše ostatní mod 8)
10 TextColor(Color:byte); Změní barvu textu (Bere na vědomí jen 0..15, vše ostatní mod 16)
11 KeyPressed:boolean; Byla stisknuta klávesa?
12 ReadKey:char; Přečte kód stisknuté klávesy, u funkčních kláves generuje nejprve #0 a teprve poté kód klávesy
13 HighVideo; Nastaví vysoký jas (barvy textu 0..7 jsou převedeny na 8-15)
14 LowVideo; Nastaví nízký jas (barvy textu 8-15 jsou o 8 sníženy na 0..7)
15 NormVideo; Odstraní efekt procedur HighVideo a LowVideo, vrátí barvám původní hodnoty.
16 Delay(ms:word); Počká ms milisekund, poté pokračuje v běhu programu;
17 Sound(Hz:word); Začne na Speakeru vydávat zvuk o frekvenci Hz Hertzů (šílený pískot)
18 NoSound; Umlčí Speaker; (vypne ten pískot, jestliže použijete Sound, nezapomeňte na NoSound, jinak pištění nepřestane ani po skončení programu)
19 TextMode(Mode:word); Nastaví textový režim Mode, smaže celou obrazovku a zruší všechny uživatelem vytvořená okna, nastaví DirectVideo a CheckSnow na true, zavolá NormVideo a výsledek uloží do LastMode
20 Window(X1,Y1,X2,Y2:byte); Vytvoří textové uživatelské okno (X1,Y1 jsou souřadnice levého horního rohu, X2,Y2 pak pravého dolního). Veškeré procedury a funkce (kromě TextMode a Window) se nyní budou vztahovat pouze na toto okno. Souřadnice se budou brát relativně vzhledem k levému hornímu rohu našeho okna.

Pozn. k funkci ReadKey : Pokud byla stisknuta tzv funkční klávesa (šipka, editační klávesa, ESC, F1..F12), generuje DOS nejprve znak s kódem 0 a teprve poté významový kód (sami zjistěte jaký pro kterou klávesu). V těchto případech je nutné použít ReadKey dvakrát za sebou.
Další speciální klávesy žádný kód negenerují (např - Ctrl, Alt, Shift, Caps Lock, Scroll Lock, Num Lock, Print Screen, Pause, Break, ...)

To by bylo k jednotce Crt vše. Najděte si v Sysmanovi přerušení 10h, zjistěte významové kódy funkčních kláves, napište program, kde využijete všech získaných poznatků. (Ale hlavně, přesvědčte se, že vaše jednotka Crt funguje na vašem počítači a popř. stáhněte jinou - připomínám, že některé kompilátory mají příkazy jednotku Crt zahrnuty již v jednotce System - u takovýchto kompilátorů se problém s jednotkou Crt nevyskytuje).

Jednotka Graph

Tato jednotka umožňuje pracovat s grafikou, typy písma, bitově orientovanými obrazy, .. Pro praktické použití je však příliš pomalá. Rychlá grafika se dělá v assembleru (nejrychlejší je přímé programování grafické karty, či využití standardních dodávaných ovladačů...). Grafická obrazovka a ovládání grafiky tvoří v Pascalu rozsáhlý systém. Sama jednotka Graph požaduje pro svou funkci množství dalších souborů (grafické ovladače, soubory fontů,...).

Grafika Pascalu je rastrová, souřadnice odpovídají jednotlivým pixelům. Připomínám, že orientace osy y je shora dolů.

Jednotka Graph definuje nejen své vlastní procedury, funkce a konstanty, využívá dokonce i vlastních typů.

Soubory nutné pro správnou funkci programové jednotky Graph

Soubory potřebné pro jednotku Graph jsou uloženy v adresáři BGI. Nejdůležitější jsou drivery (ovladače grafických adaptérů) - ty mají příponu BGI. Další důležitou součástí jsou pak fonty s příponou CHR

Grafické ovladače (drivery)

Grafické drivery jsou uloženy v adresáři BGI, standardně jsou dodávány tyto soubory :

Ovladač Zařízení podporovaná ovladačem
ATT.BGI AT&T 6300 (400 řádek)
CGA.BGI CGA, MCGA
EGAVGA.BGI EGA, VGA, SVGA (dnes tedy jediný použitelný)
HERC.BGI monochromní Hercules
IMB8514.BGI IMB 8514 (1024x768)
PC3270.BGI terminál 327x
VESA16.BGI VESA (1280x1024)

Pochopitelně existuje možnost tvorby vlastního ovladače a jeho využití. EGAVGA.BGI ovšem dokáže pracovat se všemi moderními grafickými kartami, tvorba vlastního driveru je tedy zbytečná (jestliže chceme grafiku urychlit, je lepší napsat si vlastní funkce v assembleru...).

Fonty

Standardně jsou dodávány tyto fonty :

Název souboru Typ fontu
TRIP.CHR patkový
SMALL.CHR zmenšený
SANS.CHR bezpatkový
GOTH.CHR švabach
SCRI.CHR psací
SIMP.CHR Simplex
TSCR.CHR patkový psací
LCOM.CHR Complex
EURO.CHR europský
BOLD.CHR tučný

Pochopitelně je možné sadu fontů rozšířit nahráním dalších či tvorbou vlastních souborů.

Typy proměnných definované v jednotce Graph

Typy proměnných definované v jednotce Graph jsou většinou úzce specifické, vyskytují se pouze u některých funkcí. Zde je uvedena jen jejich definice, konkrétní použiti bude ilustrována až u příslušných funkcí.

  1. ArcCoordsType = record {Jako návratová hodnota funkce GetArcCoords
                obsahuje parametry posledně kresleného oblouku či poslední elipsy}
             X,Y:Integer; {Souřadnice středu}
             XStart,YStar:Integer; {Počáteční bod oblouku}
             XEnd,YEnd:Integer;    {Koncový bod oblouku}
            end;
  2. FillPatternType = array[1..8] of Byte; {Styl výplně (bitově popisuje čtverec 8x8)}
  3. FillSettingsType = record {Typ nastavené výplně}
                Pattern:Word;{Typ výplně (viz konstanty typu výplně)}
                Color:Word; {Barva výplně}
               end; 
  4. LineSettingsType = record {Typ vykreslovaných čar}
                LineStyle : Word; {Typ kreslené čáry - viz konstanty typu čáry}
                Pattern   : Word; {Vzor - viz konstanty }
                Thickness : Word; {Tloušťka čáry - v Pixelech viz konstanty šířky čáry}
               end;
  5. PaletteType = record
            Size : Byte; {Skutečný počet barev v paletě}
            Colors : array[0..MaxColor] of Shortint; {Konstanta MaxColor=15,
                    pole obsahuje skutečné informace o barvách 0..Size}
              end;
  6. PointType = record
            X,Y:integer;   {X-ová a Y-ová souřadnice bodu}
            end;
  7. TextSettingsType = record
                Font : Word;    {Nastavený font - konstanty fontu}
                Direction : Word;{Směr textu - konstanty směru textu}
                CharSize : Word; {Velikost písmen - konstanty velikosti fontu}
                Horiz : Word;{Horizontální zarovnání - konstanty horizontálního zarovnání}
                Vert : Word;{Vertikální zarovnání - konstanty vertikálního zarovnání}
               end;
  8. ViewPortType = record
            X1,Y1,X2,Y2 : Integer; {Souřadnice levého horního a pravého dolního rohu "okna"}
            Clip : Boolean; {Ořezávání - viz konstanty ořezávání
                    Zapne či vypne ořezávání výstupu do aktuálního ViewPortu}
               end;

Podívejme se blíže na význam LineSettingType. Je-li LineStyle=12, tak Pattern určuje uživatelský typ kreslení čáry. (Bráno bitově : 17 = 00010001; a odzadu - znamená, že první bod je vyplněn, druhý, třetí a čtvrtý ne, pátý jo a zbytek je prázdný).

Podobný význam má FillPatternType : To určuje vyplnění obdélníku 8x8 bitů. Index 1 označuje horní řádku a index 8 řádku dole. Jednotlivé řádky se pak berou stejně jako u LineSettingType...

Konstanty jednotky Graph

Jednotka Graph obsahuje celé množství konstant (jejichž názvy jsou většinou podobně jako u Crt pouhou mnemotechnickou pomůckou). Použití těchto konstant zvyšuje přehlednost programu. Pro snaží orientaci rozdělíme konstanty do několika kategorií:

Konstanty chybových hlášení

Ne každá operace se povede. Stav výsledku lze získat pomocí GraphResult. Nastala-li chyba, můžeme zjisti jaká (anglický název získáme pomocí funkce GraphErrorMsg(CisloChyby).

Kód (Číselná hodnota) Český popis Anglický popis Název konstanty
0 bez chyby No error grOK
-1 grafika není instalována (BGI) Graphics not installed grNoInitGraph
-2 není k dispozici grafická karta Graphics hardware not detected grNotDetected
-3 ovladač nenalezen Device driver not found grFileNotFound
-4 chyba v souboru ovladače Invalid device driver file grInvalidDriver
-5 nedostatek paměti pro nahrání ovladače Not enough memory to load driver grNoLoadMem
-6 není paměť pro hledání ploch k vyplnění Not enough memory to scan fill grNoScanMem
-7 nedostatek paměti pro vyplnění Not enough memory to flood fill grNoFloodMem
-8 font nenalezen Font file not found grFontNotFound
-9 nedostatek paměti pro nahrání fontu Not enough memory to load font grNoFontMem
-10 špatný grafický režim pro daný driver Invalid graphics mode for selected driver grInvalidMode
-11 neurčená chyba Graphics error grError
-12 I/O chyba Graphics I/O error grIOError
-13 špatná hlavička fontu The font header is not recognized grInvalidFont
-14 špatné číslo fontu v hlavičce fontu The font number in the font header is not recognized grInvalidFontNum

Konstanty barev

Vše je stejné jako u Crt, opakování neškodí (pro EGA se konstanty trochu liší viz níže):

Barvy tmavé (lze použít i na pozadí)
Název (anglicky) Hodnota Český překlad
Black 0 Černá
Blue 1 Modrá
Green 2 Zelená
Cyan 3 Světle modrá
Red 4 Červená
Magenta 5 Fialová
Brown 6 Hnědá
LightGray 7 Světle šedá
Barvy světlé (normálně pouze na popředí - ale lze změnit viz níže)
Název (anglicky) Hodnota Český překlad
DarkGray 8 Tmavě šedá
LightBlue 9 Jasná modrá
LightGreen 10 Jasná zelená
LightCyan 11 Jasná světlá modrá
LightRed 12 Světlá červená
LightMagenta 13 Světle fialová
Yellow 14 Zářivá žlutá
White 15 Jasná bílá

Pochopitelně Blink způsobí blikání textu. (Efekt jde vypnout (jak jsme si ukázali již v Crt). Poté můžeme i v pozadí mít všech šestnáct barev.). Možnost blikání textu odstraníme (či zase zapneme) takto :

asm        {Vypne možnost blikání a umožní tak světlé barvy i na pozadí}

 mov AH,10h
 mov AL,3h
 mov BL,0h
 int 10h
end;

asm        {Zapne možnost blikání}

 mov AH,10h
 mov AL,3h
 mov BL,1h
 int 10h
end;

Konstanty barev pro adaptéry EGA (8514)

Kódy barev jsou prakticky shodné s normálními, jen mají příponu EGA (ovšem EGABrown=20) a světlé barvy začínají až od 56.

Tmavé barvy
Název (anglicky) Hodnota Český překlad
EGABlack 0 Černá
EGABlue 1 Modrá
EGAGreen 2 Zelená
EGACyan 3 Světle modrá
EGARed 4 Červená
EGAMagenta 5 Fialová
EGABrown 20 Hnědá
EGALightGray 7 Světle šedá
Světlé barvy
Název (anglicky) Hodnota Český překlad
EGADarkGray 56 Tmavě šedá
EGALightBlue 57 Jasná modrá
EGALightGreen 58 Jasná zelená
EGALightCyan 59 Jasná světlá modrá
EGALightRed 60 Světlá červená
EGALightMagenta 61 Světle fialová
EGAYellow 62 Zářivá žlutá
EGAWhite 63 Jasná bílá

Konstanty grafických driverů

Tyto konstanty slouží k rozlišení jednotlivých grafických driverů (a tím tedy i k rozlišení instalovaných grafických karet).

Název konstanty Hodnota Poznámka
CurrentDriver -128 slouží pouze při volání funkce GetModeRange a DetectGraph, jedná se o právě aktivní Driver
Detect 0 Slouží k autodetekci (kde je to možné)
CGA 1
MCGA 2
EGA 3
EGA64 4
EGAMono 5
IMB8514 6
HercMono 7
ATT400 8
VGA 9 Spolu s 0 jediná dnes použitelná hodnota
PC3270 10

Konstanty grafických módů

Každý adaptér má různé módy (různé rozlišení, různé palety,..). K jejich rozlišení slouží následující konstanty :

Název Hodnota Karta (adaptér) Rozlišení Počet barev Paleta Počet stránek
CGAC0 0 CGA 320x200 0 1
CGAC1 1 CGA 320x200 1 1
CGAC2 2 CGA 320x200 2 1
CGAC3 3 CGA 320x200 3 1
CGAHi 4 CGA 640x200 1
MCGAC0 0 MCGA 320x200 0 1
MCGAC1 1 MCGA 320x200 1 1
MCGAC2 2 MCGA 320x200 2 1
MCGAC3 3 MCGA 320x200 3 1
MCGAMed 4 MCGA 640x200 1
MCGAHi 5 MCGA 640x480 2 1
EGALo 0 EGA 640x200 16 4
EGAHi 1 EGA 640x350 16 2
EGA64Lo 0 EGA64 640x200 16 1
EGA64Hi 1 EGA64 640x350 4 1
EGAMonoHi 3 EGA 640x350 1 nebo 2
HercMonoHi 0 Hercules 720x348 2
ATT400C0 0 AT&T 6300 320x200 0 1
ATT400C1 1 AT&T 6300 320x200 1 1
ATT400C2 2 AT&T 6300 320x200 2 1
ATT400C3 3 AT&T 6300 320x200 3 1
ATT400Med 4 AT&T 6300 640x200 1
ATT400Hi 5 AT&T 6300 640x400 1
VGALo 0 VGA 640x200 16 4
VGAMed 1 VGA 640x350 16 2
VGAHi 2 VGA 640x480 16 1
PC3270Hi 0 PC3270 720x350 1
IBM8514Lo 0 IMB8514 640x480 256
IMB8514Hi 1 IMB8514 1024x768 256

Zapamatujte si u čísla pouze pro VGA. Za povšimnutí stojí také fakt, že každý driver podporuje mód 0. Co se palet týče, mají jednotlivá čísla tento význam :

Číslo palety 1.složka 2.složka 3.složka
0 LightGreen LightRed Yellow
1 LightCyan LightMagenta White
2 Green Red Brown
3 Cyan Magenta LightGray

Konstanty pro Bar3D

Název Hodnota Význam
TopOn True Kreslí se vrchní hrany (objekt je navrchu)
TopOff False Horní hrany se nekreslí (na objektu je něco dalšího)

Podívejte se blíže na Bar3D.

Konstanty typu umisťování grafiky

Název Hodnota Význam
NormalPut 0 normální umístění vykreslovaných objektů
CopyPut 0 normální umístění vykreslovaných objektů
XORPut 1 je-li na pozici pixel, smaže ho, jinak nakreslí umisťovaný pixel (Vysledek = Puv XOR Novy)
ORPut 2 vykreslení jen tam, kde je jeden nebo druhý (tzv. přečmárávání, vše zůstává na obrazovce)
ANDPut 3 kreslí jen tam, kde již něco je
NOTPut 4 Udělá negativ

Konstanty ořezávání

Název Hodnota Význam
ClipOn True Zapne ořezávání (veškerý grafický výstup je omezen do aktuálního viewportu)
ClipOff False Vypne ořezávání

Více informací naleznete u ViewPort.

Konstanty typu výplně

Kreslíme-li nějaký uzavřený objekt (např. pomocí Bar), jeho vnitřek je vyplněn tímto grafickým vzorem. Vyzkoušejte si sami, jak který vzor přesně vypadá.

Název Hodnota Význam
EmptyFill 0 Nechá vnitřek prázdný (barva pozadí)
SolidFill 1 Vyplní celý vnitřek danou barvou
LineFill 2 Vyplní vnitřek vodorovnými linkami (---)
LtSlashFill 3 Vyplní vnitřek šrafováním (///)
SlashFill 4 Vyplní vnitřek tlustým šrafováním (///)
BkSlashFill 5 Vyplní vnitřek tlustým šrafováním (\\\)
LtBkSlashFill 6 Vyplní vnitřek šrafováním (\\\)
HatchFill 7 Vyplní vnitřek čtverečky (vertikální a horiz. linky)
XHatchFill 8 Vyplní vnitřek šrafováním (xxx)
InterLeaveFill 9 Vyplní celý vnitřek, občas nechá díru
WideDotFill 10 Vyplní vnitřek vzdálenými tečkami
CloseDotFill 11 Vyplní vnitřek blízko u sebe ležícími tečkami
UserFill 12 Vyplní vnitřek uživatelem definovanou výplní

Konstanty zarovnání

Vertikální zarovnání
Název Hodnota Význam
BottomText 0 Text se začne vypisovat dole
CenterText 1 Text se začne vypisovat uprostřed
TopText 2 Text se začne vypisovat nahoře
Horizontální zarovnání
Název Hodnota Význam
LeftText 0 Zarovnání doleva
CenterText 1 Zarovnání na střed
RightText 2 Zarovnání doprava

Konstanty stylu kreslení čar

Styl čáry
Název Hodnota Význam
SolidLn 0 Nepřerušovaná čára
DottedLn 1 Tečkovaná čára
CenterLn 2 Krátká čárka, dlouhá čárka, krátká čárka, ...
DashedLn 3 Čárkovaná čára
UserBitLn 4 Uživatelsky definovaný čára
Šířka čáry
Název Hodnota Význam
NormWidth 1 Normální tloušťka čáry
ThickWidth 3 Tlustá čára

Konstanty fontů

Konstanty znakových sad
Název Hodnota Význam
DefaultFont 0 Standardně nastavený font
TriplexFont 1 patkové písmo
SmallFont 2 velmi malé písmo
SansSerifFont 3 bezpatkové písmo
GothicFont 4 "gotické" písmo
Konstanty směru písma
Název Hodnota Význam
HorizDir 0 Text se píše zleva doprava
VertDir 1 Text se píše zdola nahoru
Konstanty velikosti písma
Název Hodnota Význam
UserCharSize 0 Uživatelem definovaná velikost písma

Procedury a funkce jednotky Graph

Počet funkcí a procedur jednotky Graph je obrovský, pro přehlednost tedy příkazy této jednotky dělíme do tří hlavních kategorií: Příkazy výkonné (to jsou ty, které něco dělají a řídí se přitom aktuálním nastavením), dále příkazy zjišťovací (ty zjišťují aktuální nastavení) a příkazy nastavovací (ty aktuální nastavení mění).

Funkce a procedury výkonné

Tato kategorie přímo kreslí grafické objekty.

Funkce a procedury výkonné (jednotka Graph)
Pořadí Příkaz Význam
1 Arc(X,Y:integer,StAngel,EndAngle,Radius:Word); Nakreslí oblouk kružnice se středem v [X,Y] s poloměrem Radius, Začne na StAngle(ve stupních) a skončí ve EndAngle (ve stupních) - úhly zadáváme proti směru otáčení hodinových ručiček
2 Bar(X1,Y1,X2,Y2); Nakreslí a vyplní pravoúhelník (obdélník či čtverec). X1,Y1 jsou souřadnice levého horního rohu a X2,Y2 pak souřadnice pravého dolního rohu
3 Bar3D(X1,Y1,X2,Y2:Integer; Depth:Word; Top:Boolean); Nakreslí kvádr (X1,Y1 souřadnice levého horního rohu, X2,Y2 souřadnice pravého dolního rohu, Depth - hloubka kvádru, Top - Má se kreslit i horní strana? - viz konstanty pro Bar3D
4 Circle(X,Y:Integer; Radius:Word); Nakreslí kružnici se středem v X,Y a poloměrem Radius
5 DrawPoly(Number:Word; var Points); Nakreslí mnohoúhelník (spojí body čarou), Number udává počet bodů. Points je array[1..Number] of PointType
6 Ellipse(X,Y:Integer; StAngle,EndAngle:word; XRadius,YRadius:word); Nakreslí eliptický oblouk. X,Y jsou souřadnice středu elipsy, StAngle a EndAngle označují počáteční a koncový úhel (viz Arc), XRadius a YRadius délku poloos ve směru osy X a Y.
7 FillPoly(Number:Word; var Points); Nakreslí uzavřený mnohoúhelník a vyplní ho
8 FillEllipse(X,Y:Integer; XRadius,YRadius:Word); Nakreslí vyplněnou elipsu (X,Y souřadnice středu, XRadius, YRadius délky poloos)
9 FloodFill(X,Y:Integer; Border:Word); Vyplní oblast, ve které leží body X,Y a jejíž hranice jsou dány barvou Border
10 GetImage(X1,Y1,X2,Y2; var BitMap); Uloží do BitMapy obrázek (obdélník co se nachází v s rohy v X1,Y1 a X2,Y2, první dva bity udávají šířku a druhé dva výšku obrázku. pak následuje samotná bitmapa)
11 PutImage(X,Y:Integer; var BitMap;var BitBlt); Vrazí obrázek z BitMapy na souřadnice X,Y stylem BitBlt
12 Line(X1,Y1,X2,Y2:Integer); Nakreslí čáru z X1,Y1 do X2,Y2 (Použije přitom nastavený styl kreslení čar a nastavenou barvu kreslení)
13 LineRel(DX,DY:Integer); Nakreslí čáru od aktuální pozice kurzoru (konec je posunut od začátku o DX a DY)
14 LineTo(X,Y:Integer); Nakreslí čáru od aktuální pozice kurzoru na X,Y
15 MoveRel(DX,DY:Integer); Posune kurzor o DX,DY
16 MoveTo(X,Y:Integer); Přesune kurzor na X,Y
17 OutText(Text:string); Od místa kurzoru vypíše text (nastaveným aktuálním fontem, šířkou ...) - klasické writeln je v grafickém režimu bez účinku
18 OutTextXY(X,Y:Integer; Text:string); Na místě X,Y vypíše text (s vlastnostmi dle aktuálního nastavení)
19 PieSlice(X,Y:Integer; StAngle,EndAngle,Radius:Word); Nakreslí vyplněnou kruhovou výseč (X,Y kruhu; StAngle,EndAngle - počáteční a koncový úhel (ve stupních proti směru hodinových ručiček, Radius - poloměr kruhu).
20 Sector(X,Y:Integer; StAngle,EndAngle,XRadius,YRadius:Word); Nakreslí vyplněnou eliptickou výseč (X,Y střed elipsy, StAngle, EndAngle - počáteční a koncový úhel - ve stupních bráno proti směru hodinových ručiček, XRadiux,YRadius - délky poloos - v pixelech)
21 PutPixel(X,Y:Integer, Pixel:Word); Umístí na pozici X,Y pixel o barvě Pixel
22 RecTangle(X1,Y1,X2,Y2:Integer); Nakreslí nevyplněný čtyřúhelník (X1,Y1 - levý horní roh, X2,Y2 pravý dolní roh)

Funkce a procedury zjišťovací

Tyto funkce a procedury slouží k zjišťování aktuálního nastavení grafického prostředí. Většina jejich názvů začíná slovíčkem Get (Zjisti).

Funkce a procedury zjišťovací (jednotka Graph)
Pořadí Příkaz Význam
1 DetectGraph(var GraphicDriver,GraphMode:integer); Zjistí aktuální grafický driver a mód. (Viz konstanty grafických driverů a konstanty grafických módů)
2 GetDriverName:string; Vrátí název souboru nahraného driveru (nejčastěji teda EGAVGA.BGI) (Viz soubory driverů)
3 GetGraphMode : integer; Vrátí aktuální grafický režim (viz konstanty grafických režimů)
4 GetMaxMode : word; Vrátí nejvyšší možný grafický mód současného driveru (Viz konstanty grafických módů)
5 GetModeName(ModeNumber:word) : string; Převede číslo módu ModeNumber na řetězec, který mód popisuje (...P4 např. znamená čtyři stránky - vyzkoušejte si použití této procedury)
6 GetModeRange(GrDriver:integer;var LoMode,HiMode:integer); Zobrazí rozsah graf. módů daného driveru (viz konstanty grafických driverů a konstanty grafických módů.) LoMode zobrazuje nejnižší možné číslo a HiMode naopak číslo nejvyšší možné.) Tato procedura spolehlivě funguje pouze u Borlandských driverů.
7 GraphErrorMsg(ErrorCode:integer):string; Převede kód grafické chyby na její popis v angličtině. Viz konstanty chybových hlášení.
8 GraphResult : integer; Vrátí výsledek naposledy vykonané operace (záporné číslo znamená chybu viz konstanty chybových hlášení)
9 GetAspectRatio(var Xasp,Yasp:word); Zjistí poměr rozměrů pixelu
10 GetMaxX : integer; Zjistí maximální hodnotu X, při které je bod ještě na obrazovce (0 je také na obrazovce)
11 GetMaxY : integer; Zjistí maximální hodnotu Y, při které je bod ještě na obrazovce (0 je také na obrazovce) Celkové rozlišení obrazovky v daném režimu je tedy
(GetMaxX+1) x (GetMaxY+1)
12 GetBkColor : word; Vrátí aktuální barvu pozadí
13 GetColor : word; Vrátí aktuální barvu kreslení
14 GetMaxColor : word; Vrátí číslo maximální použitelné barvy (tedy číslo 15), u černobílých monitorů 1...
15 GetPalette(var Palette : PaletteType); Vrátí aktuální paletu (přiřazení skutečných barev těm stupidním patnácti hodnotám)
16 GetPaletteSize : word; Vrátí počet barev v aktuální paletě
17 GetDefaultPalette(var Palette: PaletteType); Vrátí přednastavenou paletu (tedy tu, co je tam hned po InitGraph)
18 GetFillPattern(var FillPattern:FillPatternType); Vrátí aktuální uživatelský výplňový vzor (viz FillPatternType)
19 GetFillSettings(var FillInfo:FillSettingsType); Vrátí informace o stylu vyplňování (viz FillSettingsType)
20 GetArcCoords(var ArcCoords: ArcCoordsType); Vrátí informace o posledně kresleném oblouku (viz ArcCoordsType)
21 GetLineSettings(var LineInfo : LineSettingsType); Vrátí informace o nastaveném stylu kreslení čar (viz LineSettingsType)
22 GetTextSettings(var TextInfo : TextSettingsType); Vrátí informace o nastavení vypisování textu (viz TextSettingType)
23 TextHeight(Text:string):word; Vrátí výšku zadaného textu v pixelech. (Výška se vztahuje k použitému nastavení textu)
24 TextWidth(Text:string):word; Vrátí šířku zadaného textu v pixelech (Šířka se vztahuje k aktuálnímu nastavení textu)
25 GetViewSettings(var ViewPort:ViewPortType); Vrátí informace o aktuálním ViewPortu
26 GetPixel(X,Y:Integer) : word; Vrátí barvu pixelu na pozici X,Y
27 GetX : integer; Vrátí X-ovou souřadnici kurzoru
28 GetY : integer; Vrátí Y-ovou souřadnici kurzoru
29 ImageSize(X1,Y1,X2,Y2:Integer) : word; Vrátí velikost, kterou v paměti zabere BitMapa obrázku s rohy v X1,Y1 a X2,Y2. Započítává i informace o šířce a výšce daného obrázku. V případě, že zadaný obraz nejde z nějakého důvodu vytvořit (např. by byl paměťově příliš náročný) vrací nulu.

Funkce a procedury nastavovací

Tyto podprogramy slouží k nastavení vlastností grafiky. Nejdůležitější procedurou je InitGraph, který do paměti nahraje grafický ovladač a umožní tak práci s grafikou (tuto poměrně zdlouhavou činnost lze několika způsoby obejít).

Funkce a procedury nastavovací (jednotka Graph)
Pořadí Příkaz Význam
1 InitGraph(var GraphDriver,GraphMode:integer; Path:string); Nahraje do paměti grafický ovladač ("zapne grafiku"). GraphDriver udává požadovaný ovladač (nejčastěji tedy Detect, GraphMode požadovaný mód, Path je cesta k ovladači).
Nejčastější použití je tedy toto Gd:=Detect; Gm:=Detect; InitGraph(Gd,Gm,'C:\PASCAL\BGI'); (prázdná cesta znamená, že se Driver nachází v adresáři s programem, což je nezbytnost, pokud chceme např. program dále šířit). Viz též grafické drivery, konstanty grafických driverů, konstanty grafických módů)
2 CloseGraph; Ukončí grafický režim a obnoví původní textovou obrazovku (Vždy zavoláme před skončením programu)
3 ClearDevice; Smaže obrazovku (popř. viewport)
4 GraphDefaults; Obnoví původní nastavení (vše bude jako po InitGraphu)
5 SetGraphMode(Mode:Integer); Nastaví grafický mód (viz konstanty grafických módů
6 RestoreCrtMode; Obnoví textový režim obrazovky
7 SetGraphBufSize(BufSize:word); Nastaví velikost grafické paměti (standardně 4Kb), musí se zavolat ovšem již před InitGraphem
8 SetAspectRatio(XAsp,YAsp:Word); Nastaví poměr x-ové a Y-ové strany pixelu na Xasp:Yasp (použijeme např. není-li kružnice kruhová)
9 InstallUserDriver(Name:string,AutoDetectPointer:pointer) :integer; Zavede do paměti nový driver (ze souboru Name), AutoDetectPointer je ukazatel na uživatelskou proceduru, která pro Driver detekuje vhodný grafický mód). Nový driver bude dostupný pod číslem integer...
10 InstallUserFont(Name:string):integer; Zavede nový font ze souboru (a dá mu číslo, které pak budeme používat, budeme-li tento font chtít zpřístupnit)
11 RegisterBGIDriver(driver:pointer):integer; Zapíše nový driver (na který ukazuje pointer) a dá mu číslo (které pak využije např. InitGraph)
12 RegisterBGIFont(font:pointer):integer; Zapíše nový font (na který ukazuje pointer) a dá mu číslo (které pak využijeme např. u SetTextStyle)
13 SetActivePage(Page:word); Nastaví stránku, na které se budou provádět operace (některé grafické karty umožňují v paměti uchovat více stránek a pak přepnout) Používá se především při tvorbě animací
14 SetVisualPage(Page:word); Nastaví aktivní (viditelnou stránku)
15 SetBkColor(Color:Word); Nastaví barvu pozadí (viz Barvy)
16 SetColor(Color:Word); Nastaví barvu kreslení (viz Barvy)
17 SetAllPalette(var Palette); Nastaví Paletu (použijte proměnnou typu PaletteType)
18 SetPalette(ColorNumber:word,Color:shortint); Změní nastavení barvy ColorNumber v aktuální paletě
19 SetRGBPalette(ColorNum,RedValue,GreenValue,BlueValue:Integer); Změní nastavení barvy ColoNum v paletě pomocí RGB (pouze u VGA)
20 SetViewPort(X1,Y1,X2,Y2:Integer, Clip:Boolean); Nastaví grafické okno (ViewPort) do obdélníku (X1,Y1-X2,Y2) - všechny souřadnice budou brány relativně vzhledem k levému hornímu rohu ViewPortu) parametr Clip udává, zde se příliš velké obrázky budou ořezávat, či ne - viz Konstanty ořezávání)
21 ClearViewPort; Zruší nastavený ViewPort
22 SetFillPattern(Pattern:FillPatternType;Color:Word); Nastaví vzor výplně (Viz TypVýplně)
23 SetFillStyle(FillPattern,Color:word); Nastaví styl výplně (viz Konstanty výplně)
24 SetLineStyle(LineStyle,Pattern,Thickness:word); Nastaví styl kreslení čáry (viz konstanty kreslení čar)
25 SetWriteMode(WriteMode:Integer); Nastaví způsob kreslení čar (CopyPut nebo XORPut - viz konstanty vykreslování)
26 SetTextJustify(Horiz,Vert:word); Nastaví způsob zarovnání textu (viz Konstanty Zarovnání)
27 SetTextStyle(Font, Direction, CharSize : word); Nastaví vlastnosti písma (viz Konstanty písma)
28 SetUserCharSize(MultX,DivX,MultY,DivY:word); Nastaví uživatelskou velikost písma (šířku násobí MultX/DivX a výšku MultY/DivY). Pomocí této procedury je možné dosáhnou libovolné velikosti písmen

Všechny konstanty, procedury i funkce si vyzkoušejte. Konstanty používejte pouze na vhodných místech. (Tedy ne SetTextJustify(Blue,Black) ).

Jednotka Graph3

Tato jednotka umožňuje pracovat s "šipkovou" grafikou verze 3.0.

V praxi se používá takto : objevíme-li na začátku starého programu řádku {$I GRAPH.P}, tak ji smažeme a do uses připíšeme Graph3 a Turbo3 a Crt Program by poté měl fungovat.

Konstanty jednotky Graph3

Tyto konstanty definují jednotlivé směry.

Název Hodnota Význam
North 0 Nahoru (Na sever)
East 90 Vlevo (Na východ)
South 180 Dolu (Na západ)
West 270 Doprava (Na sever)

Vzhledem k tomu, že současně s jednotkou Graph3 vždy používáme i jednotku Crt (popř. její novější verzi), nejsou v jednotce Graph3 definovány barevné konstanty. Ty jsou totiž již obsaženy v jednotce Crt. (A kromě toho, kolik EGA zvládala barev?)

Procedury a funkce jednotky Graph3

Přestože jednotka Graph3 není tolik rozsáhlá jako jednotka Graph, i zde je výhodné procedury a funkce rozdělit do několika skupin. Nejzajímavější jsou asi procedury pro práci s šipkami, zbytek je absolutně na nic.

Nastavení

Nastavení Graph3
Pořadí Příkaz Význam
1 GraphColorMode; Nastaví barevný režim s rozlišením 320x200
2 GraphMode; Nastaví černobílý režim s rozlišením 320x200
3 HiRes; Nastaví režim s rozlišením 640x200}

Dnes je technika trochu jinde. I tyto procedury budou tedy dělat něco trochu jiného (např. místo černobílého nastaví barevný režim....))

Barvy

Graph3 zná jen 4 barvy (0-3) a to černou (ta je všude), zelenou, červenou a hnědou (závisí na paletě)

Příkazy pro práci s barvami (Graph3)
Pořadí Příkaz Význam
1 ColorTable(A,B,C,D:Integer); Nastaví, novou barevnou tabulku (barva 0 se změní na A, barva 1 na B,...), změna se aplikuje při překreslovaní daného bodu obrazovky (např. pomocí Plot(X,Y,-1);)
2 GraphBackground(BkColor:Integer); Nastaví barvu pozadí (pro celou obrazovku!)
3 HiResColor(Color:Integer); Nastaví barvu kreslení v módu HiRes (popř. barvu pozadí)
4 Palette(Num:Integer); Vybere paletu (tedy ty tři zbývající barvy, 0 je aktuální barva pozadí)

Jednotlivé palety vypadají takto:

Číslo palety Barva 1 Barva 2 Barva 3
0 Zelená Červená Hnědá
1 Světle modrá Světle fialová Bílá
2 Světle zelená Světle červená Žlutá
3 Světle modrá Fialová Světle šedá

Při volbě vyšších čísel se bude pravidelně střídat paleta 2 a paleta 3.

Kreslení

Příkazy pro kreslení (Graph3)
Pořadí Příkaz Význam
1 Arc(X,Y:Integer; Angle, Radius:Word); Nakreslí oblouk (s počátečním bodem X,Y - nejde o střed ale o začátek oblouku!!!) o velikosti Angle stupňů (po směru hodinových ručiček) a poloměrem Radius.
2 Circle(X,Y:Integer; Radius:Word); Nakreslí kružnici se středem X,Y a poloměrem Radius
3 Draw(X1,Y1,X2,Y2:Integer; Color:Word); Nakreslí čáru z X1,Y1 do X2,Y2 a použije přitom barvu Color

Vyplňování

Funkce pro vyplňování (Graph3)
Pořadí Příkaz Význam
1 FillPattern(X1,Y1,X2,Y2,Color:Integer); Vyplní obdélník X1,Y1,X2,Y2 barvou Color (použije přitom nastavený výplňový vzor)
2 FillScreen(Color:Integer); Vyplní celou obrazovku barvou Color (pro čísla vyšší 3 uživatelsky definovaným vzorem), je-li Color=-1 použije aktuální barevnou mapu (což znamená, že např. po ColorTable(3,2,1,0) FillScreen(-1) invertuje všechny barvy na obrazovce), po ColorTable(0,2,2,2) změní vše, co nemá barvu pozadí na barvu 2...)
3 FillShape(X,Y;Color,Border:Word); Vyplní daný objekt (bod X,Y je libovolný uvnitř, Border je barva hranice, a Color je barva výplně)
4 Pattern(var p); Nastaví styl vyplňování, p je proměnná typu array[0..7] of Byte; (efekt je stejný jako v jednotce Graph - viz výplňový vzor)

Šipky

Tyto procedury umožňují pracovat s tzv. želví (šipkovou) grafikou;

Příkazy pro práci se šipkami (Graph3)
Pořadí Příkaz Význam
1 ShowTurtle; Zobrazí želvu (šipku)
2 HideTurtle; Schová želvu
3 TurnLeft(Angle:Word); Otočí želvu o Angle stupňů doleva
4 TurnRight(Angle:Word); Otočí želvu o Angle stupňů doprava
5 SetHeading(Direction:Integer); Otočí želvu do požadovaného směru (ve stupních, nahoře je 0 - viz konstanty Graph3).
6 Heading:Integer; Vrátí aktuální směr natočení hlavičky želvy.
7 Forwd(Dist:Word); Posune želvu o Dist políček dopředu;
8 Back(Dist:Word); Posune želvu o Dist políček dozadu;
9 Home; Vrátí želvu na výchozí bod (doprostřed obrazovky)
10 ClearScreen; Smaže celou obrazovku a vrátí želvu na výchozí bod (doprostřed obrazovky či jejího okénka definovaného pomocí TurtleWindow)
11 Wrap; Zapne přejíždění (vyjede-li želva z obrazovky, objeví se na druhé straně)
12 NoWrap; Vypne projíždění (vyjede-li želva z obrazovky, bude pryč)
13 PenDown; Spustí pero (želva za sebou při pohybu zanechává čáru)
14 PenUp; Zvedne pero (želva je čistotná, nenechává po sobě bordel)
15 SetPenColor(Color:Word); nastaví barvu pera (tedy té čáry, kterou bude želva po sobě zanechávat)
16 SetPosition(X,Y:Integer); Přesune želvu na X,Y (relativně vzhledem k domečku)
17 TurtleDelay(ms:Word); Nastaví prodlevu mezi jednotlivými kroky želvy (v milisekundách)
18 TurtleWindow(X1,Y1,X2,Y2:Integer); Nastaví obdélník X1,Y1-X2,Y2 jako oblast pohybu želvy
19 TurtleThere:Boolean; Je na "želva" vidět na obrazovce?
20 XCor:Integer; X-ová souřadnice želvy (vzhledem k domečku, tedy středu "životního prostoru" želvy)
21 YCor:Integer; Y-ová souřadnice želvy (vzhledem k domečku)

Ostatní

Další příkazy (Graph3)
Pořadí Příkaz Význam
1 Plot(X,Y:Integer;Pixel:Integer); Umístí na souřadnice X,Y bod o barvě Pixel, je-li Pixel=-1 změní barvu bodu podle barevné mapy
2 GetDotColor(X,Y):Word; Zjistí barvu pixelu na souřadnicích X,Y
3 GraphWindow(X1,Y1,X2,Y2); Nastaví obdélník X1,Y1,X2,Y2 jako plochu vykreslování
4 GetPic(var P;X1,Y1,X2,Y2:Integer); Uloží obdélník X1,Y1-X2,Y2 do proměnné P, velikost proměnné P musí být alespoň ((Width+3) div 4)*Height*2+6 (pro módy 320x200) a ((Width+7) div 8)*Height +6 (pro mód 640x200)
5 PutPic(var P;X1,Y1:Integer); Umístí obrázek z proměnné P na obrazovku (X1,Y1 jsou souřadnice levého dolního rohu obrázku). Obrázek je vykreslen podle aktuální barevné mapy

DCV: Chcete-li tedy pracovat s Pascalskou grafikou, máte již všechny potřebné informace. Zkuste si napsat program, kde využijete všechny možné výplňové vzory (i ty, které si sami nadefinujete, aby vám bylo jasné, jak to s nimi vlastně je - vymyslete si vlastní vzor a pokuste se ho zadat.) A pak pro každou zde uvedenou jednotku napište program, který využije všech uvedených funkcí. Není-li vám něco jasné, najděte si uvedené funkce v Helpu (popis funkcí jednotky Graph3 je k dispozici např. na http://oldcomputers.dyndns.org/public/pub/rechner/epson/~fjkraan/comp/tp30/doc/ v kapitole 19 (soubor tp3_17-20.pdf)