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',0DB 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