
%  Dokumentace k~programu MNU v~PlainTeXu.
%  (v ‡e¨tinˆ, v~k¢du Kamenick˜ch)
%  ==========================================
%  31.1.93                         Petr Ol¨ k

\hsize=159.2mm
\vsize=239.2mm
\raggedbottom

\font\titl=csbx10 scaled \magstep2
\font\bigtitl=csbx10 scaled \magstep4

\def\CS{$\cal C\kern-.1667em\lower.5ex\hbox{$\cal S$}\kern-.075em $}
\def\LaTeX{L\kern-.36em\raise.5ex\hbox{\sevenrm A}\kern-.12em\TeX}

%  je mo‘n‚ ‡esk‚ dˆlen¡ slov ? :
\expandafter\ifx\csname chyph\endcsname\relax \frenchspacing\else\chyph\fi
\hyphenation{menu sub-sti-tu-c¡}

\def\sect #1\par{\vskip30pt\goodbreak\line{\titl #1\hfil}\nobreak\bigskip}

\def\subsect #1\par{\ifdim\lastskip=\bigskipamount \else\vskip 20pt\medbreak\fi
  \line{\bf #1\hfil}\nobreak\medskip}

\catcode`\"=13
\def"{\hbox\bgroup\let"=\egroup\setverb\tt}
\def\setverb{\def\do##1{\catcode`##1=12}\dospecials\obeyspaces}
\def\dd{{\tt\char34}}

\catcode`\<=13
\def<#1>{\leavevmode\hbox{\rm\it\lowercase{#1}\/}}

\def \uv#1{\vbox to0pt{\kern-.33ex\hbox{''}\vss}\kern-.1ex#1\kern-.1ex``}

\def\begitems{\medskip\bgroup\catcode`\*=13 \narrower\narrower}
\def\enditems{\par\egroup\medskip}
{\catcode`\*=13 \gdef*{\par\noindent\llap{$\bullet$\ }\ignorespaces}}

\def\quest{\medskip\indent\hangindent\parindent
  \llap{\frame{\bf ?}\kern8pt}\ignorespaces}
\def\answ{\medskip\indent\hangindent\parindent
  \llap{\frame{\bf !}\kern8pt}\ignorespaces}
\def\frame#1{\lower4pt\vbox{\hrule
   \hbox to14pt{\vrule height10pt depth4pt\hfil #1\hfil\vrule}\hrule}}

\def\bull{\medskip\indent \llap{$\bullet$\ }}
\def\toa{$\to$}
\def\m{\hskip1em\relax}

\def\begtt{\par\medskip\bgroup\def\par{\endgraf\penalty1000}\setverb
   \catcode`\"=12\obeylines\startverb}
{\catcode`|=0 \catcode`\\=12 |gdef|startverb#1\endtt{|tt #1|egroup|medskip}}
{\obeyspaces\gdef {\ }}

% u‘it¡: \begtab{¨¡©e}, kde ¨¡©e je ¨¡©ka parboxu jedn‚ z~prav˜ch kolonek
\def\begtab#1{\medskip\line\bgroup\hfil  
  \vbox\bgroup\offinterlineskip
  \def\title{\vrule height15pt depth8.5pt width0pt\cr
    \noalign{\hrule} \vrule height15pt width0pt}
  \def\:{\hfill &&}
  \hrule\halign\bgroup\vrule##
    &\vrule height12pt width0pt\hfil\quad##\quad\hfil&&\vrule##
    &\quad\hbox to #1{\vtop{\hsize=#1\noindent\strut##\unskip\strut}}\quad\cr
    \vrule height15pt width0pt\relax}
\def\endtab{\vrule depth9pt width0pt&\cr
  \egroup\hrule\egroup\hfil\egroup\medskip}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% zde kon‡¡ makra

%%%%%%%%%%%%%%% Tituln¡ str nka %%%%%%%%%%%%

{\nopagenumbers
\pageno=0
\null\vfil
\centerline{\bigtitl Program MNU}
\vskip .5in
\centerline{\titl Konfigurovateln‚ menu pro spou¨tˆn¡ aplikac¡ pod DOSem}
\vfil
\medskip
\centerline{\vbox{\halign{\bf #\hfil &\quad #\hfil\cr
autor:  & Petr Ol¨ k \cr
        & katedra matematiky FEL €VUT \cr
        & $\underline{\strut \hbox{160 00  PRAHA}}$ \cr
        &     \cr
email:  &  {\tt\char60}"olsak@math.feld.cvut.cz>" \cr}}}

\vskip 3cm

\centerline{Dokumentace k~programu dod van  s~bal¡kem \CS\TeX\ 95}

\eject}

%%%%%%%%%%%%%%%%%%% Obsah %%%%%%%%%%%%%%%%%%%

\sect Obsah

\newcount\pn
\pn=1
\def\n{\advance\pn by 1}
{\obeylines\catcode`\~=12%
\def\s#1
{\medskip\line{\bf #1\hfil \the\pn\hskip\parindent}\medskip}%
\def\ss#1
{\line{\hskip\parindent #1 \dotfill\ \the\pn\hskip\parindent}\smallskip}%
%
\s   1. Stru‡n  charakteristika
\n
\s   2. Popis programu
\ss  2.1. Spu¨tˆn¡ programu
\n
\ss  2.2. —daje v konfigura‡n¡m souboru
\ss  2.3. Volba aktivn¡ polo‘ky
\ss  2.4. V˜bˆr polo‘ky kl vesnic¡
\n
\ss  2.5. V˜bˆr polo‘ky my¨¡
\s   3. Form t konfigura‡n¡ho souboru
\ss  3.1. Z kladn¡ struktura
\n
\ss  3.2. Aktivn¡ znaky
\n
\ss  3.3. Po‘adavek substituce textu
\n
\ss  3.4. Definice "~param"
\n
\ss  3.5. Defini‡n¡ © dek okna
\ss  3.6. Text okna a polo‘ek
\n
\ss  3.7. Definice reakce p©i v˜bˆru polo‘ky
\n
\ss  3.8. Glob ln¡ definice "~hotkeys", "~timeout", "~start", "~final", "~beep", "~mouse"
\n
\ss  3.9. Editovateln  polo‘ka, automatick  polo‘ka a zv˜raznˆn˜ text v oknˆ
\n
\s   4. Chybov  hl ¨en¡ a omezen¡ programu
\n
\s   5. N vrh konfigurace em\TeX u s programem MNU
\n\n
\s   6. Zmˆny vzhledem k verzi, ¨¡©en‚ na konferenci Euro\TeX'92
}


\sect 1. Stru‡n  charakteristika
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Programem MNU lze za pomoc¡ ©¡d¡c¡ d vky (".bat") opakovanˆ spou¨tˆt r–zn‚
aplika‡n¡ programy. Byl vyvinut pro pou‘it¡ v~syst‚mech \TeX, ale lze jej
u‘¡t i jinde.

Dokumentace je ur‡ena pro u‘ivatele, kte©¡ hodlaj¡ mˆnit st vaj¡c¡
konfigurace syst‚m–, v~nich‘ je program pou‘it, nebo navrhovat nov‚.
Proto p©edpokl d  ur‡itou hlub¨¡ znalost DOSu, zvl ¨tˆ pak zku¨enosti
s~navrhov n¡m d vek (".bat") v~DOSu.

Program vytv ©¡ zd n¡ integrovan‚ho prost©ed¡ pro spou¨tˆn¡ jednotliv˜ch
proces–. Toto prost©ed¡ lze zcela nakonfigurovat v‡etnˆ barev a tvar–
oken, jmen a zp–sobu pou‘it¡ jednotliv˜ch polo‘ek menu, kontextov‚ho
helpu apod. P©itom ©¡zen¡ procesu je zaji¨tˆno ©¡d¡c¡ d vkou. Tato d vka
v~jist‚m okam‘iku zavol  program MNU s~parametrem -- n zvem konfigura‡n¡ho
souboru (nap©. "texcfg.mnu"). Program MNU umo‘n¡ u‘ivateli komfortnˆ vybrat
po‘adovanou polo‘ku. Po v˜bˆru polo‘ky vr t¡ program p©¡slu¨n˜ chybov˜ k¢d
odpov¡daj¡c¡ ‡¡slu vybran‚ polo‘ky a ukon‡¡ svou ‡innost. V~d vce se nyn¡
\uv{zjist¡} ‡¡slo vybran‚ polo‘ky pomoc¡ skupiny p©¡kaz– "if errorlevel" a
podle toho se d vka vˆtv¡ na jednotliv‚ aplika‡n¡ procesy. Po proveden¡
aplikace d vka vˆt¨inou znovu zavol  program MNU a u‘ivatel znovu vybere
nˆjakou polo‘ku a cyklus se opakuje.

D vka m–‘e s~programem MNU komunikovat i pomoc¡ \uv{environment promˆnn˜ch}
DOSu a vstupn¡ch a v˜stupn¡ch soubor–. Program m–‘e (je-li to ©e‡eno
v~konfigura‡n¡m souboru) zobrazovat a editovat obsahy tˆchto promˆnn˜ch. Nav¡c
existuje jedna speci ln¡ environment promˆnn  s~n zvem "MNU", kter  ovlivn¡
start programu -- po spu¨tˆn¡ programu se nab¡dne jako aktivn¡ ta polo‘ka,
kter  je specifikovan  pr vˆ v~t‚to promˆnn‚ "MNU". U‘ivatel proto nemus¡
dlouho vyb¡rat n sleduj¡c¡ polo‘ku, nevymyk -li se postup jeho ‡innosti
norm lu. Nap©¡klad po ukon‡en¡ p©ekladu (programu \TeX) lze v~d vce zjistit
p©¡kazem "if errorlevel", zda tento p©eklad probˆhl bez chyby. Pokud ano,
pak se provede nastaven¡ promˆnn‚ "MNU" tak, aby po vyvol n¡ menu byla
nab¡dnuta jako aktivn¡ polo‘ka "View". U‘ivatel pak nemus¡ v~prost©ed¡ menu
dˆlat nic jin‚ho, ne‘ ma‡kat kl vesu "Enter".

V˜hodou t‚to \uv{d vkov‚} filosofie je, ‘e program MNU v~okam‘iku bˆhu
aplikace v–bec nep©ek ‘¡ v~pamˆti. D le neexistuj¡ p©i konfiguraci
syst‚mu pomoc¡ tohoto menu v~podstatˆ ‘ dn  omezen¡ v~mo‘nostech
variability nastaven¡ chov n¡ jednotliv˜ch proces–. Jedin˜m omezen¡m je
DOS samotn˜. Jedinˆ d vkou lze vyj d©it v¨e, co je v~konfigura‡n¡ch mo‘nostech
jednotliv˜ch aplika‡n¡ch program–.

\medskip
V~n sleduj¡c¡ tabulce je seznam soubor–, kter‚ jsou sou‡ st¡ dod vky
programu MNU.

\begtab{25em}
& "!readme.txt"  \: Z kladn¡ informace o~programu &\cr
& "mnu.doc"      \: Podrobn  dokumentace k~programu &\cr
& "mnutrick.doc" \: Popis nˆkter˜ch trik– pou‘it˜ch v~d vk ch &\cr
& "mnu.tex"      \: Obsah p©edchoz¡ch t©¡ soubor– v~Plain \TeX u~--
                    tento text &\cr
& "demotex.bat"  \: Demonstra‡n¡ d vka. &\cr
& "mnu.exe"      \: Vlastn¡ program MNU &\cr
& "texcfg.mnu"   \: Navrhovan  konfigurace programu MNU pro \TeX &\cr
&  "*.bat"       \: Navrhovan‚ d vky pro konfiguraci em\TeX u~&\cr
& "totext.exe"   \: Vrac¡ obrazovku do textov‚ho m¢du $80\times25$ &\cr
&  "kalk.exe", "kalk.hlp" \: Kalkula‡ka -- uk zka aplika‡n¡ho programu
\endtab

\medskip
Pozn mka. Do \CS\TeX u~nejsou za©azeny v¨echny uveden‚ soubory. \CS\TeX\
samotn˜ je toti‘ n zorn˜m p©¡kladem pou‘it¡ programu a proto je dokumentace
kr cena o~soubory  "demotex.bat", "mnutrick.doc", "!readme.txt". M¡sto
souboru "texcfg.mnu" najde u‘ivatel \CS\TeX u~ve sv‚ konfiguraci soubor
"cfg.mnu". D le je s~\CS\TeX em dod v na dokumentace ke konfiguraci
"cfg.doc" a k~instala‡n¡m d vk m "install.doc". Tyto soubory spole‡nˆ
s~funk‡n¡mi d vkami konfigurace (nap©. "texbat.bat") bohatˆ ilustruj¡
pou‘it¡ programu MNU.

\medskip
Software, obsa‘en˜ ve v˜¨e zm¡nˆn˜ch souborech je volnˆ ¨¡©iteln˜. Autor jej
p©ed v  sdru‘en¡ \CS TUG, od kter‚ho o‡ek v , ‘e zajist¡ popularizaci tohoto
produktu a dal¨¡ jeho ¨¡©en¡. Nen¡ dovoleno uveden‚ soubory ani jejich
modifikace pou‘¡vat k~v˜dˆle‡n˜m £‡el–m. To znamen , ‘e nen¡ dovoleno tento
software prod vat (s v˜jimkou manipula‡n¡ho poplatku za kop¡rov n¡ disket)
ani za©azovat do syst‚m–, jejich‘ provoz je ur‡en v˜hradnˆ k~v˜dˆle‡n‚
‡innosti.

Autor nebude v~z sadn¡ch koncep‡n¡ch ot zk ch tento program d le upravovat
a vylep¨ovat. Bude ale vdˆ‡n˜ za v¨echny p©ipom¡nky, kter‚ povedou k~odstranˆn¡
chyb, kter‚ bohu‘el u~‘ dn‚ho software nejsou vylou‡eny.

         
\sect 2. Popis programu
%%%%%%%%%%%%%%%%%%%%%%%

\subsect 2.1  Spu¨tˆn¡ programu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Program MNU pracuje v~textov‚m re‘imu obrazovky $80\times25$.
Je-li v˜choz¡ stav obrazovky jin˜, program nezobrazuje spr vnˆ. V~takov‚m
p©¡padˆ je vhodn‚ nejprve volat program "totext.exe", kter˜ vrac¡ obrazovku
do uveden‚ho textov‚ho re‘imu.

V~textov‚m re‘imu nen¡ program MNU samotn˜ z visl˜ na zp–sobu
reprezentace n rodn¡ch znak–. Ve¨ker‚ texty, kter‚ zobrazuje, ‡te
z~konfigura‡n¡ho souboru, kter˜ mus¡ b˜t p©ipraven v~z vislosti na pou‘it‚m
k¢dov n¡. Spr vn‚ zobrazov n¡ n rodn¡ch znak– na obrazovce nespad  do
kompetence programu a je t©eba pou‘¡t jin‚ technick‚ prost©edky.

Program se spou¨t¡ s~aspo¤ jedn¡m parametrem. T¡mto parametrem je n zev
konfigura‡n¡ho souboru (pop©¡padˆ i s~cestou). Dal¨¡ parametry jsou
nepovinn‚. Jedn  se o~n zvy vstupn¡ch a v˜stupn¡ch soubor– a program
s~nimi m–‘e nad le pracovat podle p©¡kaz– z~konfigura‡n¡ho souboru.

Pokud je program spu¨tˆn bez parametru, ohl s¡ chybu a ukon‡¡ ‡innost
s~n vratov˜m chybov˜m k¢dem 255. Stejnˆ tak v~p©¡padˆ, ‘e konfigura‡n¡
soubor nelze otev©¡t ke ‡ten¡.

Pravidlo: Kdykoli program ukon‡¡ ‡innost kv–li nˆjak‚ chybˆ, vyp¡¨e se
znˆn¡ chyby a n vratov˜ chybov˜ k¢d je 255.


\subsect 2.2  —daje v~konfigura‡n¡m souboru
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Z~konfigura‡n¡ho souboru program na‡te n sleduj¡c¡ £daje:

\begitems
 * Znˆn¡ (texty) jednotliv˜ch polo‘ek
 * €¡sla polo‘ek -- ka‘d  polo‘ka m  sv‚ ‡¡slo (nez porn‚ ‡¡slo typu integer)
 * Zp–sob reakce programu p©i v˜bˆru polo‘ky
 * Seskupen¡ polo‘ek do jednotliv˜ch oken
 * Strukturu vz jemn‚ho vol n¡ jednotliv˜ch polo‘ek
 * Typ polo‘ek (editovateln  a needitovateln )
 * Doprovodn‚ texty v~jednotliv˜ch oknech
 * Pro ka‘d‚ okno jeho velikost a um¡stˆn¡ na obrazovce
 * V¨echny pot©ebn‚ atributy barev
 * Zv˜raznˆn  p¡smena v~textech jednotliv˜ch polo‘ek
 * Texty help–, jejich napojen¡ na jednotliv‚ polo‘ky
 * Velikosti, um¡stˆn¡ a barvy oken help–
 * Zp–sob komunikace s~vnˆj¨¡m prost©ed¡m (vstupn¡ a v˜stupn¡ soubory,
   environment promˆnn‚)
\enditems

 V~konfigura‡n¡m souboru je mnoho dal¨¡ch informac¡. Podrobnˆji viz odst.3.

\subsect 2.3  Volba aktivn¡ polo‘ky p©i startu programu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Po spu¨tˆn¡ programu se nab¡dne jako aktivn¡ ta polo‘ka, jej¡‘ ‡¡slo je
shodn‚ s~‡¡slem environment promˆnn‚ "MNU".

P©¡klad vol n¡ programu :
\begtt
    set MNU=17
    mnu config.mnu
\endtt

V~tomto p©¡padˆ se nastav¡ p©i startu jako aktivn¡ polo‘ka s~‡¡slem 17.
(P©edpokl d me, ‘e v~souboru "config.mnu" je takov  polo‘ka definov na).

Pokud takov  polo‘ka je v~nˆjak‚m d¡l‡¡m \uv{pod-menu}, kter‚ vypl˜v  ze
struktury vz jemn‚ vazby oken a polo‘ek, otev©ou se automaticky v¨echna
\uv{rodi‡ovsk } okna v~t‚to struktu©e a potom teprve okno s~p©¡slu¨nou
polo‘kou

Jestli‘e environment promˆnn  "MNU" neexistuje nebo jej¡ obsah nen¡ ‡¡slo
typu integer, program vyhled  polo‘ku s~‡¡slem 0.

Nen¡-li v~konfigura‡n¡m souboru polo‘ka s~‡¡slem "MNU" definov na, program
ohl s¡ chybu a ukon‡¡ ‡innost.


\subsect 2.4  V˜bˆr polo‘ky kl vesnic¡
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

U‘ivatel mˆn¡ aktivn¡ polo‘ku pomoc¡ ¨ipek v~r mci jednoho okna. V˜jimku
tvo©¡ tzv. \uv{roletov‚} menu, kde ¨ipky doprava a doleva vyvolaj¡ p©eskok do
sousedn¡ch oken (to je nutn‚ ov¨em p©esnˆ definovat v~konfigura‡n¡m
souboru).

Kl vesa "Esc" vrac¡ v˜bˆr polo‘ek k~\uv{rodi‡ovsk‚mu} oknu. Neexistuje-li
takov‚ okno (aktivn¡ okno je \uv{ko©enem} struktury), pak program vyhled 
polo‘ku s~‡¡slem 0. Pokud takov  polo‘ka neexistuje, program ukon‡¡ ‡innost
a vr t¡ ©¡zen¡ DOSu s~k¢dem 0. Pokud polo‘ka existuje, program otev©e
p©¡slu¨n‚ okno a nab¡dne tuto polo‘ku jako aktivn¡. Tento postup umo‘¤uje
nakonfigurovat z vˆre‡nou ot zku typu \uv{Opravdu chcete ukon‡it ‡innost?},
p©i‡em‘ polo‘ka s~‡¡slem 0 m–‘e m¡t znˆn¡ "Ano".

\medskip
Reakce kl vesy "Enter" m–‘e b˜t troj¡:

\begitems
 * Otev©e se nov‚ okno s~polo‘kami. P©esnˆji: nab¡dne se specifikovan 
   polo‘ka jako aktivn¡.
 * Program ukon‡¡ svou ‡innost, uzav©e v¨echna otev©en  okna a vr t¡
   chybov˜ k¢d rovn˜ ‡¡slu vybran‚ polo‘ky. Je-li ‡¡slo polo‘ky vˆt¨¡
   ne‘ 254, program vr t¡ k¢d 255.
 * Program spust¡ proces definovan˜ jedn¡m © dkem DOSu (tzv. "© dkov‚"
   spou¨tˆn¡ procesu). V~tom p©¡padˆ program neopou¨t¡ pamˆŸ po‡¡ta‡e,
   spust¡ po‘adovan˜ proces a po ukon‡en¡ procesu nab¡dne dal¨¡
   specifikovanou polo‘ku jako aktivn¡.
\enditems

Zp–sob reakce kl vesy "Enter" se definuje v~konfigura‡n¡m souboru.

Zvl ¨tn¡m typem je tzv. \uv{editovateln } polo‘ka. Umo‘¤uje editovat v~m¡stˆ
polo‘ky. V˜sledek editace se ukl d  do speci ln¡ho bufferu pro pozdˆj¨¡
u‘it¡ v~\uv{© dkov‚m} spou¨tˆn¡ procesu nebo p©i za©azen¡ do v˜stupn¡ch
soubor–. T¡mto zp–sobem lze zmˆnit obsah environment promˆnn˜ch DOSu,
nebo p©ipravit parametry pro nˆjak˜ © dkov˜ proces apod.

Zabudovan˜ editor polo‘ek pracuje v~\uv{insert} m¢du. Kl vesy "Esc",
"Enter", ¨ipky, "Del" a "Backspace" reaguj¡ bˆ‘n˜m zp–sobem. Je-li jako
prvn¡ kl vesa stisknuta ¨ipka, nab¡zen˜ text lze editovat. Jinak p–vodn¡
text miz¡ a umo‘n¡ se editovat nov˜. Pokud je¨tˆ nebyla zah jena
editace, pak ¨ipky nahoru a dol– vyvolaj¡ p©eskok do sousedn¡ polo‘ky.
Jinak je nutno pou‘¡t nejd©¡ve kl vesu "Esc" nebo "Enter".

Kl vesa "F1" vyvol  help, z visl˜ na polo‘ce, kter  je zrovna aktivn¡. Okna
helpu se konfiguruj¡ v~konfigura‡n¡m souboru a mohou obsahovat kdekoli dal¨¡
polo‘ky (zv˜raznˆn‚ pojmy), z~nich‘ se sk ‡e na dal¨¡ okna helpu. T¡m lze
dos hnout toho, ‘e help je strukturovan˜. Help se opust¡ kl vesou "Esc".
V~p©¡padˆ, ‘e okno helpu neobsahuje ‘ dnou polo‘ku, pak kl vesa "Enter" m 
stejn˜ v˜znam, jako kl vesa "Esc".

Pokud je v~polo‘ce definov no tzv. \uv{zv˜raznˆn‚ p¡smeno}, lze vybrat danou
polo‘ku pouh˜m zm ‡knut¡m kl vesy s~t¡mto p¡smenem. Reakce programu je
stejn , jako p©i pou‘it¡ ¨ipek a zm ‡knut¡ "Enter".

V~p©¡padˆ jak‚koli nesrovnalosti v~konfigura‡n¡m souboru (nap©. nelze
nal‚zt ‡¡slo navazuj¡c¡ polo‘ky) program ohl s¡ chybu a ukon‡¡ ‡innost.

\subsect 2.5  V˜bˆr polo‘ky my¨¡
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Je-li instalov na my¨, na obrazovce se objev¡ v~m¡stˆ aktivn¡ polo‘ky
kurzor my¨i. Zm ‡knut¡ lev‚ho tla‡¡tka my¨i s~kurzorem nad polo‘kou kdekoli
na obrazovce zp–sob¡ v˜bˆr t‚to polo‘ky (jako "Enter"). Zm ‡knut¡ t‚ho‘
tla‡¡tka mimo okno reaguje podobnˆ jako "Esc", tj. zav©e se naposledy
otev©en‚ okno. Prav‚ tla‡¡tko vol  a odvol v  helpy. Prost©edn¡ tla‡¡tko je
bez funkce.

Mˆl jsem mo‘nost odladit program pouze s~my¨¡ \uv{genius mouse}. Je mo‘n‚,
‘e jin  my¨ nebude poslouchat (nap©. \uv{Mickey mouse}).


\sect 3. Form t konfigura‡n¡ho souboru
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Prohl‚dnˆte si obsah souboru "cfg.mnu". Bude V m slou‘it jako ilustra‡n¡
©¡klad. Bez soubˆ‘n‚ho sledov n¡ obsahu tohoto souboru je n sleduj¡c¡ text
jen obt¡‘nˆ ‡iteln˜.


\subsect 3.1  Z kladn¡ struktura
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Cel˜ konfigura‡n¡ soubor se dˆl¡ na £seky, kter‚ definuj¡ vlastnosti a
vzhled jednotliv˜ch oken. Takov˜ £sek za‡¡n  symbolem "^" v~prvn¡m sloupci
© dku. Tomuto © dku budeme ©¡kat \uv{defini‡n¡ © dek okna}. Za defini‡n¡m
© dkem okna n sleduje (nepovinnˆ) definice "~param", kter  je lok ln¡ pro dan‚
okno. N sleduj¡c¡ text se p©episuje do p©¡slu¨n‚ho okna. V~p©episovan‚m
textu se tak‚ vymezuj¡ jednotliv‚ polo‘ky a reakce, kterou program provede
p©i v˜bˆru polo‘ky. Konec textu okna je d n nov˜m defini‡n¡m © dkem okna
nebo (m‚nˆ ‡asto) glob ln¡ definic¡ "~param".

P©ed prvn¡m defini‡n¡m © dkem okna m–‘e b˜t libovoln˜ text (koment ©) a kromˆ
toho tam mohou b˜t glob ln¡ definice "~param", "~hotkeys", "~timeout",
"~start", "~final", "~beep", "~mouse" a "~copy". Tyto definice jsou na
samostatn˜ch © dc¡ch, kter‚ za‡¡naj¡ znakem~"~".

Konfigura‡n¡ soubor m  tedy n sleduj¡c¡ strukturu:
\begtt
  koment ©ov‚ © dky (nepovinn‚)
  ~glob ln¡ definice (nepovinn‚)
  ^prvn¡ defini‡n¡ © dek okna
  ~param pro dan‚ okno (nepovinn‚)
  text okna s vymezen¡m polo‘ek
  ~param - glob ln¡ (nepovinn‚)
  dal¨¡ koment © (nepovinn‚)
  ^druh˜ defini‡n¡ © dek okna
  ... atd.
\endtt

Text okna m–‘e \uv{p©esahovat} -- b˜t na v¡ce © dc¡ch, ne‘ se vejde do okna.
P©esahuj¡c¡ © dky (dole) se ignoruj¡ a lze je tak‚ pou‘¡t jako koment ©.

Nedoporu‡uje se ale tato m¡sta vyu‘¡vat k~rozs hl˜m koment ©–m. Program
toti‘ vyhled v  z~konfigura‡n¡ho souboru £daje sekven‡nˆ (© dek po © dku) a
takov‚ rozs hl‚ koment ©e by mohly v‚st ke zpomalen¡ chodu programu. Ze
stejn˜ch d–vod– je vhodn‚ na prvn¡ m¡sta v~souboru um¡stit definice
nej‡astˆji pou‘¡van˜ch oken. Tj. nap©. helpy je vhodn‚ ps t a‘ na konec
souboru.

\subsect 3.2  Aktivn¡ znaky
%%%%%%%%%%%%%%%%%%%%%%%%%%%

Aktivn¡mi znaky jsou takov‚ znaky, kter‚ vymezuj¡ strukturu konfigura‡n¡ho
souboru. Ostatn¡ znaky se obvykle p©episuj¡ jako text do vymezen‚ho okna
nebo slou‘¡ jako koment ©.

Vˆt¨ina znak– je aktivn¡ pouze podm¡nˆnˆ. Tak t©eba znak "~" je aktivn¡ pouze
pokud se nal‚z  v~prvn¡m sloupci © dku. Kdekoli jinde se interpretuje jako
oby‡ejn˜ textov˜ znak.

V~n sleduj¡c¡ tabulce je p©ehled aktivn¡ch znak–.

\begtab{15em}
& Znak &&  Podm¡nˆnost           && V˜znam   & \title
& "^"  &&  v~prvn¡m sloupci      && defini‡n¡ © dek okna &\cr
& "~"  &&  v~prvn¡m sloupci      && glob ln¡ nebo lok ln¡ definice &\cr
& "|"  &&  kdekoli v~textu okna  && vymezen¡ za‡ tku resp. konce po\-lo‘ky &\cr
& "#"  &&  bezprost©ednˆ n sleduj¡c¡ za otev¡rac¡m znakem "|" polo‘ky
                                 && ozna‡en¡ editovateln‚ polo‘ky &\cr
& "^"  &&  bezprost©ednˆ n sleduj¡c¡ za otev¡rac¡m znakem "|" polo‘ky
                                 && ozna‡en¡ automatick‚  polo‘ky &\cr
& "!"  &&  bezprost©ednˆ n sleduj¡c¡ za otev¡rac¡m znakem "|" polo‘ky
                                 && ozna‡en¡ zv˜raznˆn‚ho textu &\cr
& "^"  &&  uvnit© polo‘ky        && ozna‡en¡ zv˜raznˆn‚ho p¡smene &\cr
& "{"  &&  bezprost©ednˆ n sleduj¡c¡ za uzav¡rac¡m znakem "|" polo‘ky
                                 && ve slo‘en˜ch z vork ch je vymezen¡ reakce
                                    p©i v˜bˆru polo‘ky &\cr
& "[%" &&  kdekoli v~souboru     && dvojznak, kter˜ uvozuje po‘adavek
                                    substituce textu
\endtab

Z~uveden‚ tabulky plynou nˆkter  omezen¡ pro texty oken:

\begitems
 * ’ dn˜ \uv{oby‡ejn˜} © dek nesm¡ za‡¡nat znaky "~" a "^" .
 * Znak  "|"  nelze za©adit do textu okna. (M¡sto nˆho lze v~p©¡padˆ nutnosti
   pou‘¡t znak \vrule~, kter˜ m  v~roz¨¡©en‚ ASCII k¢d 179).
 * Uvnit© polo‘ky se V m nepoda©¡ vytisknout znak "^" .
 * V~cel‚m konfigura‡n¡m souboru nelze napsat dvojici znak–  "[%" , proto‘e
   t¡m vyvol te po‘adavek substituce textu.
 * Text needitovateln‚ polo‘ky nem–‘e za‡¡nat znakem "!" nebo "#"~.
\enditems

Znaky jsou vybr ny tak, aby uveden  omezen¡ nebyla p©¡li¨ podstatn .

\subsect 3.3  Po‘adavek substituce textu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Kdekoli v~textu konfigura‡n¡ho souboru se m–‘e vyskytnout konstrukce
"[%<NAZEV>%<DELKA>]"  , kde parametr <DELKA> je nepovinn˜.

Tato konstrukce se nahrad¡ obsahem environment promˆnn‚ <NAZEV>. D‚lka
p©¡slu¨n‚ho ©etˆzce bude m¡t hodnotu <DELKA>. Znamen  to, ‘e p©i del¨¡m
obsahu environment promˆnn‚ se znaky vpravo ignoruj¡ a p©i krat¨¡m se vpravo
dopl¤uj¡ mezery. Nen¡-li parametr <DELKA> uveden, je d‚lka p©¡slu¨n‚ho
©etˆzce rovna aktu ln¡ d‚lce obsahu environment promˆnn‚.

\medskip
Existuje je¨tˆ jedna mo‘nost substituce textu - toti‘ textem z~jin‚ho
souboru. Konstrukce m  tvar "[%<N>% <X>, <Y>, <DELKA>]". Tato konstrukce se
nahrad¡ textem z~\uv{<N>-t‚ho souboru}. <N>-t˜ soubor je soubor, jeho‘ n zev je
uveden jako <N>-t˜ parametr v~p©¡kazov‚m © dku vol n¡ programu MNU.

D le <Y> je ‡¡slo © dku a <X> je ‡¡slo sloupce, od kter‚ho se m  soubor ‡¡st
a <DELKA> je d‚lka v˜sledn‚ho stringu. String se p©e‡te pouze z~p©¡slu¨n‚ho
© dku a p©¡padnˆ se dopln¡ zprava mezerami. Je-li <DELKA> = 0, pak je d‚lka
v˜sledn‚ho stringu rovna d‚lce p©¡slu¨n‚ho <Y>-t‚ho © dku v~souboru (nebo jeho
‡ sti pro $<X> > 1$).

Parametr <DELKA> je jedin˜ nepovinn˜ a nen¡-li uveden, ‡te se od pozice
<X>, <Y> a‘ do konce souboru.

{\bf P©¡klady.} Uva‘ujme, ‘e program MNU je vol n za t‚to situace:

\begtt
   set ENVIN=blabol
   mnu config.mnu myfile.txt
\endtt

a ‘e soubor "myfile.txt" obsahuje dva © dky:

\begtt
   experiment ln¡ text
   na dvou © dc¡ch obsahuj¡c¡ [%ENVIN%]
\endtt

V~n sleduj¡c¡ tabulce jsou r–zn‚ p©¡klady:

\begtab{20em}
& konstrukce       && v˜sledek & \title
& "[%ENVIN%3]    " && "bla" &\cr
& "[%ENVIN%]     " && "blabol" &\cr
& "[%2% 1, 1, 5] " && "exper" &\cr
& "[%2% 10, 1, 9]" && "t ln¡ tex" &\cr
& "[%2% 1, 1]    " && "experiment ln¡ text"\hfil\break
                      "na dvou © dc¡ch obsahuj¡c¡ blabol" &\cr
& "[%2% 17, 2, 0]" && "obsahuj¡c¡ blabol"
\endtab

Pokud environment promˆnn  <NAZEV> neexistuje, v˜sledek konstrukce je
pr zdn˜. P©itom program nehl s¡ chybu. Tak nap©¡klad "[%%80]" zna‡¡ 80
mezer. Stejnˆ tak, pokud nelze otev©¡t soubor ke ‡ten¡, v˜sledek konstrukce
je pr zdn˜.

Z~bezpe‡nostn¡ch d–vod– program zabr n¡ konstrukci s~vol n¡m souboru
s~‡¡slem 0 a 1 (konfigura‡n¡ soubor vol  sebe sam‚ho). Nekone‡n  rekurze
vol n¡ soubor– je o¨et©ena tak, ‘e p©i osm‚m pokusu o~vstup do dal¨¡ho
souboru program ohl s¡ chybu p©eplnˆn¡ z sobn¡ku nebo nep–jde otev©¡t znovu
soubor ke ‡ten¡ (po‡et otev©en˜ch soubor– je v~DOSu limitov n).

Vno©en‚ substituce (viz p©¡klad v tabulce) pracuj¡ pouze p©i po‘adavku na
substituci textem ze souboru. Nelze tedy vyu‘¡vat substitu‡n¡ konstrukce
v~hodnot ch environment promˆnn˜ch. Pokud se v~hodnotˆ environment promˆnn‚
vyskytne dvojznak~"[%", pak u‘ nen¡ interpretov n jako aktivn¡.

Pokud v~substitu‡n¡ch konstrukc¡ch vol te soubor s~textem, kter˜ obsahuje
defini‡n¡ © dky okna, mus¡ b˜t takov  konstrukce na za‡ tku © dku. Program
p©i prohled v n¡ definic toti‘ ‡te jen za‡ tek ka‘d‚ho © dku a nezdr‘uje
se substitucemi, kter‚ se po‘aduj¡ nˆkde uprost©ed oby‡ejn˜ch © dk–. Takov‚
substituce provede a‘ v~okam‘iku, kdy pot©ebuje na‡¡st text okna.

\medskip
Existuje-li p©ed prvn¡m defini‡n¡m © dkem okna glob ln¡ definice "~copy",
pak v¨echny © dky konfigura‡n¡ho souboru, kter‚ se nal‚zaj¡ za t¡mto © dkem
(v‡etnˆ glob ln¡ch definic a defini‡n¡ch © dk– okna) se p©ekop¡ruj¡ na
obrazovku. Definice "~copy" neobsahuje parametry, tak‘e jej¡ tvar je pouze:
"~copy".

P©i kopii se prov d¡ substituce text– podle v˜¨e zm¡nˆn˜ch pravidel. Program
"MNU" po skon‡en¡ kop¡rov n¡ ukon‡¡ ‡innost. To znamen , ‘e se definic¡
"~copy" program uvede do zvl ¨tn¡ho re‘imu, kdy nerespektuje ‘ dn‚ p©¡kazy
ani definice z~konfigura‡n¡ho souboru a nepracuje s~‘ dn˜mi polo‘kami ani
okny. V~tomto re‘imu je aktivn¡ pouze dvojznak~"[%"~.

V˜znam takov‚ kopie m  p©edev¨¡m p©i v˜stupu nikoli na obrazovku, ale do
souboru. To se d  za©¡dit snadn˜m p©esmˆrov n¡m v˜stupu:

\begtt
     mnu vstup dal¨¡ vstupy > vystup
\endtt

\noindent Mo‘n‚ vyu‘it¡ tohoto re‘imu programu je uvedeno v~souboru
"cfg.doc" a "install.doc".


{\catcode`\~=12
\subsect 3.4  Definice "~param"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

}
Definice za‡¡n  znakem "~" a m  tvar:

\begtt
  ~param {<CISLA>} "<ZAHLAVI>" ; <KOMENTAR>
\endtt

€ st © dku \dd<ZAHLAVI>\dd\ stejnˆ jako ‡ st "; <KOMENTAR>"
je nepovinn .

\bull <CISLA> -- jsou cel  ‡¡sla bez znam‚nka oddˆlen  od sebe mezerami nebo
  ‡ rkami. Podle po©ad¡ maj¡ tato ‡¡sla postupnˆ tento v˜znam:

\begtt
  {<XMIN>, <YMIN>, <SIRKA>, <VYSKA>, <RAMY>, <ZAKLAD>, <POL>, <PISM>, <A-POL>, <A-PISM>}
\endtt

\noindent kde je:

{\narrower\parindent=0pt
<XMIN>, <YMIN> -- x-ov  a y-ov  pozice lev‚ho horn¡ho rohu okna
           (v‡etnˆ r me‡ku)

<SIRKA>, <VYSKA> -- ¨¡©ka a v˜¨ka okna (v‡etnˆ r me‡ku)

<RAMY> --  0 : ‘ dn˜ r me‡ek, 1 : jednoduch˜, 2 : dvojit˜ r me‡ek

<ZAKLAD> --  textov˜ atribut barvy z kladn¡ho textu v~oknˆ (0~a‘~255)

<POL> -- textov˜ atribut barvy neaktivn¡ polo‘ky

<PISM> -- textov˜ atribut barvy zv˜raznˆn‚ho p¡smene v~neaktivn¡ polo‘ce

<A-POL>, <A-PISM> -- Tot‚‘ jako <POL>, <PISM>, ale pro aktivn¡  polo‘ku

}
\medskip
Pokud je uvedeno parametr– m‚nˆ, ne‘ 10, pak parametry vpravo z–st vaj¡
nezmˆnˆny. Pokud je uvedeno v¡ce ‡¡sel, ne‘ 10, ‡¡sla vpravo nemaj¡ vliv.

M¡sto ‡¡sla m–‘e b˜t uveden znak  "*" . Potom p©¡slu¨n˜ parametr z–st v 
nezmˆnˆn.

\medskip
Na tomto m¡stˆ uvedeme tabulku ‡¡sel barev v~textov‚m m¢du (ono se to
¨patnˆ pamatuje a skoro stejnˆ ¨patnˆ se to nˆkde hled ).

\medskip
\line{\hfil\vbox{\hrule\hbox{%
\vbox{\halign{\vrule\quad\strut #\hfil\quad&\vrule\quad\hfil #\hfil\quad\cr
barva   & ‡¡slo\vrule height12pt depth4pt width0pt \cr
\noalign{\hrule}  \vrule height12pt width0pt
black   & 0 \cr
blue    & 1 \cr
green   & 2 \cr
cyan    & 3 \cr
red     & 4 \cr
magenta & 5 \cr
brown   & 6 \cr
light gray & 7 \vrule depth6pt width0pt \cr}}%
\vbox{\halign{\vrule\quad\strut #\hfil\quad&\vrule\quad\hfil #\quad\vrule\cr
barva         & \omit \vrule height12pt depth4pt\quad ‡¡slo\quad\vrule \cr
\noalign{\hrule}  \vrule height12pt width0pt
dark gray     &  8 \cr
light blue    &  9 \cr
light geen    & 10 \cr
light cyan    & 11 \cr
light red     & 12 \cr
light magenta & 13 \cr
yellow        & 14 \cr
white         & 15 \vrule depth6pt width0pt \cr}}}\hrule}\hfil}
\medskip
Snad nebude vadit, ‘e jsou n zvy barev v~angli‡tinˆ. Tyto pojmy toti‘ u‘
skoro pat©¡ k~po‡¡ta‡ov‚ terminologii.

Atribut barvy se po‡¡t  jako 16 kr t ‡¡slo barvy pozad¡ plus ‡¡slo barvy
pop©ed¡. Pro pozad¡ lze vybrat jen barvy s~‡¡slem men¨¡m ne‘ 8, jinak se
text rozblik .

\bull <ZAHLAVI> -- text, kter˜ se nacentruje do horn¡ ‡ sti okna v~m¡stˆ r me‡ku.
  Nen¡-li z hlav¡ uvedeno, r me‡ek v~horn¡ ‡ sti okna nebude p©eru¨en
  ‘ dn˜m textem.

\bull <KOMENTAR> -- text uveden˜ za st©edn¡kem se ignoruje.
\medskip

Glob ln¡ definice "~param"  m  svou p–sobnost na v¨echna okna definovan  za
n¡ a‘ po dal¨¡ glob ln¡ definici "~param"

Naproti tomu lok ln¡ definice "~param"  ovlivn¡ (v¨echny nebo nˆkter‚) parametry
pouze pro dan‚ okno.

Nejsou-li parametry mˆnˆny ani glob lnˆ, ani lok lnˆ, pak maj¡ implicitn¡
hodnotu. Implicitn¡ hodnoty odpov¡daj¡ t‚to definici:

\begtt
  ~param {10, 5, 62, 17, 1, 31, 30, 30, 14, 14}
\endtt

tj. modr‚ okno nˆkde uprost©ed s~jedn¡m r mem a se ‘lut˜mi polo‘kami.


\subsect 3.5  Defini‡n¡ © dek okna
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

m  tvar

\medskip\noindent
"       ^(<H-POL>)  <POLOZKY>  [<R-POL>] "{\tt\char60}"<L-R>>  \ ; <KOMENTAR>"
\medskip

Typ parametru je rozli¨en druhem z vorky. Po©ad¡ parametr– nelze mˆnit.

V¨echny parametry (v‡etnˆ sv˜ch z vorek), kromˆ parametru <POLOZKY>, jsou
nepovinn‚, tak‘e \uv{nej\-stru‡\-nˆj\-¨¡} definice okna m  tvar:  "^ <POLOZKY>".

\bull <H-POL> -- pokud je tento parametr uveden, jedn  se o~okno helpu.
  Pozor: lev  kulat  z vorka mus¡ bezprost©ednˆ n sledovat za znakem "^" .
  <H-POL> je seznam ‡¡sel polo‘ek (oddˆlen˜ch od sebe ‡ rkou nebo mezerou), ze
  kter˜ch se vyvol  dan‚ okno helpu. Nap©. je zrovna aktivn¡ polo‘ka ‡¡slo
  17 a u‘ivatel zm ‡kne "F1". Potom se otev©e takov‚ okno, kter‚ m  v~kulat‚
  z vorce uvedeno (mezi jin˜mi) ‡¡slo 17. Nen¡-li takov‚ okno definov no,
  program neohl s¡ chybu, pouze vy¨le zvukov˜ sign l (viz definice~"~beep"
  v~odst.3.8).

V~p©¡padˆ, ‘e parametr <H-POL> je uveden, je tak‚ parametr  <POLOZKY>
  nepovinn˜.

\bull <POLOZKY> -- seznam ‡¡sel polo‘ek, kter‚ jsou n slednˆ definov ny 
v~textu okna. €¡sla a polo‘ky si vz jemnˆ odpov¡daj¡ podle po©ad¡.

  Je-li ‡¡sel m‚nˆ ne‘ polo‘ek v~textu okna, p©eb˜vaj¡c¡ polo‘ky maj¡
  ‡¡slo shodn‚ s~posledn¡m ‡¡slem v~seznamu. Je-li seznam pr zdn˜, pak
  polo‘ky nemaj¡ ‡¡slo (to je mo‘n‚ jen v~oknˆ helpu).

Je-li ‡¡sel v¡ce, ne‘ polo‘ek, p©esahuj¡c¡ ‡¡sla se ignoruj¡.
  Po‘aduje-li se nˆkdy skok na polo‘ku s~takov˜m ignorovan˜m ‡¡slem,
  okno se otev©e, ale ‘ dn  polo‘ka v~nˆm nebude aktivn¡. Kl vesa "Enter"
  p©ebere v˜znam kl vesy "Esc" a ¨ipky funguj¡ jen vpravo a vlevo a to
  jen za p©edpokladu, ‘e je definov n parametr <L-R> .

\bull <R-POL> -- je jedno ‡¡slo, ozna‡uj¡c¡ \uv{rodi‡ovskou} polo‘ku dan‚ho
  okna. Pokud je <R-POL> uvedeno, program p©edt¡m, ne‘ otev©e dan‚ okno,
  zkontroluje, zda u‘ je otev©en‚ okno s~rodi‡ovskou polo‘kou. Nen¡-li toto
  \uv{rodi‡ovsk‚} okno otev©en‚, otev©e nejprve jej. T¡mto zp–sobem se definuje
  stromov  struktura menu.

\bull <L-R> -- Dvˆ ‡¡sla polo‘ek, na kter‚ program sko‡¡ v~p©¡padˆ zm ‡knut¡
  lev‚ resp. prav‚ ¨ipky. P©ed sko‡en¡m na tuto polo‘ku se zav©e aktivn¡
  okno. Nen¡-li parametr <L-R> uveden, ¨ipka vpravo m  stejn˜ v˜znam,
  jako ¨ipka dol– a ¨ipka vlevo jako ¨ipka nahoru.

Uveden¡m parametru <L-R> lze konfigurovat tzv. \uv{roletov‚} menu, kter‚
umo‘¤uje ¨ipkami vpravo a vlevo \uv{posunovat rolety}.

\bull "\" -- P©¡tomnost tohoto znaku definuje tzv. \uv{automaticky zav¡rateln‚
  okno}. Je-li parametr uveden, pak p©i zav©en¡ okna, kter‚ je mu \uv{dˆtsk˜m
  oknem}, se automaticky zav©e i toto okno. Poeticky ©e‡eno: rodi‡ pot‚, co
  se mu narodilo d¡tˆ, nem–‘e ‘¡t d‚le, ne‘ jeho d¡tˆ.


\subsect 3.6  Text okna a polo‘ek
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Text n sleduj¡c¡ za defini‡n¡m © dkem okna se p©episuje © dek po © dku
do p©¡slu¨n‚ho okna po‡¡naje bezprost©ednˆ prvn¡m © dkem za defini‡n¡m
© dkem okna (s v˜jimkou lok ln¡ definice "~param").

Je-li © dek del¨¡, ne‘ p©¡slu¨n  vnit©n¡ ¨¡©ka okna (myslete na r me‡ek!),
zbytek © dku vpravo se ignoruje.

Je-li © dk– v¡ce, ne‘ vypl˜v  z~vnit©n¡ v˜¨ky okna, dal¨¡ © dky se ignoruj¡.

Je-li © dk– m‚nˆ, okno bude m¡t dole pr zdn‚ © dky. Tato situace m–‘e
nastat v~p©¡padˆ, ‘e se naraz¡ na konec konfigura‡n¡ho souboru, nebo na
© dek za‡¡naj¡c¡ symbolem "~" nebo "^" . Takov‚ © dky mohou ukon‡it
p©ed‡asnˆ p©epis textu do okna.

P©epis textu do okna je nestandardn¡ p©i p©episu polo‘ky. P©epis polo‘ky
za‡¡n  nalezen¡m prvn¡ho znaku "|", kter˜ uvozuje text polo‘ky. Tento znak
se nep©episuje. N sleduje-li bezprost©ednˆ za n¡m znak~"#", resp.~"^",
resp.~"!", jedn  se o~editovatelnou polo‘ku, resp. automatickou polo‘ku,
resp. zv˜raznˆn˜ text. Co se v~takov‚m p©¡padˆ provede je uvedeno
v~odst.~3.9. V~opa‡n‚m p©¡padˆ (jedn  se o~\uv{oby‡ejnou} polo‘ku) se dal¨¡
text p©episuje. V~p©¡padˆ existence znaku "^" uvnit© polo‘ky, se tento znak
ignoruje a p©edch zej¡c¡ (pozor! nikoli n sleduj¡c¡) znak se ozna‡¡ jako
zv˜raznˆn‚ p¡smeno. P©epis polo‘ky kon‡¡ nalezen¡m zav¡rac¡ho znaku "|" ,
kter˜ se nep©episuje.

Za textem polo‘ky (bezprost©ednˆ za uzav¡rac¡m znakem) m–‘e n sledovat
znak "{" . Potom uvnit© slo‘en˜ch z vorek je definice reakce p©i v˜bˆru
polo‘ky. P©i p©episu textu do okna se tato definice ignoruje (v‡etnˆ
z vorek).

Je-li uvnit© textu polo‘ky konec © dku, program ohl s¡ chybu a ukon‡¡ ‡innost.


\subsect 3.7  Definice reakce p©i v˜bˆru polo‘ky
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Ve slo‘en˜ch z vork ch za uzav¡rac¡m znakem "|" polo‘ky lze definovat reakci
na v˜bˆr polo‘ky. Tato definice m  tvar sekvence jak˜chsi p©¡kaz– oddˆlen˜ch
‡ rkami nebo mezerami. M–‘e obsahovat i nula p©¡kaz– (v takov‚m p©¡padˆ lze
slo‘en‚ z vorky vypustit). V~n sleduj¡c¡ tabulce je seznam mo‘n˜ch p©¡kaz–:

\begtab{25em}
& tvar p©¡kazu &&  v˜znam & \title
& "$"<CODE>    &&  konec programu; program skon‡¡ s~error-k¢dem <CODE> &\cr
& <CISLO>      &&  p©¡kaz skoku -- sko‡¡ se na dal¨¡ polo‘ku s~‡¡slem <CISLO>.
                   \strut Je-li polo‘ka v~dosud neotev©en‚m oknˆ,
                   okno se otev©e (p©¡padnˆ i s~podstrukturou). &\cr
& "\"          &&  Znak "\" uzav¡r  aktivn¡ okno. &\cr
& "*"          &&  Uzav©en¡ v¨ech oken na obrazovce. &\cr
& \dd<TEXT>\dd">"<N>
   &&  Je-li $<N> = 0$, spust¡ se <TEXT> jako © dek DOSu. \strut\hfil\break
       Je-li $<N> = 1$, program ohl s¡ chybu.\strut\hfil\break
       Je-li $<N> > 1$, pak <TEXT> se zap¡¨e jako dal¨¡ © dek
       do <N>-t‚ho souboru. \strut\hfil\break
       \strut Je-li <N> n zev environment promˆnn‚, pak se <TEXT> zap¡¨e do n¡. &\cr
& "!><N>"  &&  <N> mus¡ b˜t vˆt¨¡ ne‘ 1. Reset <N>-t‚ho souboru pro z pis.
          \strut Obsah v~tomto souboru (pokud nˆjak˜ byl) t¡mto okam‘ikem
          zanik . &\cr
& "CR+", "CR-" && Zapnut¡ resp. vypnut¡ automatick‚ho CR na konci © dku
                  v~© dkov‚m editoru.
\endtab

{\bf Pozn mky.}

\bull P©¡kaz skoku mus¡ b˜t uveden jako posledn¡ p©¡kaz v~definici reakce.
   P©¡kazy se toti‘ prov dˆj¡ postupnˆ zleva doprava a p©¡kaz skoku p©ed 
   ©¡zen¡ nov‚ polo‘ce, tak‘e p©¡kazy za skokem nejsou nikdy provedeny.

\bull Nen¡-li p©¡kaz skoku uveden (nen¡ komu p©edat ©¡zen¡), program uzav©e
   v¨echna okna a ukon‡¡ svou ‡innost s~k¢dem rovn˜m ‡¡slu vybran‚ polo‘ky.
   Nen¡ proto nutn‚ uv dˆt p©¡kaz "$<CODE>", pokud chceme, aby <CODE> byl
   roven ‡¡slu naposledy vybran‚ polo‘ky. (Nej‡astˆj¨¡ p©¡pad).

\bull P©¡kaz "\" m  stejn˜ v˜znam, jako zm ‡knut¡ "Esc". Pokud ale aktivn¡ okno
   nen¡ rovno posledn¡mu otev©en‚mu oknu, nastanou pot¡‘e. Takov  situace
   nastane, pokud program tor konfigura‡n¡ho souboru nedodr‘uje z sobn¡kovou
   strukturu oken a ani‘ by pozav¡ral pot©ebn  okna, sko‡¡ p©¡kazem skoku
   nˆkam doprost©ed. Pak uzav©en¡ prost©edn¡ho okna v~pomysln‚m z sobn¡ku
   automaticky vyvol  uzav©en¡ v¨ech oken, kter  byla otev©ena pozdˆji.

\bull P©¡kazy "*" a "\" nemus¡ b˜t od ostatn¡ch oddˆleny mezerou ani ‡ rkou.
   Tak‘e pro zav©en¡ okna a skok na polo‘ku 17 existuj¡ ekvivalentn¡ z pisy:

\nobreak\medskip\noindent
"     {\, 17} " nebo " {\ 17} " nebo " {\17}"

\bull P©ed spu¨tˆn¡m © dku DOSu p©¡kazem \dd<TEXT>\dd">0" je vhodn‚ pou‘¡t
   p©¡kaz "*". Spu¨tˆn˜ proces m–‘e toti‘ odrolovat obrazovku a s~n¡
   \uv{ute‡ou} i v¨echna nezav©en  okna. Program pak bude zobrazovat objekty
   na obrazovce chaoticky. Uk zkov˜ p©¡klad spr vn‚ho spu¨tˆn¡ © dku DOSu
   je:

\begtt
       {*"dir a:">0, 17}
\endtt

   \noindent
   Tato konstrukce nejprve uzav©e v¨echna okna, pak provede  "dir a:"  a
   nakonec se otev©ou okna a‘ k~polo‘ce~17.

\bull P©¡kaz \dd<TEXT>\dd"><N>"  ($<N> > 1$) jen p©id  dal¨¡ © dek k~ji‘
   existuj¡c¡mu textu v~souboru. Chcete-li zlikvidovat star˜ obsah souboru,
   pou‘ijte nejd©¡ve p©¡kaz  "!><N>".

\bull Ulo‘en¡ do environment promˆnn‚ je lok ln¡ v~r mci programu MNU. DOS
   toti‘ p©ed v  p©i spu¨tˆn¡ programu obsah environmentu hodnotou a nikoli
   odkazem. Chceme-li obelst¡t tuto z le‘itost, mus¡me p©enos informace
   prov‚st pomoc¡ v˜stupn¡ch soubor–. Nap©¡klad po programu MNU vol me
   hned d vku, kterou program vytvo©il:
\begtt
     mnu cfg.mnu envir.bat
     call envir
\endtt
   \noindent
   a v souboru "cfg.mnu" formulujeme t©eba po‘adavek na zmˆnu hodnoty
   environment promˆnn‚ "MARK" takto:
\begtt
    "set MARK=nova hodnota">2
\endtt

\bull P©ed ‡¡slem souboru v p©¡kaze \dd<TEXT>\dd"><N>" se m–‘e vyskytnot
  procento, tj. p©¡kaz m  tvar
\begtt
       "<TEXT>">%N
\endtt
   \noindent
   V takov‚m p©¡padˆ se p©i ulo‘en¡ © dky <TEXT> do souboru nav¡c zduplikuj¡
   v¨echna procenta v~t‚to © dce. V˜znam tohoto p©¡kazu souvis¡
   s~\uv{polyk n¡m} procent p©i zpracov n¡ d vkov˜ch soubor–, jako
   t©eba "envir.bat" z~p©edchoz¡ho p©¡kladu. P©¡kazem
\begtt
       "set MARK=hodnota obsahuj¡c¡ procenta">%2
\endtt
   se do d vky "envir.bat" ulo‘¡ © dek, v nˆm‘ jsou procenta zduplikovan . Po
   proveden¡ d vky "envir.bat" (kter  "polkne" u ka‘d‚ dvojice procent jedno
   z nich), je v promˆnn‚ "MARK" ulo‘eno p©esnˆ tolik procent, kolik si
   p©ejeme. Podrobnˆji viz soubor "cfg.doc".

\bull Je-li nˆjak˜ soubor poprv‚ pou‘it jako v˜stupn¡, od t‚to chv¡le ji‘
   nelze pou‘¡t pro vstup. Po‘adavek vstupu v~konstrukc¡ch "[%<N>%...]"
   bude v~takov‚m p©¡padˆ vracet pr zdn˜ string.

\bull String \dd<TEXT>\dd\ m–‘e obsahovat speci ln¡ znak "#". M¡sto tohoto
   znaku se dosad¡ naposledy editovan˜ text. T¡mto mechanismem lze dostat
   v˜sledky editace polo‘ek do v˜stupu, zvl ¨tˆ do environment promˆnn˜ch.
   Viz t‚‘ odst.3.9.

\bull {\tt CR+} zap¡n  a {\tt CR-} vyp¡n  automatick‚ ukon‡en¡ © dkov‚ho
  editoru, tzv. \uv{autoCR}. P©esnˆji, je-li \uv{autoCR} zapnuto,
  pak vlo‘en¡ krajn¡ho znaku (nejv¡ce vpravo) v~poli © dkov‚ho editoru
  nav¡c vyvol  reakci, jakoby by u‘ivatel potvrdil napsan˜ text
  kl vesou {\tt Enter}. Implicite je {\tt CR-}.


{\catcode`\~=12
\subsect 3.8 Glob ln¡ definice "~hotkeys", "~timeout", "~start", "~final", "~beep", "~mouse"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

}
\bull Definice "~hotkeys" m  tvar

\nobreak
\begtt
  ~hotkeys F<N>{<REAKCE>}, ...
\endtt
\noindent
kde <N> je ‡¡slo funk‡n¡ kl vesy (<N> je v~intervalu 1\dots10) a <REAKCE> je
seznam p©¡kaz–, kter‚ se provedou p©i zm ‡knut¡ p©¡slu¨n‚ funk‡n¡ kl vesy.
Jejich syntaxe a v˜znam jsou uvedeny v~p©edchoz¡m odstavci~3.7. V~definici
"~hotkeys" lze definovat reakci maxim lnˆ des¡ti funk‡n¡ch kl ves (jsou
oddˆleny ‡ rkami nebo mezerami). Pozor! Zde m–‘ete redefinovat v˜znam
kl vesy "F1", kter  je standardnˆ rezervovan  pro helpy. T¡m si znemo‘n¡te
mo‘nost konfigurovat helpy.

\bull Definice "~timeout" m  tvar\m "~timeout {"<N>, <REAKCE>"}"~, kde <N> je
cel‚ ‡¡slo, ud vaj¡c¡ d‚lku ‡asov‚ prodlevy v sekund ch. Pokud se nepracuje
s kl vesnic¡ a neh˜be se s my¨¡ po dobu, stanovenou ‡asem <N>,
provede se automaticky <REAKCE> (syntaxe je stejn , jako v p©edchoz¡m
p©¡padˆ). Neuvedete-li "~timeout" nebo je-li $<N> = 0$, program ‡as
prodlen¡ nepo‡¡t .

Nap©¡klad zhasnut¡ obrazovky po 30 vte©in ch
\uv{nicnedˆl n¡} lze konfigurovat t©eba takto:
\begtt
  ~timeout {30, *"scrblank">0}
\endtt
\noindent
Jednoduch˜ program {\tt scrblank} je sou‡ st¡ \CS\TeX{}u 94. Po jeho
vyvol n¡ zhasne obrazovka a po zm ‡knut¡ kl vesy se obnov¡ p–vodn¡ stav.

\medskip
Definice "~start" a "~final" mohou obsahovat jako parametry ve slo‘en˜ch
z vork ch stejn‚ p©¡kazy, jako v~definici reakce polo‘ky.

\bull
Definice "~start" uv d¡ seznam p©¡kaz–, kter‚ se provedou v~okam‘iku startu
programu. Je zde vhodn‚ pou‘¡t t©eba p©¡kazy  "!><N>"  na reset v˜stupn¡ch
soubor–.

Je-li v~definici "~start" uveden p©¡kaz skoku, program sko‡¡ na uvedenou
polo‘ku bez ohledu na obsah environment promˆnn‚ "MNU". Nen¡-li zde p©¡kaz
skoku uveden, provede se skok podle obsahu environment promˆnn‚ "MNU".

\bull
Definice "~final" uv d¡ seznam p©¡kaz–, kter‚ se provedou p©i bezchybn‚m
ukon‡en¡ programu v~okam‘iku, kdy jsou uzav©ena v¨echna okna. Nem  zde
proto smysl pou‘¡vat nˆkter‚ p©¡kazy. P©¡kaz skoku a p©¡kazy "*", "\", se
ignoruj¡.

V~okam‘iku prov dˆn¡ p©¡kaz– z~definice "~final" reprezentuje symbol "#"
‡¡slo naposledy aktivn¡ polo‘ky (textovˆ). Tento £daj se d  ulo‘it do nˆjak‚ho
z~v˜stupn¡ch soubor–. T¡m je umo‘nˆno nakonfigurovat n vrat programu do
stejn‚ situace, z~jak‚ byl opu¨tˆn.

\bull
Definice "~beep" m  tvar\m "~beep {"<FREKVENCE>"," <DELKA>"}"~,
kde <FREKVENCE> definuje frekvenci zvuku a <DELKA> je jeho d‚lka
v~milisekund ch. Takto definovan˜ zvuk se \uv{ozve} v‘dy, kdy‘ u‘ivatel
zm ‡kne kl vesu, kterou program neum¡ interpretovat. V~p©¡padˆ neuveden¡
definice "~beep" nebo je-li aspo¤ jeden parametr nulov˜, jsme bez zvuku
(co‘ je ‡asto lep¨¡).

\bull Je-li uvedena definice "~mouse" ve tvaru\m
"~mouse {"<REG-CX>"," <REG-DX>"}"~,
pak se p©ebarv¡ my¨¡ kurzor podle va¨eho p© n¡ vol n¡m syst‚mov‚ slu‘by\m
"int 33h"\m se vstupn¡mi hodnotami:\m "AX=10", "BX=0", "CX=<REG-CX>" (maska
AND), "DX=<REG-DX>" (maska XOR). Nen¡-li tato definice uvedena, bude my¨¡
kurzor ‡erven˜ s~b¡l˜m textem a to kdekoli (tj. barva kurzoru se nebude
mˆnit v~z vislosti na barvˆ pozad¡). Tato implicitn¡ hodnota odpov¡d 
definici\m "~mouse {255, 20224}", tj. maska AND je rovna 00FFh a propust¡
hodnotu znaku ale nikoli barevn˜ atribut a maska XOR m  hodnotu 4F00h
a zmˆn¡ barevn˜ atribut na ‡even‚ pozad¡ s~b¡l˜m textem (4Fh) a nech  beze
zmˆny hodnotu znaku. Bohu‘el, £daje nelze zad vat hexadecim lnˆ.

\medskip
V¨ech ¨est glob ln¡ch definic mus¡ p©edch zet prvn¡mu defini‡n¡mu © dku okna.
Jinde se ignoruj¡.

\subsect 3.9  Editovateln  polo‘ka, automatick  polo‘ka a zv˜raznˆn˜ text v~oknˆ
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\noindent{\bf Editovateln  polo‘ka} m  tvar:

\begtt
  |#<TEXT>|{<REAKCE>}
\endtt

kde

\bull <TEXT> -- je text, kter˜ se nab¡dne k~editov n¡.

\bull <REAKCE> -- je seznam p©¡kaz–, kter‚ se provedou po ukon‡en¡ editace
  kl vesou "Enter" (viz odst.~3.7). Stringy typu \dd<text>\dd, definovan‚
  v~tˆchto p©¡kazech, mohou obsahovat znak "#", za kter˜ se dopln¡ v˜sledek
  editace. Nap©¡klad \dd"copy # c:"\dd">0" znamen , ‘e v˜sledkem editace je
  pravdˆpodobnˆ n zev souboru a ‘e se bude kop¡rovat na disk "c:" .

\medskip
\vbox{
{\bf P©¡klad.} Konstrukce
\begtt
   |#[%file%8]|{"set FILE=#">2, \17}
\endtt

vytvo©¡ polo‘ku, kter  p©i editov n¡ nab¡dne v˜choz¡ obsah environment
promˆnn‚ "FILE" (d‚lky 8 znak–). Do souboru ‡. 2 se potom ulo‘¡ text\m
"set FILE="\m n sledovan˜ v˜sledkem editace. Nakonec se uzav©e st vaj¡c¡
okno a sko‡¡ se na polo‘ku ‡. 17. }

Pozn mka. U~editovateln‚ polo‘ky mus¡ za zav¡rac¡m znakem~"|" n sledovat
znak~"{"~, tak‘e v~p©¡padˆ pr zdn‚ definice reakce je nutn‚ ps t:~"{}".
Tento rozd¡l proti needitovateln‚ polo‘ce m  sv–j v˜znam: Zav¡rac¡ zna‡kou
pro nab¡zen˜ text je dvojznak~"|{", tak‘e v~nab¡zen‚m textu se m–‘e
vyskytnout znak~"|". To zvy¨uje \uv{blbuvzdornost} programu. Nab¡zen˜ text je
toti‘ vˆt¨inou promˆnn  veli‡ina -- v˜sledek z~posledn¡ editace. U‘ivateli
se poda©¡ v~takov‚m p©¡padˆ zhroutit program pouze tehdy, zap¡¨e-li
dvojznak~"|{" nebo dvojznak~"[%". Vezmeme-li v~£vahu, ‘e u‘ivatel m–‘e
vyslat z~kl vesnice zhruba sto znak–, je pravdˆpodobnost chybov‚ho
ukon‡en¡ programu zp–soben‚ho u‘ivatelem zhruba rovna 2/10000.

\goodbreak\medskip

\noindent{\bf Automatick  polo‘ka} m  tvar:

\begtt
  |^<TEXT>|
\endtt

\noindent
Jedn  se o~polo‘ku, u~kter‚ se  provede reakce (definovan  ve
slo‘en˜ch z vork ch za n¡) okam‘itˆ, jakmile se polo‘ka stane aktivn¡.
Sta‡¡ \uv{najet} ¨ipkami na tuto polo‘ku a program automaticky reaguje,
jakoby u‘ivatel zm ‡kl "Enter".

Definice reakce mus¡ b˜t specifikovan , tj. podobnˆ jako u~editovateln‚
polo‘ky text polo‘ky kon‡¡ dvojznakem~"|{".

Uvnit© textu polo‘ky se m–‘e vyskytovat symbol "^" pro zv˜raznˆn¡ p¡smene.

Pozor! Pokud automatick  polo‘ka otev¡r  nov‚ okno, ve kter‚m
nen¡ specifikovan  rodi‡ovsk  (£stupov ) polo‘ka, nebo je rodi‡ovsk 
polo‘ka shodn  s~automatickou polo‘kou, pak kl vesa "Esc"
je vy©azena z~funkce. —stup z~okna toti‘ zp–sob¡ uvedenou polo‘ku aktivn¡,
ale proto‘e ona je automatick , okam‘itˆ se zase toto okno otev©e.

Smysl pou‘it¡ automatick‚ polo‘ky m–‘e b˜t nap©¡klad v~helpech, pokud
p©i otev©en¡ r–zn˜ch oken helpu pot©ebujeme nab¡dnout stejnou nab¡dku dal¨¡
volby. Tuto nab¡dku nap©¡klad konfigurujeme do okna s~polo‘kou 1000 a do
v¨ech oken helpu uvedeme jednu neviditelnou, ale automatickou polo‘ku tvaru

\begtt
  |^|{1000}
\endtt

\noindent
Zabere to m‚nˆ m¡sta, ne‘ kop¡rov n¡ stejn‚ nab¡dky do ka‘d‚ho okna helpu.
Je t©eba ov¨em poznamenat, ‘e v~oknˆ s~polo‘kou 1000 mus¡ b˜t definov n
tzv. dvojn sobn˜ £stup. Nap©.:

\begtt
  | help1 |{\\1001}
  | help2 |{\\1002}
\endtt

\noindent
Jeden £stup toti‘ vede pouze do okna se zm¡nˆnou automatickou polo‘kou.

\medskip

\noindent{\bf Zv˜raznˆn˜ text} v~oknˆ lze zapsat ve tvaru:

\begtt
  |!<TEXT>|{}
\endtt

Text se p©ep¡¨e do okna v~barvˆ neaktivn¡ polo‘ky. Jedn  se p©itom 
o~oby‡ejn˜ text v~oknˆ, nikoli o~polo‘ku. Pou‘ije se v¨ude tam, kde
pot©ebujeme dvoubarevn˜ text v~oknˆ.

V¨imnˆme si, ‘e i zde je nutn‚ uv‚st zav¡rac¡ dvojznak "|{" ze stejn˜ch
d–vod–, jako tomu bylo u~editovateln‚ polo‘ky. P©edpokl d  se toti‘, ‘e
zv˜raznˆn˜ text m–‘e m¡t promˆnlivou hodnotu ur‡enou u‘ivatelem.


\sect 4. Chybov  hl ¨en¡ a omezen¡ programu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Program MNU prov d¡ p©i ‡ten¡ z~konfigura‡n¡ho souboru syntaktickou
kontrolu. P©i n¡ m–‘e nastat kolem ‡ty©iceti r–zn˜ch chyb, na kter‚ program
reaguje odpov¡daj¡c¡m chybov˜m hl ¨en¡m. Nen¡ t©eba zde uv dˆt seznam v¨ech
chybov˜ch hl ¨en¡, proto‘e nap©¡klad z~hl ¨en¡\m "'}' expected"\m asi snadno
zjist¡me, o~jakou chybu se jedn . Nav¡c program vyp¡¨e ‡¡slo © dku
konfigura‡n¡ho souboru, v~nˆm‘ byla chyba nalezena, a text chybn‚ho © dku
vyp¡¨e na obrazovku tak, ‘e v~m¡stˆ chyby je © dek \uv{roztr‘en} a zbytek
© dku pokra‡uje o~stupe¤ n¡‘ na obrazovce.

Pokud k~chybˆ do¨lo v~jin˜ okam‘ik, ne‘ p©i ‡ten¡ z~konfigura‡n¡ho souboru,
© dek s~‡¡slem se neobjev¡.

\medskip
Zastavme se nyn¡ jen u~tˆch chybov˜ch hl ¨en¡, kter  souvis¡ s~jist˜mi
omezen¡mi programu.

\bull
"! out of memory"\m
K~chybˆ dojde, pokud se otev¡r n¡m velk˜ch oken p©es sebe p©ekro‡¡ rozsah
datov‚ pamˆti programu, kter˜ ‡in¡ 64 kB. Tato pamˆŸ vysta‡¡ asi na 7
sou‡asnˆ otev©en˜ch oken p©es celou obrazovku, co‘ je bohatˆ dosta‡uj¡c¡,
proto‘e okna p©es celou obrazovku nen¡ vhodn‚ otev¡rat p©es sebe.

Se‡teme-li d‚lku k¢du programu s~velikost¡ ur‡enou pro jeho datov‚ struktury,
dostaneme 88 kB pamˆti, tedy prostor, kter˜ program zab¡r  v~opera‡n¡ pamˆti.
Toto je vhodn‚ vˆdˆt, spou¨t¡me-li z~programu © dkov‚ procesy, p©i nich‘
program neopou¨t¡ opera‡n¡ pamˆŸ.

\bull
"! maximal number of open windows is out"\m
Maxim ln¡ po‡et sou‡asnˆ otev©en˜ch oken je~25.

\bull
"! the head is too long"\m
Maxim ln¡ d‚lka textu z hlav¡ v~oknˆ je 35 znak–.

\bull
"! max 25 items in one window is allowed"\m
P©ekro‡en maxim ln¡ po‡et polo‘ek v~oknˆ. Vzhledem k~tomu, ‘e nem me v¡ce
© dk– na obrazovce a ‘e nen¡ vhodn‚ polo‘ky situovat do matice (program
v~takov‚m p©¡padˆ nereaguje na ovl d n¡ ¨ipkami zp–sobem, jak˜ bychom
o‡ek vali), nen¡ toto omezen¡ podstatn‚.

\bull
"! the file number in interval 2..9 expected"\m
Po‡et vstupn¡ch a v˜stupn¡ch soubor– je omezen na~8 (nepo‡¡t n konfigura‡n¡
soubor).

\bull
"! stack of input files overflow"\m
Maxim ln¡ po‡et do sebe vno©en˜ch vstupn¡ch soubor– (tj. substitu‡n¡
konstrukce je nahrazena textem souboru se substitu‡n¡ konstrukc¡ atd.)
je omezen na~8.

\bull
"! the SIZE parameter is too long"\m
Parametr <DELKA> v~substitu‡n¡ konstrukci je tak velk˜, ‘e po substituci je
p©ekro‡ena maxim ln¡ d‚lka vstupn¡ho © dku, kter  ‡in¡ 255 znak–.


\sect 5. N vrh konfigurace CS\TeX u~s~programem MNU
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Tato dokumentace k~programu, jako sou‡ st bal¡ku \CS\TeX, m  kapitolu 5
podstatnˆ stru‡nˆj¨¡, ne‘ origin ln¡ dokumentace. Funguj¡c¡ \CS\TeX\
je toti‘ nejvhodnˆj¨¡m p©¡kladem pou‘it¡ programu MNU.

V~konfiguraci \CS\TeX u, kterou nab¡z¡ \CS TUG, je program MNU pou‘it
s~konfigura‡n¡m souborem "cfg.doc" a ©¡d¡c¡ d vkou "texbat.bat". D le zde
najdete konfigura‡n¡ soubor "sorry.mnu", pomoc¡ nˆho‘ program MNU vyjad©uje
l¡tost nad t¡m, ‘e po‘adovan˜ software nen¡ instalov n a kone‡nˆ soubor
"inibat.mnu", kter˜ spole‡nˆ se souborem "inibat.bat" zabezpe‡uj¡ snadnou
inicializaci \TeX u~(generov n¡ form t–). Dokumentace k~t‚to konfiguraci je
v~souboru "cfg.doc".

D le je program MNU pou‘it jako sou‡ st instala‡n¡ch d vek \CS\TeX u.
Zde najdete na disketˆ "CSTeX-1" konfigura‡n¡ soubor "i1.mnu", kter˜
ohl s¡ start instalace a zept  se na disk a cestu, kam instalovat \CS\TeX.
D le konfigura‡n¡ soubor "i2.mnu", pomoc¡ nˆho‘ probˆhne cel  dotazovac¡
f ze instalace, a kone‡nˆ soubor "i3.mnu", v~nˆm‘ jsou naps ny r–zn‚
pomocn‚ hl ¨ky, pou‘it‚ p©i instalaci. Cel  instalace je ©¡zena t©emi
hlavn¡mi d vkami "krok1.bat", "krok2.bat" a "krok3.bat". Podrobn 
dokumentace k~jednotliv˜m d vk m je v~souboru "install.doc".

Proto‘e zobrazov n¡ u‘ivatelsk‚ho \uv{menu} p©i p©¡pravˆ dokumentu je
©¡zeno hlavnˆ konfigura‡n¡m souborem "cfg.mnu", pod¡vejme se nyn¡ na nˆj
podrobnˆji. Formou ot zek a odpovˆd¡ se pozastav¡me nad nˆkter˜mi obraty
v~tomto souboru. Zamˆ©¡me se na ty ‡ sti souboru, kter‚ po studiu
dokumentace nemus¡ b˜t £plnˆ z©ejm‚.

\quest Kde hledat polo‘ku 100 definovanou v~© dku: " ^ 100 \"

\answ Tato polo‘ka neexistuje. Jedn  se o~p©¡pad, kdy je v~oknˆ m‚nˆ polo‘ek
   (zde nula polo‘ek) ne‘ je stanoveno v~defini‡n¡m © dku okna. Okno se p©i
   vol n¡ polo‘ky otev©e, ale ‘ dn  polo‘ka nebude aktivn¡. Okno je zde
   vol no jako rodi‡ovsk‚ okno oknem se z kladn¡m menu. Stisknut¡ kl vesy
   "Esc" v~okam‘iku, kdy je rozvinuto jen z kladn¡ menu nezp–sob¡ p©echod
   na neexistuj¡c¡ polo‘ku 100, proto‘e okno je definov no jako automaticky
   zav¡rateln‚ (znak "\").

\quest Pro‡ ve\m "Formats menu"\m je ulo‘en v˜sledek v˜bˆru (nap©. "amstex") nejen
   do p©¡slu¨n‚ environment promˆnn‚, ale i do souboru 2 v~podobˆ\m
   \dd"set FMT=amstex"\dd">2".

\answ  P©¡kaz\m \dd"amstex"\dd">FMT"\m m  lok ln¡ charakter v~r mci programu
   MNU a proto‘e n sleduje vymaz n¡ v¨ech oken (p©¡kaz "*") a skok na
   polo‘ku 61, obnov¡ se t‚‘ obsah okna s~neexistuj¡c¡ polo‘kou 100, v~nˆm‘
   je pro u‘ivatele informace o~vybran‚m form tu. Naproti tomu p©¡kaz\m
   \dd"set FMT=amstex"\dd">2"\m umo‘n¡ p©edat informaci o~vybran‚m form tu
   ©¡d¡c¡ d vce prost©ednictv¡m souboru 2, tj. souboru "envir.bat".
   Nav¡c se zde kromˆ promˆnn‚ "FMT" du lnˆ nastav¡ i promˆnn  "FFMT",
   kter  ovlivn¡ vzhled polo‘ky 32: "TEX/TEX". Jistˆ jste si v¨imli, ‘e tato
   polo‘ka m  vzhled z visl˜ na pou‘it‚m form tu.

\quest  Jak m m rozumˆt definic¡m polo‘ek v~"Diskette menu".

\answ  Environment promˆnn  "AR" ozna‡uje smˆr kopie (z nebo na disk) a
   promˆnn  "D" je p¡smeno vybran‚ ¨achty pro disketu (buƒ A~nebo B). 
   S~obˆma promˆnn˜ma d vka bude pracovat a proto jsou hodnoty ulo‘eny do
   souboru "envir.bat" ve tvaru p©¡kazu "set". Hodnota "D" je ulo‘ena nav¡c
   lok lnˆ, proto‘e bude pou‘ita p©i otev©en¡ okna s~polo‘kou 105 (je tam
   promˆnliv˜ text tvaru: "Insert diskette to drive [%D%]" ).

\quest  U~\uv{Z vˆre‡n‚ ot zky} taky nesouhlas¡ po‡et ‡¡sel v~definici okna
   s~po‡tem polo‘ek. Na rozd¡l od okna 100 je tomu tentokr t naopak -- m‚nˆ
   ‡¡sel ne‘ polo‘ek.

\answ  Na polo‘ku 0 (tj. "Yes") se sko‡¡ v~okam‘iku zav©en¡ v¨ech oken, tedy
   p©i zm ‡knut¡ "Esc" v~hlavn¡m menu. Polo‘ka "No" nemus¡ m¡t ‡¡slo,
   proto‘e z~n¡ program nevystupuje, ale otev¡r  okno s~polo‘kou~3.

\quest  Jak za©¡dit z vˆre‡nou ot zku, v~n¡‘ se implicitnˆ nab¡dne "No".

\answ  V~definici okna nap¡¨eme nap©.: " ^ 1, 0 "; a v~©¡d¡c¡ d vce zaru‡¡me
   pomoc¡ p©¡kaz– "if errorlevel", ‘e se d vka ukon‡¡ v~p©¡padˆ "errorcode=1".

\quest  Pro‡ v\m "Print menu"\m se vyskytuj¡ polo‘ky se stejn˜m ‡¡slem ?

\answ   Polo‘ky vracej¡ stejn‚ ‡¡slo do v˜stupn¡ho error-k¢du programu.
   To nen¡ nic neobvykl‚ho. D vka "prints.bat" toti‘ vˆtv¡ svou ‡innost
   nejen podle "errorlevel", podle tak‚ podle hodnot promˆnn˜ch "DPI" a
   "MARK". Tyto hodnoty se ulo‘¡ v~z vislosti na pou‘it‚ polo‘ce.

\quest  Zd  se tedy, ‘e lze ©¡d¡c¡ d vku vˆtvit nejen podle error-k¢du, ale
    i podle hodnot environmentu.

\answ  Ano. Dovedeno do d–sledku se v–bec nemus¡ vˆtven¡ podle error-k¢du
    pou‘¡t. Sta‡¡ v~d vce napsat:
\begtt
    mnu config.mnu envir.bat
    call envir
    goto %LABEL%
\endtt
\hangindent\parindent
    a v~souboru "config.mnu" se postarat o~ulo‘en¡ hodnoty "LABEL"
    prost©ednictv¡m souboru "envir.bat".

\quest Pro‡ se p©i zad v n¡ n zv– soubor– ("File names") opou¨t¡ program
   MNU . U‘ivatel–m se m–‘e zd t odezva v~tomto m¡stˆ zbyte‡nˆ dlouh .

\answ  Pokud je odesl n pr zdn˜ string, vyvol  se extern¡ program PICKFILE
   pro snadn‚ vybr n¡ souboru z~nab¡dky soubor–.

\quest Ne¨lo by nab¡dku soubor– za©adit jako integrovanou sou‡ st programu
   MNU ?

\answ  Ano, v¨echno by ¨lo. Ostatnˆ taky by ¨lo program MNU zcela p©edˆlat.

\quest  Pro‡ nap©¡klad v polo‘ce\m "Print - Laser"\m se do souboru
   "envir.bat" ukl d  © dek
\begtt
    "set MARK=[%OUTHP%]">2
\endtt
    bez po‘adavku na duplikov n¡ procent?

\answ  Hodnota promˆnn‚ "OUTHP" m–‘e obsahovat text tvaru\m "%MAIN%"~.
    P©i volbˆ polo‘ky pro tisk je t©eba substituovat za tento text
    aktu ln¡ hodnotu promˆnn‚ "MAIN". To se provede v~d vce "envir.bat"
    pouze tehdy, kdy‘ nebudeme duplikovat procenta.

\quest  V~definici editovateln‚ polo‘ky v~"METAFONT parameters" je chyba!
   V~© dku
\begtt
    METAFONT  |#[%4% 31, 1, 66]|{!>4, "[%4% 1, 1, 30]#">4}
\endtt
\hangindent\parindent
   se nejprve na‡te od 31. znaku do konce © dku text v~d‚lce 76 znak– ze
   souboru 4 ("mfbat.bat") a potom se soubor resetuje p©¡kazem "!>4".
   Tak‘e konstrukce "[%4% 1, 1, 30]" mus¡ vr tit z~resetovan‚ho souboru
   pr zdn˜ string a nikoli prvn¡ch 30 znak– souboru, jak zam˜¨l¡ autor t‚to
   definice polo‘ky.

\answ  Blahop©eji. Pokud jste tuto nesrovnalost sami odhalili, je vidˆt, ‘e
   jste pozorn˜mi ‡ten ©i dokumentace. Tam se toti‘ nezd–raz¤uje okam‘ik,
   kdy se prov d¡ substituce v~konstrukc¡ch "[%..]". K~substituci doch z¡
   bˆhem otev©en¡ okna a ve¨ker˜ text souvisej¡c¡ s~otev©en˜m oknem se
   podr‘¡ v~substituovan‚m stavu v~pamˆti. P©¡kazy, kter‚ definuj¡ reakci
   polo‘ky se vykonaj¡ a‘ pot‚, co dojde k~v˜bˆru polo‘ky kl vesou "Enter".
   Tyto p©¡kazy se u‘ ne‡tou ze souboru, ale z~pamˆti, kde jsou substituce
   d vno provedeny. Proto to funguje tak, jak m .


\sect 6. Zmˆny vzhledem k~verzi, ¨¡©en‚ na konferenci Euro\TeX'92
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Verze z~30.1.1993 se od verze z~konference (15.9.1992) li¨¡ v~n sleduj¡c¡ch
bodech:

\begitems
* Jsou opraveny chyby, kter‚ se mi poda©ilo objevit.
* Z~editovateln‚ polo‘ky lze sk kat na n sleduj¡c¡ a p©edch zej¡c¡ polo‘ku
  pomoc¡ ¨ipek nahoru a dolu, pokud je¨tˆ neza‡ala editace.
* Program p©i startu nab¡dne kurzor my¨i v~druh‚ pozici v˜choz¡ aktivn¡
  polo‘ky a nikoli uprost©ed obrazovky. Reagoval jsem na n vrh kol. W gnera.
* Lze konfigurovat tzv. \uv{hork‚} kl vesy (viz definice "~hotkeys"
  v~odst.~3.8). Reagoval jsem na n vrh koleg– z~konference.
* Mo‘nost ukon‡en¡ programu s~explicite zadan˜m error-k¢dem, nez visl˜m na
  ‡¡sle polo‘ky (p©¡kaz "$" v~odst.~3.7).
* Nyn¡ (s~v˜jimkou okna helpu) neexistuj¡ polo‘ky bez ‡¡sla. Viz odst.~3.5.
* Mo‘nost ulo‘en¡ © dku s~duplikovan˜mi procenty (viz pozn mka
  o p©¡kazu ">%" v~odstavci~3.7).
* Mo‘nost konfigurace tzv. \uv{automatick‚ polo‘ky} (viz odst.~3.9).
\enditems

1.~12.~1993
\begitems
* Opravena nespr vn  lokalizace editovateln‚ polo‘ky v oknˆ bez r me‡ku.
* Za©azena glob ln¡ definice "~timeout" (viz odst.~3.8).
\enditems

1.~6.~1995
\begitems
* Opravena chyba © dkov‚ho editoru -- neumˆl p©ijmout znak s k¢dem 128.
\enditems

5.~7.~1995
\begitems
* Zaveden re‘im \uv{autoCR} v © dkov‚m editoru a povel {\tt CR+} a {\tt CR-}
  (viz odst.~3.7).
\enditems

7.~9.~1995
\begitems
* Opraveno nespr vn‚ chov n¡ prav‚ho tla‡¡tka my¨i na © dkov‚m editoru
  (chyba byla d–sledkem z sahu z 1. 6. 1995).
\enditems


V¨echny zmˆny, t˜kaj¡c¡ se syntaxe konfigura‡n¡ho souboru, jsou provedeny
tak, aby konfigura‡n¡ soubory napsan‚ pod starou verz¡ programu pracovaly
zcela stejnˆ i pod novou verz¡.

\bye

