13.4.2. Klauzule PAGE Formát: PAGE {LIMIT IS | LIMITS ARE} celé-číslo-1 {LINE |LINES} [HEADING celé-číslo-2] [FIRST DETAIL celé-číslo-3] [LAST DETAIL celé-číslo-4] [FOOTING celé-číslo-5] Funkce: Klauzule PAGE definuje formát logické stránky sestavy tj. velikost této stránky a přípustnou polohu jednotlivých typů skupin sestavy na této stránce. Pravidla: 1) Klauzule HEADING, FIRST DETAIL, LAST DETAIL a FOOTING smí být uvedeny v libovolném vzájemném pořadí. 2) Celá čísla uvedená v klauzuli PAGE mají následující význam: a) Celé-číslo-1 udává počet řádků logické stránky sestavy. Tím je míněno následující: Přechod na novou stránku na tiskárně provádí Generátor sestav vždy rychloposuvem dle řídicího příkazu tiskárny "FORM FEED". Ten řádek, na němž se po provedení tohoto rychloposuvu tiskárna zastaví, dostává pořadové číslo 1, následující řádek dostává číslo 2 atd. Generátor sestav tiskne veškeré řádky tiskové sestavy pouze do řádků s pořadovými čísly 1 až celé-číslo-1 na každé stránce; předcházející a následující řádky se nevyužívají. Velikost logické stránky sestavy nemusí být v žádném vztahu s velikostí fyzické stránky papíru určené perforací; uživatel ji může zvolit zcela libovolně. b) Celé-číslo-2 (HEADING) udává nejnižší pořadové číslo řádku, na němž smí být umístěn první řádek skupin REPORT HEADING, PAGE HEADING a REPORT FOOTING. Je-li celé-číslo-2 > 1, budou řádky s pořadovými čísly 1, 2,...,celé-číslo-2 minus jedna vždy nevyužity. Klauzule HEADING bývá používána jen zřídka a její praktický význam je vcelku minimální. c) Celé-číslo-3 (FIRST DETAIL) udává pořadové číslo řádku, na nějž se vytiskne první řádek té skupiny typu CONTROL HEADING, CONTROL FOOTING nebo DETAIL, před jejímž tiskem došlo k přechodu na novou stránku (pokud ovšem pro tuto skupinu nepředepsal uživatel pevnou polohu na stránce pomocí absolutního umístění). d) Celé-číslo-4 (LAST DETAIL) udává nejvyšší pořadové číslo řádku, kde ještě může být vytisknut poslední řádek skupin typu CONTROL HEADING nebo DETAIL. Pokud by taková skupina (s relativním umístěním) měla zasahovat do řádků s vyššími pořadovými čísly, provede Generátor sestav před jejím tiskem přechod na novou stránku. e) Celé-číslo-5 (FOOTING) udává nejvyšší pořadové číslo řádku, kde ještě může být vytisknut poslední řádek skupin typu CONTROL FOOTING. Pokud by taková skupina (s relativním umístěním) měla zasahovat do řádků s vyššími pořadovými čísly, provede Generátor sestav před jejím tiskem přechod na novou stránku. 3) Celá čísla uvedená v klauzuli PAGE smí mít nejvýše 3 cifry a musí splňovat tyto nerovnosti: 1 ó celé-číslo-2 ó celé-číslo-3 ó celé-číslo-4 ó ó celé-číslo-5 ó celé-číslo-1 4) Jestliže některá z klauzulí HEADING, FIRST DETAIL, LAST DETAIL či FOOTING není uvedena, bude příslušné celé-číslo-i doplněno implicitně takto: a) Není-li uvedena klauzule HEADING, předpokládá se celé-číslo-2 = 1. b) Není=li uvedena klauzule FIRST DETAIL, předpokládá se celé-číslo-3 = celé-číslo-2. c) Je-li z klauzulí LAST DETAIL a FOOTING uvedena pouze jedna, předpokládá se celé-číslo-4 = celé-číslo-5. d) Není-li uvedena žádná z klauzulí LAST DETAIL a FOOTING, předpokládá se celé-číslo-4 = celé-číslo-1 celé-číslo-5 = celé-číslo-1. 5) Na základě celých čísel uvedených v klauzuli PAGE jsou pro jednotlivé typy skupin určeny oblasti (tj. pořadová čísla řádků) na logické stránce, v nichž se mohou tyto skupiny vyskytovat. Tomu je třeba rozumět takto: a) Pokud pro určitou skupinu uživatel předepsal pevnou polohu na stránce pomocí absolutního umístění (tj. pomocí klauzule "LINE celé-číslo"), musí zadat toto absolutní umístění tak, aby celá tato skupina ležela v rámci předepsané oblasti. Totéž platí i při umístění pomocí klauzule "LINE NEXT PAGE" a dále vždy u skupin REPORT HEADING, PAGE HEADING a REPORT FOOTING, neboť u nich (logicky vzato) i klauzule "LINE PLUS celé-číslo" znamená absolutní umístění na stránce. b) Pokud pro určitou skupinu typu CONTROL HEADING, DETAIL nebo CONTROL FOOTING uživatel předepsal proměnnou polohu na stránce pomocí relativního umístění (pomocí klauzule "LINE PLUS celé-číslo") vzhledem k předchozí vytisknuté skupině, pak Generátor sestav sám zajistí, aby tato skupina ležela v rámci předepsané oblasti. Pokud by tato skupina měla zasáhnout za tuto oblast, provede Generátor sestav před jejím tiskem přechod na novou stránku. Uživatel musí pouze zabezpečit, aby počet řádků takové skupiny (tj. součet všech celých čísel z druhé až poslední klauzule "LINE PLUS celé-číslo" v popisu skupiny zvětšený o jedničku) sečtený s celým číslem z klauzule "LINE PLUS celé-číslo" pro první řádek skupiny nepřesáhl délku předepsané oblasti. Předepsané oblasti pro jednotlivé typy skupin jsou určeny touto tabulkou: Tabulka 16: Předepsané oblasti pro jednotlivé typy skupin. ------------------------------------------------------------ | |nejnižší pří- |nejvyšší přípustné| | typ skupiny |pustné pořadové |pořadové číslo | | |číslo řádku |řádku | |---------------------|-----------------|------------------| |REPORT HEADING s kl. | celé-číslo-2 | celé-číslo-1 | |NEXT GROUP NEXT PAGE | | | | | | | |REPORT HEADING bez kl| celé-číslo-2 | celé-číslo-3 - 1 | |NEXT GROUP NEXT PAGE | | | | | | | |PAGE HEADING, která | celé-číslo-2 | celé-číslo-3 - 1 | |není na stránce za RH| | | | | | | |PAGE HEADING,která je| celé-číslo-2 | celé-číslo-5 | |na téže stránce za RH| | | | | | | |CONTROL HEADING | celé-číslo-3 | celé-číslo-4 | | | | | |DETAIL | celé-číslo-3 | celé-číslo-4 | | | | | |CONTROL FOOTING | celé-číslo-3 | celé-číslo-5 | | | | | |PAGE FOOTING | celé-číslo-5 + 1| celé-číslo-1 | | | | | |REPORT FOOTING bez | celé-číslo-5 + 1| celé-číslo-1 | |kl. LINE NEXT PAGE | | | | | | | |REPORT FOOTING s kl. | celé-číslo-2 | celé-číslo-1 | |LINE NEXT PAGE | | | | | | | ------------------------------------------------------------ 6) Z tabulky 16 vyplývají následující požadavky: a) Je-li popsána skupina REPORT HEADING bez klauzule NEXT GROUP NEXT PAGE anebo je-li popsána skupina PAGE HEADING, nutně musí být v klauzuli PAGE uvedena podklauzule FIRST DETAIL s celým-číslem-3 větším než je celé-číslo-2 (HEADING). b) Je-li popsána skupina PAGE FOOTING anebo je-li popsána skupina REPORT FOOTING bez klauzule LINE NEXT PAGE, nutně musí být v klauzuli PAGE uvedena podklauzule FOOTING s celým-číslem-5 menším než celé-číslo-1 anebo alespoň podklauzule LAST DETAIL s celým-číslem-4 menším než celé-číslo-1. c) Požadavky uvedené v bodech a) a b) se netýkají těch skupin RH, PH, PF a RF, které nemají v popisu žádnou klauzuli LINE a nezpůsobují tedy žádný tisk ani žádný posuv papíru v tiskárně. 7) Není-li v RD klauzule PAGE vůbec uvedena, nebude Generátor sestav provádět stránkování tiskové sestavy. S výjimkou prvního příkazu GENERATE nikdy nedojde k přechodu na novou stránku, takže celá tisková sestava bude vlastně tvořena jedinou stránkou nekonečné délky. Při neuvedení klauzule PAGE vstupují v platnost tato omezení: a) Nesmí být popsány skupiny PAGE HEADING (záhlaví stránky) a PAGE FOOTING (závěr stránky). b) Pro určení polohy kteréhokoliv řádku smí být použito pouze relativního umístění vzhledem k předcházející vytisknuté resp. nastavené řádce (tj. klauzule LINE a NEXT GROUP smí být uvedeny pouze s volbou "PLUS celé-číslo" a nikoliv s volbou "celé-číslo" ani s volbou "NEXT PAGE"). c) Generátor sestav nevytvoří pro tuto sestavu položky PAGE-COUNTER a LINE-COUNTER. 13.4.3. Klauzule CODE Formát: WITH CODE {'znak' | speciální-jméno} Funkce: V klauzuli CODE lze uvést buďto přímo jednoznakový alfanumerický literál ('znak') anebo speciální jméno přidělené v paragrafu SPECIAL-NAMES k jednoznakovému alfanumerickému literálu. Tomuto znaku budeme říkat identifikační znak. Generátor sestav umístí tento identifikační znak na první byte každé vystupující logické věty včetně těch logických vět, které znamenají pouze posuv papíru bez tisku, a to ještě před řídicí znaky tiskárny (viz 13.3.). Délka logické věty se však uvedením klauzule CODE neovlivní, takže datová oblast logické věty určená k vytisknutí se uvedením klauzule CODE zkrátí o jeden byte. Poznámky: 1) Klauzule CODE nesmí být použita, je-li výstupnímu souboru (viz 13.3.) přiřazena reálná tiskárna, neboť identifikační znak by byl interpretován jakožto řídicí znak tiskárny. 2) Klauzule CODE by měla být použita tehdy, když prostřednictvím téhož výstupního souboru (jemuž je přiřazen disk, disketa nebo magnetická páska) má vystupovat současně více sestav (RD). Pak jsou logické věty všech těchto sestav smíchány na výstupním médiu v tom pořadí, v jakém vystupovaly. Chce-li nyní uživatel vytisknout každou tuto tiskovou sestavu na tiskárně samostatně, může logické věty patřící k téže sestavě rozpoznat na základě rozdílných identifikačních znaků, dodaných pomocí klauzulí CODE uvedených v každé klauzuli RD. Uživatel pak čte "smíchaný" soubor dat několikrát (anebo pouze jednou, má-li k dispozici několik tiskáren) a vždy tiskne pouze logické věty s týmž identifikačním znakem. Uživatel však musí před tiskem každé logické věty z ní tento identifikační znak odstranit, a poslat tedy na tiskárnu pouze druhý až poslední byte každé logické věty (počínaje řídicími znaky tiskárny). 3) Uživatel může ovšem ve svém programu deklarovat několik výstupních souborů a během výpočtu prostřednictvím těchto souborů jakkoliv střídavě zapisovat logické věty různých tiskových sestav (např. vytvářených při čtení téhož vstupního souboru dat). Tisk na reálné tiskárně se pak provede až po ukončení výpočtu, a to tak, že se samostatně vytisknou logické věty zapisované do každého z těchto výstupních souborů. Klauzule CODE má v MX COBOLu v podstatě smysl jen tehdy, chceme-li v jednom souboru uschovat několik promíchaných tiskových sestav např. pro pozdější několikanásobné vytisknutí nebo pro archivaci.