18.3. Obrazovkové formáty příkazu DISPLAY Funkce: Příkazy DISPLAY formátu 5 a 6, které jsou popisovány v tomto odstavci dávají programátorovi větší možnosti pro práci s obrazovkou než příkazy DISPLAY formátu 1 až 4, které jsou popisovány v kapitole 9. Jsou však použitelné jen pod systémem MS DOS. Příkazy popsané v kapitole 9 fungují jak pod systémem MS DOS, tak i pod systémem UNIX. Formát 5: DISPLAY {obrazovková-položka} ... - - - - | | AT [ LINE NUMBER {položka-1|celé-číslo-1} ] | | | | [ {COLUMN|COL} NUMBER {položka-2|celé-číslo-2} ] | | | < > | | | | | | | AT {položka-3 | celé-číslo-3} | | - - - - Formát 6: DISPLAY { {položka-1 | literál-1 | figurativní konstanta} - - - - | | AT [ LINE NUMBER {položka-2 | celé-číslo-1} ] | | | | [ {COLUMN|COL} NUMBER {položka-3|celé-číslo-2} ] | | | < > | | | | | | | AT {položka-4 | celé-číslo-3} | | - - - - [ UPON CRT] [ MODE IS BLOCK ] - - - - | | {BELL | BEEP} | | | | BLINK | | | | GRID | | | | HIGHLIGHT | | | | LEFTLINE | | | | OVERLINE | | | | REVERSE-VIDEO | | |WITH < SIZE IS {položka-5 | celé-číslo-4} >...|}... | | UNDERLINE | | | | {FOREGROUND-COLOR | FOREGROUND-COLOUR} IS | | | | celé-číslo-5 | | | | {BACKGROUND-COLOR | BACKGROUND-COLOUR} IS | | | | celé-číslo-6 | | | | BLANK {SCREEN | LINE} | | - - - - Je-li v příkazu DISPLAY uvedeno více údajů (položek nebo literálů), které se mají postupně zobrazit, budou se tyto údaje zobrazovat tak, jako kdyby byl pro každý z nich zvlášť uveden specielní příkaz DISPLAY, tedy jako kdyby bylo uvedeno několik příkazů DISPLAY za sebou, každý s jedním údajem. Klauzule AT určuje souřadnice místa na obrazovce, od něhož se začne zobrazovat údaj uvedený za slovem DISPLAY. Příkaz DISPLAY A AT LINE 5 COL 10 zobrazí položku A tak, že její první znak bude ležet na 5. řádku v 10. sloupci, druhý znak na 5. řádku v 11. sloupci atd. Bude-li zobrazovaný údaj tak dlouhý, že se nevejde celý na jeden řádek, pokračuje se se zobrazováním na následujícím řádku od 1. sloupce. Čísla řádku a sloupce uvedená v klauzuli AT musí být nezáporná. Jestliže je číslo řádku nebo sloupce zadáváno položkou, musí být tato položka celočíselná. Programátor si může zvolit, zda zadá číslo řádku a sloupce pomocí jediného údaje (jako ve formátu 4 v kapitole 9) nebo odděleně pomocí podklauzulí COL a LINE klauzule AT. Pokud je zadané číslo sloupce větší než délka řádku, je toto číslo sloupce děleno délkou řádku. Zbytek po dělení (zvětšený o 1) se uplatní jako platné číslo sloupce a zadané číslo řádku je zvětšeno o získaný podíl. Pokud je číslo řádku větší než počet řádků na obrazovce, vezme se číslo posledního řádku na obrazovce. Je-li číslo řádku i číslo sloupce nulové, zobrazí se údaj těsně za místem, kde skončil předchozí příkaz DISPLAY formátu 5 nebo 6. Za posledním znakem na řádku následuje 1. znak na řádku s číslem o 1 vyšším. Je-li zadáno číslo řádku nulové a číslo sloupce větší než nula, zobrazí se údaj od zadaného sloupce na řádku následujícím za tím řádkem, na němž skončil předchozí příkaz DISPLAY formátu 5 nebo 6. Nepokračuje se tedy na tom řádku, na němž předchozí DISPLAY skončil, i kdyby nedocházelo k přepsání dříve zobrazených hodnot. Je-li zadáno číslo sloupce nulové a číslo řádku větší než nula, zobrazí se údaj na zadaném řádku od té pozice, kde předcházející DISPLAY skončil. Skončil-li např. předcházející DISPLAY na sloupci 10, bude se zobrazovat od sloupce 11. Není-li v klauzuli AT číslo řádku nebo číslo sloupce vůbec uvedeno, dosadí se za chybějící hodnotu 1. Není-li klauzule AT uvedena vůbec, zobrazí se údaj od 1. sloupce na 1. řádku. Formát 5: Je-li zobrazovaným údajem položka popsaná ve SCREEN SECTION, bude zobrazena tak, jak je popsána, přičemž umístění lze ovlivnit pomocí klauzule AT. Zpravidla se jedná o zobrazení skupiny několika položek, jejichž pozice, barvy atd. jsou dány příslušnými klauzulemi v jejich popisu. Jestliže by při zobrazování některé položky ze skupiny došlo k situaci, že by měla být zapsána mimo obrazovku, bude příkaz DISPLAY předčasně ukončen. Pokud by nějaký další příkaz DISPLAY měl pokračovat ve výpisu tam, kde skončil předčasně ukončený předchozí příkaz DISPLAY, rovněž nebude proveden. Úspěšný bude až ten příkaz DISPLAY, který bude pomocí klauzule AT umisťovat data na obrazovku. Formát 6: Položka uváděná v příkazu DISPLAY formátu 6 musí mít USAGE DISPLAY. Literál (má smysl především alfanumerický), se zobrazí v tom tvaru, jak byl zadán. Figurativní konstanta představuje zpravidla jediný znak (pokud není uvedena klauzule SIZE). Některé figurativní konstanty mají specielní význam, jak je popsáno níže. Příkaz DISPLAY tohoto formátu musí obsahovat alespoň jednu z klauzulí MODE nebo WITH. Jinak by se jednalo o DISPLAY formátu 4. Pravidla: 1) Klauzule MODE IS BLOCK má význam při zobrazování skupinové položky. Skupinová položka se pak zobrazuje tak, jako kdyby místo ní stála alfanumerická položka o téže délce a s týmž obsahem (tj. zobrazí se znakově obsah všech jejích bytů). Není-li klauzule MODE IS BLOCK uvedena, zobrazují se jen ty elementární položky, podřízené dané skupinové položce, které mají jméno jiné než FILLER, nemají v popisu klauzuli REDEFINES (nebo nejsou podřízeny položce s klauzulí REDEFINES, která sama je podřízena zobrazované skupinové položce), nemají číslo úrovně 66 a mají USAGE DISPLAY. Obsah položek se jménem FILLER se nezobrazuje a jim odpovídající znaky na obrazovce zůstanou nezměněny. Skupinová položka uvedená za slovem DISPLAY smí mít klauzuli REDEFINES nebo být podřízena položce s klauzulí REDEFINES, smí mít i indexy. Její délka smí být pevná nebo proměnná, všechny její zobrazované podřízené elementární položky by však měly padnout dovnitř stínítka, jinak bude činnost příkazu DISPLAY předčasně ukončena. Mezi podřízenými elementárními položkami smí být i položky s klauzulí OCCURS (i OCCURS DEPENDING a rovněž i vícerozměrné tabulky); bude zobrazen takový pevný nebo proměnný počet podřízených položek, jak to odpovídá klauzulím OCCURS. 2) Je-li za slovem DISPLAY uvedena elementární položka, nesmí mít jiné USAGE než DISPLAY, smí však mít klauzuli REDEFINES nebo být podřízena položce s klauzulí REDEFINES a rovněž smí mít číslo úrovně 66. Tato položka bude zobrazena počínaje místem stínítka určeným pomocí klauzule AT. (Postupuje se stejně, jako kdyby se jednalo o skupinovou položku s jedinou podřízenou položkou.) 3) Je-li za slovem DISPLAY uveden literál nebo figurativní konstanta, bude tento argument zobrazen počínaje místem stínítka určeným pomocí klauzule AT. (Postupuje se stejně, jako kdyby se jednalo o alfanumerickou položku s takovouto hodnotou.) 4) Je-li uvedena klauzule BEEP resp. BELL, pak při zobrazování této položky se ozve pípnutí. 5) Je-li uvedena klauzule BLINK, pak bude zobrazený údaj na obrazovce blikat. 6) Je-li uvedena klauzule HIGHLIGHT, bude údaj zobrazen se zvýšeným jasem. 7) Je-li uvedena klauzule REVERSE-VIDEO, bude údaj zobrazen tak, že budou zaměněny barvy popředí (FOREGROUND-COLOR) a pozadí (BACKGROUND-COLOR). 8) Je-li uvedena klauzule FOREGROUND-COLOR resp. FOREGROUND-COLOUR, pak pro zobrazení údaje bude použita na popředí ta barva, jejíž číslo je v klauzuli uvedeno (0-černá, 1-modrá, 2-zelená, 3-tyrkysová, 4-červená, 5-fialová, 6-hnědá, 7-šedá). Obdobné pravidlo platí při použití klauzule BACKGROUND-COLOR resp. BACKGROUND-COLOUR. 9) Je-li uvedena klauzule BLANK LINE, bude po zobrazení údaje zbytek řádku vymezerován. 10) Je-li uvedena klauzule BLANK SCREEN, bude před zobrazením údaje vymezerována celá obrazovka. 11) Současným uvedením klauzulí BLANK SCREEN a FOREGROUND-COLOR lze nastavit "trvale" příslušnou barvu popředí, takže od tohoto okamžiku se bude při zobrazování údajů používat standardně tato barva popředí. Klauzule BLANK SCREEN se v tomto případě rovněž uplatňuje, takže se předem maže celá obrazovka. Obdobné pravidlo platí pro současné uvedení klauzulí BLANK SCREEN a BACKGROUND-COLOR resp. BACKGROUND-COLOUR. 12) Klauzule GRID, LEFTLINE, OVERLINE a UNDERLINE jsou ignorovány a nemají žádný význam. 13) Následující figurativní konstanty, jsou-li použity v příkazu DISPLAY formátu 6 mají zvláštní efekt: SPACE - vymezerování obrazovky od pozice kurzoru LOW-VALUE - pouze nastavení kurzoru ALL #01# - vymezerování od pozice kurzoru do konce řádky ALL #02# - vymezerování celé obrazovky ALL #07# - pípnutí (jako při BEEP) 14) Ostatní figurativní konstanty (mimo SPACE atd. uvedené v předchozím bodě) mají význam jednoho znaku, pokud neuvedeme současně klauzuli WITH SIZE. Figurativní konstanty ve spojení s klauzulí SIZE představují tolikrát opakovaný znak, kolik je udáno v klauzuli SIZE. 15) Je-li uvedena klauzule SIZE ve spojení s elementární položkou, pak bude daná položka zobrazena v takové délce, kolik je zadáno v klauzuli SIZE. Je-li zadaná hodnota jiná než je délka položky, bude položka buď zprava uříznuta nebo zprava doplněna mezerami do požadované délky.