Podprogram 'OKNO'
                       ==================
    K napsání podprogramu OKNO mě přivedl ten fakt, že každý
kdo vytváří programy psané v jazyce  symbolických  adres  se
obvykle zaměří na samotnou  tvorbu  programu  a  na  napsání
ovládací části mu nezbyde elán. Díky tomuto  faktu  vznikají
pěkné a užitečné programy, které umí  ovládat  jenom  autor.
Ovládání  takového  programu  vypadá  přibližně  následovně.
Předchází sekvence instrukcí CALL na  dobře  zapamatovatelné
adresy typu f37cH apod. Poslední CALL spustí samotný program
a ten očekává stisknutí klávesy 1 potom A,K a jiné  kombina-
ce. A co má dělat chudák uživatel, kterému se takový program
dostal do ruky (vlastně do počítače). Nezřídka  se  do  role
chudáka dostává i sám autor, protože  po  měsíční  přestávce
zapomněl na své ovládání. Proto  čest  vyjímkám,  pro  které
výše uvedené věty neplatí.
    Podprogram slouží k vytváření okénkových nabídek,  které
jsou úspěšně ověřeny několikaletou praxí. Základním  předpo-
kladem pro to, aby okna mohla existovat je možnost barevného
odlišení určité části textu na obrazovce. Vzhledem  k  tomu,
že počítač SORD nemá možnost nastavit  barevný  atribut  pro
každou znakovou pozici  zvlásť, existuje  jediná  cesta  jak
získat jinak barevný text. Spočívá  v  tom,  že  se  využijí
pozice v horní části ASCII tabulky,  do  které  se  inverzně
zkopírují znaky s kódy 20H - 7fH.
    Podprogram je napsán v asembleru a měl by se  stát  sou-
částí knihovny programů, které nám zpříjemňují  programátor-
ský život. Pro podporu oken  slouží  tři  rutiny  -  'INIT',
'ZAHRAB' a 'VYHRAB'.
    Před prvním použitím podprogramu OKNO je  nutné  zavolat
rutinu 'INIT', která nastaví generátor  znaků  obrazovky, ve
které je umístěný kurzor. Je vhodné rutinu 'INIT' volat  při
každé záměně obrazovky a je to nutné při změně režimu  obra-
zovky.
                      Popis podprogramů
                     -------------------
                      Podprogram 'OKNO'
                     ******************
vstup do rutiny -
  reg IY - ukazatel na tabulku, ve které je definice okna.
       A - určuje kolikátá položka bude zvýrazněna.
Tabulka, ve které jsou uloženy parametry okna má následující
složení:
TABULKA  DB RADEK   - řádek a
         DB SLOUPEC - sloupec levého horního rohu okna.
         DB POCPOL  - počet textů okna. Do tohoto  počtu  se
                      nepočítá název okna.
         DB DELKA   - udává délku nejdelšího textu a  tím  i
                      rozměr okna.
         DB KDE     - určuje kolikátá položka bude zvýrazňě-
                      na.
         DB BARRAM  - barva rámečku.
         DB NORMAL  - barva textu.
         DB INVERZ  - barva zvýrazněného textu.
         DB 'NAZEV OKNA',0
         DB '1. TEXT',0
         DB '2. TEXT',0
              .
              .
         DB 'n. TEXT',0
DB KDE se akceptuje pouze tehdy , jestliže při volání rutiny
'OKNO' je v registru A hodnota 0. Pokud je v registru A hod-
nota v rozsahu 1  -  POCPOL  je  zvýrazněna  položka  určená
registrem A. Při opouštění rutiny 'OKNO'  je  proměnná   KDE
nastavena podle vybrané položky.
    U barev horní 4 bity určují barvu znaku,  dolní  4  bity
barvu pozadí. Protože zvýrazněný text je  tvořen  inverzními
znaky platí určení barev naopak. V případě, že je  obrazovka
v textovém režimu jsou barvy ignorovány. Je potřeba si  uvě-
domit, že změny barev se vždy týkají celé  obrazovky,  proto
nelze nastavit  při  větším  počtu  oken  každé  okno  jinak
barevné.
    Každý text okna musí být ukončen  bytem  s  hodnotou  0.
V případě, že není požadován název okna  definuje  se  místo
názvu jenom byte 0. Název okna je vždy vycentrován.
Výstup z rutiny -
  reg A - pokud má hodnotu 0 byla rutina  opuštěna  klávesou
          RESET, která slouží jako ESC.
        - jinak nabývá hodnoty 1 - POCPOL a  udává  kolikátá
          položka byla vybrána.
Výběr položky se provádí kurzorovými  klávesami  nebo  levým
joystickem, vybraná položka se potvrdí klávesou RETURN  nebo
levým tlačítkem ATTACK. Jako klávesa ESC slouží  RESET  nebo
pravé tlačítko ATTACK.
                     Podprogram 'ZAHRAB'
                    ********************
    Podprogram slouží k uchování  části  obrazovky  přepsané
oknem do RAM. Před prvním zavoláním  této  rutiny  je  nutné
inicializovat proměnou OBRBUF, která udává počáteční  adresu
RAM pro ukládání.
Například:   LD HL,BUFFER
             LD (OBRBUF),HL
Podprogram nekontroluje velikost obsazené paměti.  Proto  je
pouze na  programátorovi, aby  vyhradil  dostatečně  velikou
oblast pro ukládání.
Vstup do rutiny -
reg IY - adresa tabulky právě vytvářeného okna.
Zachovává registr AF.
                     Podprogram 'VYHRAB'
                    ********************
    Obnoví část obrazovky přepsanou posledním oknem.
Výstup z rutiny -
reg IY - adresa tabulky okna, které je  po  obnovení  obsahu
         obrazovky aktuální. V případě, že bylo  "vyhrabáno"
         poslední okno je v registru IY nesmyslná adresa.
Zachovává registr A.
Princip obsazování  paměti  při  použití  rutin  'ZAHRAB'  a
'VYHRAB' je následující.
BUFFER     DS 2 - uložení registru IY.
           DS (POCPOL+2)*(DELKA+2) - uložení části  přepsané
                                     oknem.
           DS 2 - adresa ukazující začátek tohoto uložení.
           .
           .
           .
           Takto se postupně ukládají další okna.
Obsah proměnné OBRBUF se vždy aktualizuje tak, aby  ukazoval
na konec oblasti pro ukládání.
Upozornění: Podprogram 'OKNO' nepracuje v grafickém  režimu.
            Žádný z podprogramů nekontroluje, zda jsou  pou-
            žity správné vstupní parametry.
Příjemnou práci Vá přeje
                                   Ing. Robert Hernady