9.3. Příkaz EXHIBIT Formát: EXHIBIT [CHANGED] [NAMED] [TALLYING] - - - - | | STDOUT | | - - | | SYSLST | | | položka [STANDARD] | | | SYSOUT | | | spec.index [STANDARD] | | | PRINTER | | < literál > ...| [UPON < STDERR > | | figur.konstanta | | | CONSOLE | | - - | | SYSLOG | | | | spec.jméno | | - - - - Funkce: Příkaz EXHIBIT provádí výstup argumentů v upraveném tvaru, určeném především pro ladění. Argumenty uvedené v příkazu se upraví podle stejných pravidel jako u příkazu DISPLAY a přesunou se do určité výstupní oblasti, přičemž se za každý upravený argument (kromě posledního) vloží mezera. Výstupní oblast se pak zapíše do standardního výstupního souboru stdout nebo stderr určeného podle stejných pravidel jako u příkazu DISPLAY (při neuvedení klauzule UPON tedy do souboru stdout). Zápis výstupní oblasti se provádí podle stejných pravidel jako u příkazu DISPLAY. V celém dalším textu odstavce 9.3. rozumíme pod pojmem "položka" vždy společně položku a speciální index. Není-li uvedena klauzule CHANGED ani NAMED, neprovádějí se žádné další úpravy a všechny zadané hodnoty se vždy tisknou. Příklad: 77 A PIC S99PPPPV COMP-3 VALUE -680000. 77 B COMP-2 VALUE -1234.5678E-7. : EXHIBIT QUOTES A 'SOUCET' B 835 ZERO A Příkaz EXHIBIT zapíše na standardní výstup stdout řádek ' 6H SOUCET -.123456780000000000E-03 835 0 6H Klauzule NAMED Je-li uvedena klauzule NAMED, vloží se u každé položky před její upravenou hodnotu ve výstupní oblasti ještě jméno položky (včetně případné kvalifikace a indexů), mezera, rovnítko (=) a mezera. U literálů a figurativních konstant se (kromě mezery za nimi) nic nepřidává. Příklad: Při "A OF B IN C" se přidává "A OF B IN C = ". Při "ALFA(I, 5)" se přidává "ALFA(I 5) = ". Příklad: 77 JMENO PIC X(3) VALUE 'VLK'. 77 MZDA PIC S9(4) COMP-3 VALUE 1846. : EXHIBIT NAMED 'ZAVER:' JMENO ',' MZDA 'KCS' Příkaz EXHIBIT vytiskne na standardním výstupu řádek ZAVER: JMENO = VLK , MZDA = 1846 KCS Klauzule CHANGED Je-li uvedena klauzule CHANGED, tisknou se jen ty upravené hodnoty položek, jejichž obsah je jiný než při posledním provádění tohoto příkazu EXHIBIT. Je-li obsah položky stejný jako posledně, bude úsek výstupní oblasti přidělený položce vymezerován. (Je tedy možné vytvořit pevný formát sloupců na výstupu.) Platí přitom následující pravidla: a) Jsou-li obsahy všech uvedených položek stejné jako posledně, řádek se na výstup vůbec nezapisuje (nezapisuje se ani nějaký "prázdný řádek", takže se papír v tiskárně neposune). b) Literály a figurativní konstanty se tisknou vždy, pokud se ovšem řádek vůbec tiskne (tj. pokud se změnil obsah alespoň jedné uvedené položky). c) Pokud se mezi dvěma provedeními určitého příkazu EXHIBIT některá položka změní několikrát, avšak její obsah na začátku provádění dotyčného příkazu EXHIBIT se rovná minulému obsahu, pracuje se s ní tak, jako kdyby se nezměnila vůbec (a nevypisuje se). d) Při prvním provádění určitého příkazu EXHIBIT se předpokládá změna všech položek (a tedy se všechny tisknou). e) Při provádění příkazu EXHIBIT CHANGED NAMED se u položky, která má stejný obsah jako posledně, netiskne nejen upravená hodnota, nýbrž vymezeruje se též úsek výstupní oblasti určený pro "jméno = ". f) Táž položka může být použita v několika příkazech EXHIBIT s klauzulí CHANGED (dokonce i v témže vícekrát), a pro každé takové použití se uchovává její předešlý obsah zvlášť. Srovnávání se pak provádí vzhledem k obsahu, který byl uschován při posledním provádění téhož příkazu EXHIBIT nezávisle na ostatních použitích. g) Výše uvedená pravidla se týkají jen těch položek uvedených v příkazu EXHIBIT s klauzulí CHANGED, za nimiž není uvedeno slovo STANDARD. Zpracování položek, za nimiž je uvedeno slovo STANDARD, se řídí jinými pravidly: - Změna položky se slovem STANDARD nemá vliv na to, zda se bude řádek vůbec tisknout; k tisku řádku tedy dochází právě tehdy, když se změnil obsah alespoň jedné z položek, které slovo STANDARD uvedeno nemají. - Pokud se řádek vůbec tiskne, tisknou se vždy i upravené hodnoty všech položek se slovem STANDARD nezávisle na tom, zda se jejich obsahy změnily nebo ne. Lze tedy říci, že na položky se slovem STANDARD se funkce klauzule CHANGED nevztahuje, a že se tedy tisknou podle stejných pravidel jako literály. h) Každá z uvedených položek musí mít pevnou délku nejvýše 800 bytů, celá výstupní oblast nejvýše 32767 bytů. Příklad: Provádíme v cyklu příkaz EXHIBIT CHANGED NAMED JMENO 'Brno' VYHRA 'KCS' kde položka JMENO má PIC X(5) a položka VYHRA má PIC 9(4), přičemž při jednotlivých prováděních příkazu EXHIBIT jsou tyto obsahy položek JMENO a VYHRA.: 1) JMENO = NOVAK, VYHRA = 2000 2) JMENO = NOVAK, VYHRA = 1500 3) JMENO = POLAK, VYHRA = 3500 4) JMENO = POLAK, VYHRA = 3500 (tj. obojí nezměněno) 5) JMENO = HANAK, VYHRA = 3500 6) JMENO = HANAK, VYHRA = 500 Pak se vytiskne těchto 5 řádků (při čtvrtém provádění příkazu EXHIBIT se nevytiskne nic): JMENO = NOVAK Brno VYHRA = 2000 KCS Brno VYHRA = 1500 KCS JMENO = POLAK Brno VYHRA = 3500 KCS JMENO = HANAK Brno Brno VYHRA = 0500 KCS Příklad: Příkaz EXHIBIT CHANGED NAMED A B STANDARD 'BUM' C STANDARD D způsobí tisk řádku právě tehdy, když se od minulého provádění tohoto příkazu změnila alespoň jedna z položek A nebo D. V tom případě se tisknou hodnoty položek A a D pouze v případě změny, zatímco hodnoty položek B a C a literál 'BUM' se tisknou vždy. Klauzule TALLYING Klauzule TALLYING způsobí, že se na začátek výstupní oblasti umístí pořadové číslo (o délce 7 znaků) ukazující, po kolikáté se tento příkaz EXHIBIT provádí. (Klauzule TALLYING je výhodná zvláště pro příkazy EXHIBIT s klauzulí CHANGED, neboť umožňuje určit, při kolikátém provádění tohoto příkazu EXHIBIT došlo ke změně uvedených položek.)