\hsize11cm
\vsize16cm
\emergencystretch=1em
\widowpenalty=10000

\font\mflogo=logo10  % font pro METAFONT logo
\font\petit=cstt8

\chyph
\hyphenation{funk-‡n¡ DOSu}

\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}
\def\AMS{$\cal A\kern-.166em\lower.5ex\hbox{$\cal M$}\kern-.075em S$}
\def\mf{{\mflogo META}\-{\mflogo FONT}}

\def \uv#1{\vbox to0pt{\kern-.33ex\hbox{''}\vss}\kern-.1ex#1\kern-.1ex``}

\catcode`\"13
\def"{\leavevmode\hbox\bgroup\let"=\egroup\setverb\tt}
\def\setverb{\def\do##1{\catcode`##1=12}\dospecials\obeyspaces}
\def\begtt{\par\medskip\hrule\nobreak\smallskip
  \bgroup\def\par{\null\endgraf\penalty1001\noindent}\setverb
   \catcode`\"12\obeylines\baselineskip=.8\baselineskip\startverb}
{\catcode`|=0 \catcode`\\=12 |gdef|startverb#1\endtt{|petit #1|egroup
  |medskip|hrule|medskip}}
{\obeyspaces\gdef {\ }}

\def\begitems{\medskip\bgroup\catcode`\*=13 \narrower\narrower}
\def\enditems{\par\egroup\medskip}
{\catcode`\*=13 \gdef*{\par\noindent\llap{$\bullet$\ }\ignorespaces}}

\def\title#1\par{\noindent{\bf#1}\vskip1cm}
\def\sub#1\par{\bigskip\noindent{\bf#1}\par\nobreak\medskip}


\title Kouzla s~programem MNU
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Do nov‚ho bal¡ku \CS\TeX\ byl zahrnut program MNU, kter˜ ©¡d¡ re‘im
nab¡dek. Nab¡dka je za pomoc¡ tohoto programu plnˆ konfigurovateln .
V~r mci \uv{reklamac¡ a p©ipom¡nek} k~\CS\TeX{}u zaznˆlo nˆkolik n vrh– na
m¡rnou £pravu konfigurace nab¡dek. Rozhodl jsem se ‘ dn‚mu z~tˆchto n vrh–
nevyhovˆt a do inovovan‚ verze zmˆny v~t‚to oblasti nezan ¨et. M¡sto toho
chci zde v~tomto ‡l nku uk zat, jak se takov‚ zmˆny dˆlaj¡. Ka‘d˜ si je
m–‘e udˆlat s m podle sv˜ch p©edstav. Za‡nu nejprve popisem v˜voje (nebo
sp¡¨e \uv{nev˜voje}) vlastn¡ho programu MNU.

Zhruba p©ed dvˆma lety jsem p©i pohledu na nab¡dkov˜ program, kter˜ byl
tehdy zahrnut˜ do instalace \TeX{}u, do¨el k~z vˆru, ‘e by st lo za to
napsat nˆco jin‚ho. Nejprve jsem si zformuloval, co v¨e by program mˆl umˆt
-- tj. napsal jsem dokumentaci k~neexistuj¡c¡mu programu.%
\footnote{${}^1$}{Mus¡m p©iznat, ‘e tento obr cen˜ postup -- nejprve
dokumentace a potom teprve program, se mi osvˆd‡il i p©i tvorbˆ jin‚ho
software a v¨em jej v©ele doporu‡uji. Je-li toti‘ jasnˆ zformulovan 
my¨lenka, je pak dal¨¡ programovac¡ pr ce vˆt¨inou z le‘itost¡ pro
\uv{cvi‡enou programovac¡ opici}.}
Pak jsem vˆc konzultoval s~tehdej¨¡m v˜borem \CS TUGu a po p©edbˆ‘n‚m
souhlasu, ‘e by takov˜ program mohl b˜t u‘ite‡n˜, jsem se pustil do d¡la.
Tak vznikl program MNU. S~prvn¡ verz¡ jsem byl hotov do za‡ tku
Euro\TeX{}u-92, kde jsem ji t‚‘ zve©ejnil. Pak jsem je¨tˆ zpracoval nˆkter‚
n vrhy a p©ipom¡nky a v˜sledkem byla verze z~ledna r.~1993, kterou u‘
pova‘uji za definitivn¡. Tato verze je za©azena do bal¡ku \CS\TeX.

Za cel˜ rok provozu programu MNU v~nov‚ instalaci \CS\TeX{}u jsem
nezaznamenal k~tomuto programu jedinou p©ipom¡nku nebo reklamaci a to mˆ
vede k~rozhodnut¡ d le program pokud mo‘no nemˆnit. M–j n zor je, ‘e velk˜m
p©¡nosem ka‘d‚ho programu je jeho st lost (viz nap©¡klad program \TeX),
proto‘e u‘ivatel se nemus¡ topit v~d‘ungli nejr–znˆj¨¡ch ‡¡sel verz¡ a b˜t
neust le ve st©ehu, zda nep©i¨el n hodou o~nejnovˆj¨¡ verzi a zda ty nov‚
verze je¨tˆ bude umˆt pou‘¡vat.

Samoz©ejmˆ svˆdom¡ mi nedovol¡ nechat v~programu objeven‚ chyby. A‡koli
jsem nedostal zpr vu o~nalezen¡ chyby od ‘ dn‚ho u‘ivatele, s m jsem za
ten rok jednu chybu objevil. Jedn  se o~nespr vnou lokalizaci aktivn¡
editovan‚ polo‘ky v~p©¡padˆ, ‘e se tato polo‘ka nal‚z  v~oknˆ bez r mu.
P©i opravˆ t‚to chyby jsem program obohatil o~jednu mali‡kost -- schopnost
prov‚st definovanou akci po dan‚m ‡asov‚m limitu \uv{nic-nedˆl n¡}
(d  se nakonfigurovat nap©¡klad zhasnut¡ obrazovky po dan‚m ‡ase).
Inovovan˜ program jsem za©adil do \CS\TeX{}u 94 a vˆ©¡m, ‘e to byly
skute‡nˆ posledn¡ £pravy programu.

Program MNU m  na rozd¡l od programu \TeX\ omezenou ‘ivotnost.
Program toti‘ ryze £‡elovˆ roz¨i©uje mo‘nosti \uv{d vkov‚ho programov n¡}
pod opera‡n¡m syst‚mem DOS. A‡koli je DOS velmi roz¨¡©en, nevˆ¨t¡m
mu dlouhou budoucnost. Vˆt¨¡ vyhl¡dky do budoucna maj¡ syst‚my, v~jejich‘
j dru je ©e¨ena problematika paraleln¡ho zpracov n¡ proces–.%
\footnote{${}^2$}{Nem m na mysli DOSovskou nadstavbu WINDOWS. Ta nen¡ p©¡li¨
vyda©en˜m pokusem d t DOSu n plast ve formˆ vize z~paraleln¡ho zpracov n¡
proces–. P©itom z–st v  jen u~t‚ vize a skutek utek'.}
V~sou‡asn‚ dobˆ jsou u‘ i stoln¡ po‡¡ta‡e pro tyto £‡ely dostate‡nˆ v˜konn‚.
Pro u‘ivatele \TeX{}u jsou syst‚my s~v¡ce procesy p©¡mo nutnost¡, neboŸ
vypisovat si pozn mky na pap¡r v~okam‘iku, kdy m m na obrazovce \uv{View},
abych mohl tyto pozn mky pou‘¡t hned, jakmile se vr t¡m do editoru,
to je metoda, kter‚ se budeme zanedlouho (douf m) pouze sm t.
V~DOSu p©itom nen¡ p©¡li¨ mnoho jin˜ch mo‘nost¡.%
\footnote{${}^3$}{Ani rezidentn¡ editory typu Side Kick apod. p©¡li¨
nepomohou. Jsou s~nimi sp¡¨ probl‚my -- motaj¡ grafiku prohl¡‘e‡e a pamˆŸ
po‡¡ta‡e a jejich u‘ite‡nost je sporn .}

Dnes bych program MNU asi naprogramoval jinak a mo‘n  l‚pe (nap©¡klad jazyk
konfigura‡n¡ho souboru by nebyl tak kryptick˜), ale z~d–vod– uveden˜ch
v˜¨e nebudu program d le rozv¡jet. DOS ale zat¡m u~n s vl dne, a proto si
mysl¡m, ‘e nˆkter‚ triky, kter‚ se daj¡ s~programem MNU a s~DOSem prov dˆt
a kter‚ uv d¡m v~tomto ‡l nku, m–‘e je¨tˆ plno lid¡ vyu‘¡t.

Program MNU je \uv{in public domain}. M–‘ete jej z¡skat ve dvou podob ch
(v~obou p©¡padech se jedn  o~naprosto stejn˜ program). Prvn¡ mo‘nost¡ je
z¡skat jej jako samostatn˜ bal¡k (ftp z~arch¡vu {\tt ftp.tex.ac.uk},
adres © {\tt support}). Zde najdete anglickou dokumentaci a dva p©¡klady
pou‘it¡ programu. Oba p©¡klady pracuj¡ pouze \uv{teoreticky}, tj. v~m¡stˆ
vol n¡ zvolen‚ho programu z~nab¡dky se ve skute‡nosti neuskute‡n¡ nic.
Prvn¡ p©¡klad je jednoduch˜ a druh˜ demonstruje konfiguraci \CS\TeX{}u.

Program m–‘ete tak‚ z¡skat jako sou‡ st \CS\TeX{}u. Naleznete zde ‡eskou
dokumentaci k~programu (v~souboru "\doc\programs\mnu.tex") a rovnˆ‘ tu
najdete dva p©¡klady -- v~tomto p©¡padˆ ov¨em plnˆ funk‡n¡. Prvn¡m
p©¡kladem je samotn  konfigurace nab¡dek v~\CS\TeX{}u a druh˜m instala‡n¡
program umo‘¤uj¡c¡ pohodlnou instalaci \CS\TeX{}u z~disket. Dokumentace
k~prvn¡mu p©¡kladu je ulo‘ena v~souboru "\doc\cfg.doc" a k~druh‚mu
p©¡kladu v~souboru "install.doc" na prvn¡ instala‡n¡ disketˆ. Nechci zde
opakovat, co je ©e‡eno v~dokumentaci. Proto se radˆji vˆnujme jednotliv˜m
uk zk m. Za‡neme t¡m nejjednodu¨¨¡m.

\sub Jak p©idat novou polo‘ku do syst‚mu nab¡dek?

Z~ve©ejn˜ch arch¡v– jsme nap©¡klad z¡skali program GhostScript a chceme ho
za©adit do syst‚mu nab¡dek \CS\TeX{}u tak, aby se jeho vyvol n¡m spustila
grafick  interpretace PostScriptov‚ho souboru na obrazovce. Polo‘ku nazveme
t©eba "GS-View" a za©ad¡me ji do ok‚nka "Others". Nejprve provedeme zmˆny
v~souboru "\cfg\ram\cfg.mnu":

\begtt
^131  132  133  134  135  136  [37]  ; ******* Others *******
~param {31, 16, 14, 8}
| DVI-O^ut    |
| DVIP^S      |
| MakeI^ndex  |
| B^ibTeX     |
| T^eXCad     |
| G^S-View    |
\endtt

Pro polo‘ku "GS-View" jsme zvolili ‡¡slo 136 (viz prvn¡ © dek) a v˜¨ku
ok‚nka "Others" jsme o~jedni‡ku zvˆt¨ili (viz druh˜ © dek, ‡¡slo 8).
Text nov‚ polo‘ky je naps n na posledn¡m © dku. Volba ‡¡sla polo‘ky je
tro¨ku problematick  z le‘itost. Je t©eba nejprve zjistit, zda zvolen‚
‡¡slo nekoliduje s~ji‘ existuj¡c¡mi polo‘kami -- seznam v¨ech polo‘ek
najdeme v~souboru "cfg.doc". Pokud chceme s~‡¡slem polo‘ky pracovat
v~©¡dic¡ d vce prost©ednictv¡m error-k¢du, jsme nav¡c omezeni ‡¡slem 255.
Jistou nev˜hodou programu MNU tedy je, ‘e nelze pro polo‘ky pou‘¡t
symbolick˜ch n zv–.

P©i vyvol n¡ programu MNU na zmˆnˆn˜ soubor "cfg.mnu" se zmˆn¡ ok‚nko
"Others". P©edev¨¡m je o~jeden © dek vˆt¨¡ a v~tomto © dku se nab¡z¡
polo‘ka "GS-View". Po jej¡m potvrzen¡ vr t¡ program MNU d vce error-k¢d ‡¡slo
136. Pokud jsme v~©¡dic¡ch d vk ch neudˆlali ‘ dn‚ zmˆny, vyvol  se program
stejn˜, jako p©i volbˆ polo‘ky "TeXCad" (error-k¢d nejbli‘¨¡ ni‘¨¡; zde
‡.~135). K~tomu, abychom spustili jin˜ program, pot©ebujeme je¨tˆ editovat
d vku "\cfg\others.bat":

\begtt
if errorlevel 136 goto gsview
if errorlevel 135 goto texcad
if errorlevel 134 goto bibtex
...
:gsview
  %TEXDIR%\gs -I%TEXDIR%\gslib %MAIN%.ps > gs.mes
  goto end
\endtt

V~t‚to d vce jsme p©idali skok na n vˆ¨t¡ ":gsview" (prvn¡ © dek d vky) a
pak jsme p©idali © dky, t˜kaj¡c¡ se na¨eho nov‚ho programu. Zde se konkr‚tnˆ
p©edpokl d , ‘e program "gs.exe" je ulo‘en v~adres ©i "%TEXDIR%", tj.
v~\uv{hlavn¡m} adres ©i \CS\TeX{}u. Knihovn¡ soubory pro program jsou
v~podadres ©i "gslib" a vstupem pro program je soubor s~n zvem hlavn¡ho
souboru a s~p©¡ponou "ps". P©esmˆrov n¡ textov‚ho v˜stupu je provedeno
proto, ‘e program jinak hloupˆ m¡ch  grafick˜ v˜stup se sv˜mi textov˜mi
pozn mkami a je to ru¨iv‚.

V~na¨em p©¡kladˆ jsme vyu‘ili toho, ‘e v~hlavn¡ ©¡dic¡ d vce "texbat.bat"
je zaneseno vyvol n¡ d vky "others.bat" v~p©¡padˆ, ‘e je error-k¢d 
v~intervalu $\langle131,140\rangle$ (viz p©¡kaz {\tt if errorlevel 131
goto others} v~d vce "texbat.bat"). V~p©¡padˆ, ‘e jsme zvolili jin‚ ‡¡slo
polo‘ky, mus¡me vˆt¨inou editovat p©¡mo d vku "texbat.bat".

\sub P©id me nov‚ ok‚nko

Rozhodli jsme se nap©¡klad usnadnit u‘ivatel–m \uv{£tˆk} z~nab¡dkov‚ho
syst‚mu p©id n¡m polo‘ky "Quit" do nej‡astˆji pou‘¡van‚ho ok‚nka "TeX".
U‘ivatel nyn¡ m–‘e rovnou odej¡t zm ‡knut¡m kl vesy Q. Aby to ale nemˆl tak
jednoduch‚, nechŸ se po volbˆ t‚to polo‘ky zobraz¡ nov‚ ok‚nko, kter‚
nab¡dne dvˆ mo‘nosti -- buƒ odej¡t z~\TeX{}ovsk‚ho syst‚mu za sou‡asn‚ho
smaz n¡ \uv{nepot©ebn˜ch} soubor–,  (tj. "dvi", "bak", "aux" apod.), nebo
odej¡t bez maz n¡ tˆchto soubor–. V~souboru "cfg.mnu" provedeme £pravy
n sleduj¡c¡m zp–sobem (srovnejte s~origin ln¡m obsahem souboru).

\begtt
^31, 32, 33, 34, 34, 35, 36, 37, 38, 39, 30, 330 [3] <21, 41>; *TeX menu*
~param  {19, 7, 15, 16}
| E^dit        |
| [%FFMT%]        |
| V^iew        |
...
| C^StoCS...   |{141}
| Q^uit...     |{331}

^331 332 [330] ; **** Quit menu ****
~param  {31, 20, 23, 4}
| Q^uit plus clear dvi |{$25}
| Quit -- L^eave dvi   |{$29}
\endtt

Na prvn¡m © dku uk zky jsme p©idali ‡¡slo 330, co‘ bude ‡¡slo nov‚ polo‘ky.
Na druh‚m © dku jsme zvˆt¨ili v˜¨ku ok‚nka "TeX" na 16 a d le jsme p©idali
text nov‚ polo‘ky, viz © dek "Q^uit". Na tomto © dku je vidˆt, ‘e
volba polo‘ky "Quit" neukon‡¡ syst‚m nab¡dek, ale zp–sob¡ otev©en¡ okna 
s~polo‘kou 331, p©i‡em‘ tato polo‘ka bude aktivn¡.

Ok‚nko s~polo‘kou 331 jsme definovali na posledn¡ch ‡ty©ech © dc¡ch uk zky.
Nejprve jsme napsali © dek s~‡¡sly polo‘ek: 331 a 332. Na tomto © dku je
je¨tˆ v~hranat‚ z vorce ‡¡slo polo‘ky, kam se program vr t¡ v~p©¡padˆ
stisku kl vesy "Esc". V~na¨em p©¡padˆ se jedn  o~polo‘ku, z~n¡‘ je na¨e
ok‚nko vyvol no. To m  svoji logiku, ov¨em daj¡ se udˆlat vˆci, kter‚
logiku nemaj¡.

Nov‚ ok‚nko obsahuje dvˆ polo‘ky s~textem {\tt Quit plus clear dvi} a {\tt
Quit -- Leave dvi}. Prvn¡ polo‘ka vrac¡ k¢d 25 (viz "$25"), co‘ zat¡m d vka
"texbat.bat" neum¡ spr vnˆ zpracovat a budeme se t¡m za chv¡li zab˜vat.
Volbou druh‚ polo‘ky se ukon‡¡ program MNU s~k¢dem 29, co‘ je k¢d, kter˜
odpov¡d  po‘adavku ukon‡en¡ syst‚mu nab¡dek (viz soubor "texbat.bat").

Poznamenejme je¨tˆ, ‘e je velice v˜hodn‚ mˆnit konfigura‡n¡ soubor MNU
jakoby rovnou ze syst‚mu nab¡dek vol n¡m editoru. Po ukon‡en¡ editoru
okam‘itˆ vid¡me v¨echny sp chan‚ zmˆny, tak‘e v˜sledn˜ vzhled a um¡stˆn¡
ok‚nek m–‘eme pr–bˆ‘nˆ \uv{ladit}. Takov‚ £pravy mus¡me ale dˆlat v~kopii
souboru "cfg.mnu", kterou obvykle najdeme na RAM disku. Pr vˆ tato kopie je
toti‘ \uv{v~akci}. Po ukon‡en¡ pr ce pak nesm¡me zapomenout na¨e zmˆny
ulo‘it do souboru na fyzick‚m disku, proto‘e na RAM disku n m po vypnut¡
po‡¡ta‡e nebudou p©¡li¨ platn‚. Nav¡c, pokud jsme konfigurovali \CS\TeX{}
v~dobˆ instalace tak, ‘e po ukon‡en¡ syst‚mu nab¡dek se vyma‘ou pomocn‚
soubory z~RAM disku, mus¡me b˜t nanejv˜¨ opatrn¡ a syst‚m nab¡dek
neukon‡ovat p©ed ulo‘en¡m zmˆn na disk.

Nyn¡ ukon‡¡me na¨i pr ci editov n¡m souboru "texbat.bat". Zmˆny mohou
vypadat n sledovnˆ:

\begtt
...
if errorlevel  26 goto shell
if errorlevel  25 goto clearq
if errorlevel  24 goto clear
...
:clearq
  for %%p in (%CLFILES%) do del %MAIN%.%%p
  if exist %WORK%.bak del %WORK%.bak
  goto quit
\endtt

V~t‚to uk zce jsme zavedli mezi p©¡kazy {\tt if errorlevel} odskok na
n vˆ¨t¡ "clearq" p©i k¢du 25. V~m¡stˆ tohoto n vˆ¨t¡ je realizov no maz n¡
soubor– s~p©¡ponami obsa‘en˜mi v~promˆnn‚ "CLFILES". Je vhodn‚ do
inicializa‡n¡ho souboru "texset.bat" za©adit naplnˆn¡ t‚to promˆnn‚ t©eba
takto:

\begtt
set CLFILES=dvi bak aux
\endtt

\noindent
a za©adit obsah promˆnn‚ "CLFILES" do okna "Envir", aby si rozsah a mno‘stv¡
mazan˜ch soubor– mohl u‘ivatel s m nastavit. V˜¨ku ok‚nka "Envir" je proto
nutn‚ zvˆt¨it o~jeden © dek a p©idat tam editovatelnou polo‘ku. Jak se to
dˆl , nebudeme znova opakovat.

Poznamenejme je¨tˆ, ‘e chceme-li b˜t d–sledn¡, mˆli bychom se zab˜vat i
texty help– pro na¨e nov‚ polo‘ky. Nap©¡klad pro v¨echny t©i nov‚ polo‘ky
330, 331 a 332 p©iprav¡me spole‡n˜ text helpu a za©ad¡me jej nˆkam na konec
souboru "mnu.cfg". Takov˜ text m–‘e vypadat n sledovnˆ.

{\let\oldsetverb=\setverb \def\setverb{\oldsetverb\catcode`\~=13}
\begtt
^(330, 331, 332)
 Quit plus clear dvi
 ===================
 Po volbˆ polo‘ky Quit budete je¨tˆ t z ni, zda si p©ejete smazat
 nepot©ebn‚ soubory, ‡i nikoli. Za nepot©ebn‚ se pova‘uj¡ soubory
 [%MAIN%] s~p©¡ponami: [%CLFILES%].
 Mno‘inu tˆchto p©¡pon lze mˆnit pomoc¡ | environment promˆnn‚ |{\1163}
 CLFILES.
\endtt}

Poznamenejme je¨tˆ, ‘e zde m me \uv{promˆnliv˜} obsah helpu v~z vislosti
na obsahu promˆnn‚ "CLFILES" a "MAIN". To je celkem sympatick  vlastnost
programu MNU. Tak‚ zde vid¡te odkaz na dal¨¡ okno helpu s~polo‘kou 1163.


\sub Barevn  nebo ‡ernob¡l  nab¡dka

Smyslem tohoto ‡l nku nen¡ opakovat to, co bylo ©e‡eno v~dokumentaci
k~programu MNU nebo co je p©edvedeno ve st vaj¡c¡ konfiguraci \CS\TeX{}u.
V¡ce bych se chtˆl zamˆ©it na triky, kter‚ mo‘n  nejsou p©i povrchn¡m
p©e‡ten¡ dokumentace a p©¡ru‡ky DOSu zcela patrn‚. Tento ‡l nek bych
p©irovnal ke kapitole \uv{Dirty Tricks} v~{\it \TeX book\/}u. Jen jsem
opomnˆl vlo‘it na toto m¡sto p©¡slu¨n‚ mno‘stv¡ \uv{dangerous bend–}.

Zaj¡mav˜m p©¡kladem m–‘e b˜t vlastnost nab¡dky \uv{dynamicky} mˆnit sv–j
vzhled v~z vislosti na proveden‚ volbˆ. T©eba polo‘ka "TeX" v~oknˆ "TeX" m 
vzhled z visl˜ na zrovna zvolen‚m form tu (tj. "PlainTeX", "LaTeX" apod.).
Je to za©¡zeno tak, ‘e v~m¡stˆ textu polo‘ky je po‘adavek substituce textu
ve tvaru "[%...]". V tomto p©¡padˆ se text nahrazuje hodnotou promˆnn‚
DOSu.

Dal¨¡ mo‘nost¡ je nab¡dnout programu MNU r–zn‚ konfigura‡n¡ soubory. Tuto
mo‘nost si p©edvedeme podrobnˆji. V~souboru {\tt cfg.zip} na prvn¡
instala‡n¡ disketˆ najdete dva skoro stejn‚ konfigura‡n¡ soubory. Jeden se
jmenuje {\tt cfg.mnu} a konfiguruje barevnou nab¡dku pro \CS\TeX, zat¡mco
druh˜ se jmenuje {\tt cfgmono.mnu} a konfiguruje ‡ernob¡lou (ale jinak
stejnou) nab¡dku. V~instala‡n¡m programu je ot zka, zda se m  nab¡dka
chovat barevnˆ nebo ‡ernob¡le a na z kladˆ toho se jeden z~tˆchto dvou
soubor– pou‘ije jako definitivn¡.

Zkusme pou‘¡t oba soubory nar z. P©idejme si do prvn¡ho souboru na nˆjak‚
vhodn‚ m¡sto polo‘ku "Mono" ve tvaru

\begtt
| Mono  |{"set CFGMNU=cfgmono.mnu">2}
\endtt

V~©¡dic¡ d vce nahraƒme ve vol n¡ programu MNU n zev konfigura‡n¡ho souboru
hodnotou promˆnn‚ "CFGMNU" takto:

\begtt
%RAM%\mnu %RAM%\%CFGMNU% %RAM%\envir.bat %RAM%\dos.bat %RAM%\mfbat.bat
call %RAM%\envir
\endtt
\noindent
a postarejme se o~to, aby po volbˆ polo‘ky "Mono" d vka pouze na‡etla
soubor {\tt envir.bat} a d le se vr tila na vol n¡ menu. Pokud v~souboru
{\tt cfgmono.mnu} vytvo©¡me analogickou polo‘ku s~n zvem "Color", m–‘eme si
cel˜ z zrak vyzkou¨et. Nesm¡me ale zapomenout v~souboru "texset.bat"
definovat implicitn¡ hodnotu promˆnn‚ "CFGMNU" nap©¡klad jako "cfg.mnu".

Po startu n m nasko‡¡ barevn  nab¡dka obsahuj¡c¡ polo‘ku "Mono". Po volbˆ
t‚to polo‘ky se ihned cel  nab¡dka stane pouze ‡ernob¡lou a bude obsahovat
polo‘ku "Color". Po volbˆ t‚to polo‘ky zase dostane nab¡dka barvu.

Tento p©¡klad s~barvami nen¡ p©¡li¨ efektivn¡. Pot©ebujeme m¡t toti‘ v~akci
dva skoro stejn‚ soubory. Nav¡c, pokud bychom mˆnili strukturu nab¡dek,
mus¡me tak u‡init dvojmo. Asi lep¨¡ ©e¨en¡ je pou‘¡t pouze v~m¡stech, kde
se zm¡nˆn‚ dva soubory li¨¡, substitu‡n¡ konstrukce typu "[%...]", p©itom
zde bude asi vhodn‚ substituovat kr tk˜mi soubory.

Podobnˆ m–‘eme st©¡dat t©eba jazyky. Vytvo©me si soubor s~n zvem
"cfgcz.mnu", kter˜ bude p©ekladem souboru "cfg.mnu" do ‡e¨tiny.
Za©ad¡me si na vhodn  m¡sta polo‘ky "Anglicky" a "Czech" a m–‘eme se bavit
t¡m, jak bude u‘ivatel zmaten, kdy‘ se texty v¨ech polo‘ek jedn¡m r zem
zmˆn¡.


\sub U‘ivatelsk‚ konfigura‡n¡ soubory trochu jinak

Zamˆ©me se na probl‚m u‘ivatelsk˜ch konfigura‡n¡ch soubor–, kter‚ maj¡
v~\CS\TeX{}u n zev "texcfg.bat". P©¡kazy uveden‚ v~takov‚m souboru
se provedou na konci inicializa‡n¡ d vky "texset.bat". Nap©¡klad p©¡kazy
typu "set" v~konfigura‡n¡m souboru maj¡ vy¨¨¡ prioritu, ne‘ tyt‚‘ p©¡kazy
"set" nastavuj¡c¡ \uv{spole‡nou konfiguraci} v~inicializa‡n¡ d vce.
Sou‡asn˜ n vrh syst‚mu nab¡dek umo‘¤uje sice automaticky vytvo©it soubor
"texcfg.bat", ale ukl daj¡ se do nˆj {\it v¨echny\/} hodnoty
promˆnn˜ch DOSu. To m  plno nep©¡jemn˜ch d–sledk–. Nap©¡klad pokud
u‘ivatel zkop¡ruje obsah sv‚ho adres ©e do jin‚ho po‡¡ta‡e (v‡etnˆ souboru
"texcfg.bat"), pak se m–‘e st t, ‘e bude m¡t nep©edstaviteln‚ probl‚my.
V~tomto jin‚m po‡¡ta‡i m–‘e nap©¡klad  b˜t jinak nastavena hodnota
"%COMSPEC%", nebo t©eba vlastn¡ \TeX{} m–‘e b˜t v jin‚m adres ©i, tak‘e se
li¨¡ hodnota promˆnn‚ "TEXDIR". Tak‚ se v~souboru "texcfg.bat" ukl d 
hodnota promˆnn‚ "MAIN" a "WORK" a u‘ivatel se pak m–‘e stra¨nˆ divit,
‘e hodnoty tˆchto promˆnn˜ch p©est vaj¡ b˜t z visl‚ na obsahu p©¡kazov‚ho
© dku, kter˜m je nab¡dkov˜ syst‚m vyvol n.

Pokus¡me se p©edv‚st mo‘nost, jak automaticky vytv ©et u‘ivatelsk‚
konfigura‡n¡ soubory, kter‚ obsahuj¡ nastaven¡ {\it pouze nˆkter˜ch\/}
zvolen˜ch promˆnn˜ch DOSu. Chtˆl bych poznamenat, ‘e p©i v˜voji nab¡dkov‚ho
syst‚mu pro \CS\TeX{} jsem mˆl toto ©e¨en¡ p–vodnˆ navr‘eno, ale pak jsem
od nˆj ustoupil, proto‘e tyto \uv{statick‚} soubory "texcfg.bat" samoz©ejmˆ
nebudou obsahovat d–le‘it‚ hodnoty promˆnn˜ch DOSu, kter‚ souvisej¡ 
s~nov˜mi programy neza©azen˜mi do p–vodn¡ho bal¡ku.

Pod¡vejme se nejprve, jak˜m zp–sobem se soubor "texcfg.bat" vytv ©¡ ve
st vaj¡c¡ instalaci \CS\TeX{}u. P©i volbˆ polo‘ky "Save" se v~d vce
"texbat.bat" provedou n sleduj¡c¡ p©¡kazy:

\begtt
:save
  set > %RAM%\file.mnu
  echo echo **** CONFIGURATION from file %MARK%.bat **** > %MARK%.bat
  %TEXDIR%\dupcent %RAM%\file.mnu set >> %MARK%.bat
  echo set MNU=31 >> %MARK%.bat
  del %RAM%\file.mnu
  set mnu=65
  goto menu
\endtt

Zkusme si to vysvˆtlit. Nejprve se ulo‘¡ v˜pis v¨ech promˆnn˜ch DOSu ve
form tu "NAZEV=hodnota" do pomocn‚ho souboru "file.mnu". Pak se za‡ne
vytv ©et vlastn¡ soubor "%MARK%.bat". Prvn¡ © dek tohoto souboru bude
obsahovat text

\begtt
echo **** CONFIGURATION from file texcfg.bat ****
\endtt

\noindent
a dal¨¡ © dky budou obsahovat postupnˆ v¨echny pou‘it‚ promˆnn‚ DOSu ve
form tu "set NAZEV=hodnota". Je zde pou‘it program "dupcent.exe", kter˜ ‡te
pracovn¡ soubor "file.mnu" a p©ed ka‘d˜ © dek p©id  slovo "set" a nav¡c
duplikuje p©¡padn  procenta uvnit© hodnot promˆnn˜ch DOSu. Posledn¡ © dek
v~souboru "%MARK%.bat" bude obsahovat p©¡kaz "set MNU=31", tj. syst‚m
nab¡dek po zpˆtn‚m na‡ten¡ tohoto souboru nasko‡¡ na polo‘ku s~‡¡slem 31,
co‘ je polo‘ka "Edit".

Pokud zmˆn¡me v˜¨e uveden‚ p©¡kazy v~d vce "texbat.bat" n sleduj¡c¡m
zp–sobem, dost v me \uv{statick‚} konfigura‡n¡ soubory:

\begtt
:save
  %RAM%\mnu %TEXDIR%\cfg\maskcfg.mnu > %RAM%\file.mnu
  %TEXDIR%\dupcent %RAM%\file.mnu > %MARK%.bat
  del %RAM%\file.mnu
  set mnu=65
  goto menu
\endtt

\noindent
Program MNU je zde pou‘it jako filtr, kter˜ ‡te soubor "maskcfg.mnu" a na
z kladˆ nˆj vytv ©¡ pracovn¡ soubor "file.mnu". V~tomto pracovn¡m souboru
je¨tˆ zdvoj¡me procenta programem "dupcent.exe" (tentokr t nep©id v me
p©ed © dky slovo "set") a v˜sledek ulo‘¡me do souboru s~n zvem
"%MARK%.bat". Obsah v˜choz¡ho souboru "maskcfg.mnu" m–‘e b˜t t©eba
n sleduj¡c¡:

\begtt
***** Mask for configuration files *.bat ****
~copy
echo **** CONFIGURATION from file [%MARK%].bat ****
set EDIT=[%EDIT%]
set EMTEXED=[%EMTEXED%]
set SHELL=[%SHELL%]
...
set MFINPUT=[%MFINPUT%]
\endtt

P©¡kaz "~copy" nastavuje program MNU do \uv{kop¡rovac¡ho re‘imu} (viz
dokumentace "mnu.tex", str. 6 dole), tj. program lze pou‘¡t jako filtr,
p©i‡em‘ se aplikuje n hrada textu podle pravidel pro konfigura‡n¡ soubory
programu MNU. V˜stupem z~tohoto filtru bude soubor t©eba s~t¡mto obsahem
(to samoz©ejmˆ z vis¡ na aktu ln¡m stavu promˆnn˜ch DOSu):

\begtt
echo **** CONFIGURATION from file texcfg.bat ****
set EDIT=call e:\textmp\qedit
set EMTEXED=call e:\textmp\qedit %2 %3 -n%1
set SHELL=c:\nc\nc
...
set MFINPUT=c:\emtex\mfinput;.
\endtt

Program "dupcent" je¨tˆ zdvoj¡ procenta, tak‘e ve v˜sledn‚m
souboru "texcfg.bat" m me nap©. © dek:

\begtt
set EMTEXED=call e:\textmp\qedit %%2 %%3 -n%%1
\endtt

Pokud se nˆkdy zpˆtnˆ vyvol  soubor "texcfg.bat", pak se zdvojen  procenta
interpretuj¡ jako jedno \uv{oby‡ejn‚} procento a v¨e bude pracovat tak, jak
chceme.

Je tedy vidˆt, ‘e obsah u‘ivatelsk˜ch konfigura‡n¡ch soubor– typu
"texcfg.bat" m–‘eme m¡t zcela pod kontrolou. Tento obsah ur‡¡me pomoc¡
soubor– typu "maskcfg.mnu". M–‘eme m¡t samoz©ejmˆ takov˜ch \uv{maskov˜ch
soubor–} v¡ce; nap©¡klad rozt©¡d¡me promˆnn‚ DOSu do t‚matick˜ch okruh–.
Nab¡dku t˜kaj¡c¡ se mo‘nosti ulo‘en¡ hodnot promˆnn˜ch do souboru pak mus¡me
p©¡slu¨n˜m zp–sobem roz¨¡©it. U‘ivatel si m–‘e vybrat, zda ulo‘¡ t©eba stav
promˆnn˜ch t˜kaj¡c¡ch se editoru a shellu nebo stav promˆnn˜ch t˜kaj¡c¡ch
se t©eba \TeX{}u, ovlada‡–, nebo n zv– pracovn¡ho a hlavn¡ho souboru.


\sub Star‚ menu pomoc¡ nov‚ho MNU

N sleduj¡c¡ p©¡klad m  dokumentovat flexibilitu programu MNU. Uk ‘eme, ‘e
star˜ zn m˜ syst‚m nab¡dek z~p©edchoz¡ch verz¡ \CS\TeX{}u lze pomoc¡
programu MNU snadno simulovat. U‘ite‡nost tohoto p©¡kladu se m–‘e zd t
sporn . Je t©eba si ale uvˆdomit, ‘e nˆkdy je velmi nebezpe‡n‚ d t lidem
k~dispozici jin˜ syst‚m nab¡dek, t©eba‘e m  v¡ce mo‘nost¡. U‘ jin˜ vzhled
syst‚mu nab¡dek na obrazovce dok ‘e mnoh‚ u‘ivatele odradit. Lid‚ se za‡nou
roz‡ilovat, ‘e se mus¡ u‡it {\it zase\/} nˆco jin‚ho. Proto nap©¡klad
O.~Ulrych radˆji ponˆkud vylep¨il star‚ menu, ne‘ aby u‘ivatel–m na jeho
pracovi¨ti nab¡dl nov˜ syst‚m nab¡dek z~\CS\TeX{}u. Ch pu ho -- u‘ivatel‚
jsou toti‘ velmi konzervativn¡.

Pokud si vzpom¡n m, tak star‚ menu nab¡zelo vpravo od n zvu polo‘ky jak‚si
edita‡n¡ pole, kde se psaly parametry pro jednotliv‚ programy. Mysl¡m si,
‘e tomu nejv¡ce odpov¡d  n sleduj¡c¡ konfigura‡n¡ soubor (ozna‡me ho nap©.
"oldmenu.mnu").

{\catcode`\/=13 \catcode`\<=13
\def/{\hbox to .5em{\hss$\scriptstyle\triangleright$\hss}}
\def<{\hbox to .5em{\hss$\scriptstyle\triangleleft$\hss}}
\begtt
******* Star‚ menu pomoc¡ MNU *******
~start {!>2}
~final {"set MNU=#">2}
^1 2 3 4 5 6 7 8 9
~param {30, 1, 50, 15, 1, 7, 7, 7, 112, 112}
                CSTeX - menu
================================================
/ Edit   < |#[%EDITPAR%37]|{"set EDITPAR=#">%2}
/ TeX    < |#[%TEXPAR%37]|{"set TEXPAR=#">%2}
/ View   < |#[%VIEWPAR%37]|{"set VIEWPAR=#">%2}
================================================
/ Vlnka  < |#[%TIEPAR%37]|{"set TIEPAR=#">%2}
/ Spell  < |#[%SPELLPAR%37]|{"set SPELLPAR=#">%2}
/ Matrix < |#[%MATRPAR%37]|{"set MATRPAR=#">%2}
/ Laser  < |#[%LASERPAR%37]|{"set LASERPAR=#">%2}
================================================
/ DOS    < |#[%DOSPAR%37]|{"set DOSPAR=#">%2}
/ Quit   < |#[%QUITPAR%37]|{"set QUITPAR=#">%2}
\endtt}

Symboly $\triangleright$ a $\triangleleft$ zde ozna‡uj¡ znaky s~k¢dem 16 a
17, co‘ se na obrazovce jev¡ jako troj£heln¡‡ky. Menu vyvol me nap©¡klad
d vkou "oldtex.bat", kter  obsahuje tyto p©¡kazy:

\begtt
@echo off
if `%1==` goto err
%COMSPEC% /e:1300 /c oldmenu %1
goto end
:err
echo Chyb¡ n zev souboru (bez p©¡pony) jako parametr.
:end
\endtt

Takovou vˆc asi zn te z~\CS\TeX{}u. Roz¨i©uje se zde prostor pro promˆnn‚
DOSu a vyvol  se dal¨¡ d vka, zde nazvan  "oldmenu.bat". Tato d vka vypad 
n sledovnˆ (m¡sto te‡ek si dopl¤te analogicky podobn‚ p©¡kazy pro dal¨¡
polo‘ky):

\begtt
@echo off
set EDITPAR=%1.tex
set TEXPAR=%1.tex
set VIEWPAR=@scr.cnf %1.dvi
...
set QUITPAR=echo ahoj!
set MNU=1

:menu
mnu oldmenu.mnu envir.bat
call envir
if errorlevel 9 goto quit
if errorlevel 8 goto dos
...
if errorlevel 1 goto edit
pause > nul
goto menu

:edit
  call edit %EDITPAR%
  goto menu
  set MNU=2
:tex
  ...
:dos
  %DOSPAR%
  goto menu
:quit
  %QUITPAR%
\endtt

Poznamenejme, ‘e zde nejsou ©e¨eny zdaleka v¨echny probl‚my souvisej¡c¡ 
s~\TeX{}em. Nap©¡klad zde nenajdete nastaven¡ nˆkter˜ch promˆnn˜ch DOSu,
kter‚ jsou typick‚ pro em\TeX. Berte to proto jako p©¡klad konfigurace
nab¡dky. Pokud ji budete cht¡t skute‡nˆ pou‘¡t, bude pot©eba ji v~nˆkter˜ch
ohledech upravit.

Nyn¡ si shrneme, jak se takto konfigurovan˜ syst‚m nab¡dek chov .
Vid¡me, ‘e v¨echny polo‘ky v~menu maj¡ typ editovateln‚ polo‘ky.
Pokud se zm ‡kne "Enter" (nez le‘¡ na tom, zda se editovalo ‡i nikoli),
potvrd¡ se hodnota polo‘ky (tj. parametry volan‚ho programu) a nav¡c se
po‘adovan˜ program vyvol . Polo‘ku vol¡me ¨ipkami a jakmile za‡neme ps t,
ukl d  se text v~edita‡n¡m poli do parametr– programu. Kl vesa "Esc" m  dva
v˜znamy. Pokud se u‘ za‡alo editovat, pak vrac¡ edita‡n¡ pole do p–vodn¡ho
stavu, jinak skr˜v  cel‚ ok‚nko s~nab¡dkou. V~tomto p©¡padˆ toti‘ program
MNU ukon‡¡ ‡innost s~k¢dem 0 a v~d vce "oldmenu.bat" se provede p©¡kaz {\tt
pause > nul}, tj., ‡ek  se na libovolnou kl vesu, aby se proces mohl vr tit
zpˆt do nab¡dky. Mysl¡m, ‘e tak nˆjak to v~tom star‚m menu fungovalo.

Nev˜hoda takov‚to konstrukce nab¡dek je v~tom, ‘e n m nedovoluje pou‘¡vat
zv˜raznˆn  p¡smena v~textu polo‘ek pro rychl˜ v˜bˆr polo‘ky. Jakmile toti‘
zm ‡kneme p¡smeno, nab¡dkov˜ syst‚m to interpretuje jako po‘adavek na zmˆnu
parametr– programu a odstartuje editaci v~edita‡n¡m poli. Nevzpom¡n m si,
‘e by ve star‚m menu ¨lo volit polo‘ku rovnou p¡smenem, tak‘e se domn¡v m,
‘e to pracuje p©esnˆ tak, jak byli u‘ivatel‚ star‚ho menu zvykl¡.
Jednu vˆc programem MNU simulovat nelze. Jde o~to, ‘e p©i startu editace se
cel‚ edita‡n¡ pole zaplnilo jak˜misi nesmysln˜mi znaky vypadaj¡c¡mi p©ibli‘nˆ
takto: {\tt <\kern-2.9pt<}. Tato skute‡nost ale sp¡¨e ru¨ila a m tla, tak‘e 
z~toho, ‘e to nelze simulovat, nemus¡me b˜t smutn¡.

Mezi znaky, kter‚ by se nemˆly objevit v~textu parametr– pat©¡ {\tt|},
{\tt=}, {\tt<} a {\tt>}. Tyto znaky toti‘ maj¡ v~DOSu speci ln¡ v˜znam a
z~tˆchto d–vod– jimi nelze naplnit promˆnnou DOSu. Tuto vˆc m–‘eme obej¡t
pou‘it¡m pomocn˜ch soubor–. Sta‡¡ se inspirovat ©e¨en¡m polo‘ky DOS v~nov‚m
syst‚mu nab¡dek \CS\TeX{}u.

Nam¡tnete je¨tˆ, ‘e ‡ ry oddˆluj¡c¡ jednotliv  pole v~p–vodn¡m
programu pˆknˆ navazovaly na vnˆj¨¡ r me‡ek. Pokud chcete, m–‘ete toho
pomoc¡ MNU snadno dos hnout. Sta‡¡ volit v~p©¡kazu "~param" velikost
r me‡ku rovnou nule a r me‡ek si do konfigura‡n¡ho souboru "oldmenu.mnu"
zan‚st explicitnˆ pomoc¡ semigrafick˜ch symbol– v‡etnˆ v¨ech spojuj¡c¡ch
mezi‡ar. Pokus¡te-li se ale o~spojen¡ dvojit‚ ‡ ry s~jednoduchou, nebude
v m to fungovat v~k¢dov n¡ PC Latin2, proto‘e tam po‘adovan‚ semigrafick‚
znaky nejsou.


\sub Od jednoduch˜ch formul ©– k~datab z¡m

Udˆl me si \uv{u‘ivatelsk‚ rozhran¡} pomoc¡ programu MNU, kter‚ umo‘n¡
snadno vkl dat £daje, kter‚ je t©eba ‡asto vypl¤ovat do stanoven‚ho
formul ©e. Vlastn¡ formul © nakonec vys z¡ \TeX. U‘ivatel p©itom v–bec
nemus¡ vˆdˆt, ‘e pou‘¡v  \TeX.

NechŸ je cel  procedura p©¡pravy formul ©e vyvol na z~DOSu d vkou
"form.bat". Ta bude obsahovat pouze © dek, kter˜m se zvˆt¨¡ prostor pro
promˆnn‚ DOSu a vyvol  se ©¡dic¡ d vka (podobnˆ, jako v~d vce "oldtex.bat"
z~p©edchoz¡ho odstavce). ž¡dic¡ d vka se m–‘e jmenovat t©eba "formbat.bat"
a jej¡ obsah je n sleduj¡c¡:

\begtt
@echo off
keybcs
set JMENO=Ferdinand
set PRIJMENI=Mravenec
set ULICE=Ond©eje Sekory 13
set POVOLANI=Pr ce v¨eho druhu
:menu
  set MNU=1
  mnu form.mnu envir.bat
  if errorlevel 1 goto quit
  call envir
  mnu masktex.mnu > form.tex
  call texrun form.tex
  call view form.dvi
  set MNU=10
  mnu form.mnu envir.bat
  if errorlevel 2 goto menu
  if errorlevel 1 goto quit
  call print form.dvi
:quit
  del envir.bat
  keybcs -u
\endtt

Popi¨me si jej¡ funkci. Nejprve se vyvol  ovlada‡ pro ‡eskou (slovenskou)
kl vesnici. P©edpokl d me, ‘e ovlada‡ obrazovky je ©e¨en glob lnˆ
(nap©. v~"autoexec"u). Pak se napln¡ promˆnn‚ DOSu, kter‚ odpov¡daj¡
jednotliv˜m polo‘k m formul ©e, jist˜mi \uv{v˜choz¡mi hodnotami}.
Pak se poprv‚ spust¡ program MNU s~v˜choz¡ polo‘kou ‡.~1. V~tomto m¡stˆ
provede u‘ivatel p©¡padn‚ zmˆny v˜choz¡ch hodnot promˆnn˜ch, kter‚ se pak
aktualizuj¡ vol n¡m p©echodn‚ d vky "envir.bat". Pot‚ se za pomoc¡
programu MNU jako filtru vytvo©¡ zdrojov˜ soubor \TeX{}u s~n zvem
"form.tex". V˜choz¡ soubor "masktex.mnu" m–‘e vypadat t©eba takto:

\begtt
~copy
\input makra
\JMENO    {[%JMENO%]}
\PRIJMENI {[%PRIJMENI%]}
\ULICE    {[%ULICE%]}
\POVOLANI {[%POVOLANI%]}
\makeform
\endtt

\noindent
Pokud nap©¡klad u‘ivatel zmˆnil pouze prvn¡ dva £daje, pak po proveden¡
p©¡kazu {\tt mnu masktex.mnu > form.tex} dost v me soubor "form.tex" t©eba
ve tvaru:

\begtt
\input makra
\JMENO    {Petr}
\PRIJMENI {Ol¨ k}
\ULICE    {Ond©eje Sekory 13}
\POVOLANI {Pr ce v¨eho druhu} 
\makeform
\endtt

Jak vypad  soubor "makra.tex" zde nebudeme uv dˆt, proto‘e to z vis¡ na
vlastn¡m formul ©i a na tom, v~jak‚ podobˆ ho chceme vytisknout. Pokra‡ujme
v~trasov n¡ d vky "formbat.bat". Po vytvo©en¡ souboru "form.tex" se tento
soubor zpracuje \TeX{}em a hned se spust¡ prohl¡‘e‡. Po ukon‡en¡ prohl¡‘e‡e
se program MNU zept  u‘ivatele, zda to chce vytisknout nebo opravit
(polo‘ka 10). Dal¨¡ vˆci v~d vce "formbat.bat" jsou u‘ z©ejm‚.

Nakonec si uvedeme, jak vypad  soubor "form.mnu", v~nˆm‘ konfigurujeme
vlastn¡ u‘ivatelsk‚ rozhran¡. M–‘e m¡t t©eba tento obsah:

\begtt
******* U‘ivatelsk‚ rozhran¡ "formul ©" pomoc¡ programu MNU *******
~start {!>2}
^1 2 3 4 5 6
~param {5, 2, 72, 13}
                Formul © pro Velk‚ho Byrokrata
                ==============================
 N sleduj¡c¡ syst‚m nab¡dek V m umo‘n¡ formul © vyplnit a vytisknout
--------------------------------------------------------------------
 Jm‚no:    |#[%JMENO%64]|{   "set JMENO=#">%2,   "#">JMENO,   2}
 P©¡jmen¡: |#[%PRIJMENI%64]|{"set PRIJMENI=#">%2,"#">PRIJMENI,3}
 Ulice:    |#[%ULICE%64]|{   "set ULICE=#">%2,   "#">ULICE,   4}
 Povol n¡: |#[%POVOLANI%64]|{"set POVOLANI=#">%2,"#">POVOLANI,5}

               | OK    |{$0} (Start zpracov n¡)
               | Konec |{$1} (Nechci ‘ dn˜ formul ©)
^10
~param {5, 15, 72, 5}
 | Vytisknout |{$0} (Formul © se vytiskne na tisk rnˆ, p©ipravte ji)
 | Vr tit     |{$2} (N vrat do syst‚mu nab¡dek, provedu opravy)
 | Konec      |{$1} (Rozmyslel jsem si to, nechci ‘ dn˜ formul ©)

^0
~param {20, 20, 42, 4}
 | Konec |{$1} (Nechci ‘ dn˜ formul ©)
 | D le  |{\[%MNU%]} (Pokra‡uji)
\endtt

Zde samoz©ejmˆ z le‘¡ na na¨i tvo©ivosti a fantazii, ale tak‚ na obsahu
skute‡n‚ho formul ©e. V¨e m–‘eme rozv‚st do v¡ce ok‚nek a p©idat syst‚m
n povˆd (help–). Uveden  uk zka je pokud mo‘no co nejjednodu¨¨¡. V¨imneme si
nˆkter˜ch trik–. Za prv‚ v~jedin‚m souboru je ©e¨en vzhled nab¡dky pro obˆ
vol n¡ programu mnu (jak s~v˜choz¡ polo‘kou 1, tak s~polo‘kou 10). Tak‚ je
zde konfigurov na reakce na kl vesu "Esc" (polo‘ka 0), p©itom polo‘ka
"D le" zp–sob¡ skok na polo‘ku 1 nebo 10 v~z vislosti na sou‡asn‚m obsahu
promˆnn‚ MNU.

Program MNU neumo‘n¡ editovat polo‘ku vˆt¨¡ho rozsahu, ne‘ je jeden © dek.
Pokud pot©ebujeme rozv‚st nˆkterou polo‘ku do v¡ce © dk–, mus¡me ji buƒ
rozdˆlit do samostatn˜ch © dk–, nebo vyvolat na vyplnˆn¡ takov‚ polo‘ky
extern¡ editor. Prvn¡ p©¡pad pou‘ijeme jen v˜jime‡nˆ, proto‘e zde
naraz¡me na omezen‚ editovac¡ mo‘nosti © dkov‚ho editoru vestavˆn‚ho do
programu MNU. Stru‡nˆ ©e‡eno, © dkov˜ editor aplikovan˜ opakovanˆ na © dky
um¡stˆn‚ pod sebou zdaleka nevytvo©¡ komfort celoobrazovkov‚ho editov n¡.
Je skute‡nˆ lep¨¡ pro vyplnˆn¡ obs hl˜ch polo‘ek vyvolat extern¡ editor. 
V~prvn¡ch nˆkolika © dc¡ch \uv{p©edzpracovan‚ho textu} m–‘e b˜t koment ©,
kter˜ nap©¡klad ©¡k , kam se m  text napsat a jak se z~editoru
odch z¡. Do souboru "form.tex" pak m–‘eme za©adit vytvo©en˜ text buƒ
\TeX{}ovsk˜m "\input", nebo jej za©ad¡me fyzicky v~souboru "masktex.mnu"
pomoc¡ substitu‡n¡ konstrukce. Program MNU toti‘ um¡ expandovat do dan‚ho
m¡sta obsah jin‚ho souboru.

Ned vno jsem mˆl mo‘nost vyzkou¨et program W94, kter˜ vytvo©il ve
v˜po‡etn¡m centru €VUT pan ing. Strejc. Program m  usnadnit u‘ivatel–m
vytvo©en¡ \LaTeX{}ovsk‚ho souboru, kter˜ obsahuje p©¡spˆvek do sborn¡ku.
Autor programu toti‘ ka‘doro‡nˆ form tuje sborn¡k v˜sledk– odborn‚ ‡innosti
na na¨¡ ¨kole za pomoc¡ \LaTeX{}u. Nejv¡ce pr ce p©itom m  s~vytvo©en¡m
hlavi‡ek k~p©¡spˆvk–m tak, aby to bylo pod©¡zeno jednotn‚mu form tu
sborn¡ku. Nav¡c mu p©¡spˆvky doch zej¡ v~rozli‡n˜ch podob ch (napsan‚ 
v~r–zn˜ch programech typu {\tt word}-{\it cokoli\/} apod.). Rozhodl se proto
distribuovat v¨em p©ispˆvatel–m progr mek W94 spole‡nˆ se stylem pro
sborn¡k a zna‡nˆ z£‘en˜m a jedno£‡elovˆ upraven˜m bal¡kem \TeX{}u.
Progr mek p©itom ©e¨¡ naprosto analogickou vˆc, jak  byla p©edvedena zde.
Vytv ©¡ u‘ivatelsky p©¡tuln‚ rozhran¡ mezi autorem p©¡spˆvku a
vlastn¡m \LaTeX{}ov˜m souborem. Nejprve u‘ivatel vlo‘¡ prost©ednictv¡m
ok‚nek text n zvu p©¡spˆvku, jm‚na autora apod. Jedn  se vlastnˆ
o~strukturu hlavi‡ky p©¡spˆvku. Potom se vyvol  editor a je t©eba napsat
vlastn¡ tˆlo p©¡spˆvku. V¨e je doprov zeno velk˜m mno‘stv¡m p©¡klad–.
Z~p©edchoz¡ uk zky vid¡me, ‘e by mohl b˜t syst‚m W94 vytvo©en pomoc¡
programu MNU.

Komplikovanˆj¨¡ je p©¡pad, kdy pot©ebujeme zpracov vat v¡ce formul ©–
sou‡asnˆ. Ka‘d˜ formul © je vlastnˆ jeden £daj v~jak‚si datab zi. Je
nesmysln‚, aby se v¨echny formul ©e zpracov valy nar z v~promˆnn˜ch
DOSu -- bude n m sta‡it, kdy‘ tam budeme m¡t obsah v¨ech polo‘ek jednoho
formul ©e. V~takov‚m p©¡padˆ u‘ nevysta‡¡me jen s~mo‘nostmi programu MNU a
DOSu, ale budeme muset vytvo©it jednoduch‚ podp–rn‚ progr mky, kter‚ umo‘n¡
nap©¡klad vybrat z~datab ze jeden formul © a hodnoty jeho polo‘ek ulo‘it do
promˆnn˜ch DOSu.

Z~m‚ho laick‚ho pohledu (s~datab zemi nem m nic spole‡n‚ho) zabezpe‡uje
datab zov˜ syst‚m t©i druhy slu‘eb. Za prv‚ vytv ©¡ p©¡tuln‚ rozhran¡ mezi
u‘ivatelem, kter˜ vkl d  nov‚ £daje, a vlastn¡m datab zov˜m souborem. To se
d  vesmˆs ©e¨it programem MNU. Za druh‚ umo‘n¡ tisk £daj– v~nejr–znˆj¨¡ch
form tech. V~tom je zase nep©ekonateln˜ \TeX{} nejen mo‘nost¡ definovat
jak‚koli v˜stupn¡ form ty pomoc¡ maker, ale samoz©ejmˆ t‚‘ kvalitou tisku.
T©et¡ funkc¡ datab zov˜ch syst‚m– jsou nejr–znˆj¨¡ t©¡d¡c¡ a vyhled vac¡
algoritmy, pracuj¡c¡ nad datab zov˜m souborem. Aby byly tyto algoritmy
dostate‡nˆ v˜konn‚, je vˆt¨inou form t datab zov‚ho souboru netrivi ln¡.
Pokud ov¨em pracujeme jen s~mal˜mi datab zemi, posta‡¡ n m datab zov˜ soubor
v~oby‡ejn‚m textov‚m form tu a m–‘eme si naprogramovat jednoduch‚
vyhled vac¡ progr mky (v~C‚‡ku se jedn  o~p r des¡tek © dk–). M–‘eme si tak
vytvo©it \uv{na m¡ru} datab zov˜ syst‚m za pomoc¡ programu MNU a \TeX{}u.
Tento syst‚m sice pracuje pomalu a jen s~mal˜mi a ne p©¡li¨ slo‘it˜mi
datab zemi, zato komfort vkl d n¡ £daj– je dostate‡n˜ a v˜stup na tisk rnu
je bezkonkuren‡n¡. Nav¡c je to cel‚ zadarmo.

P©¡klad tohoto typu dnes nebudu uv dˆt. Chyst m se ale v~nejbli‘¨¡ dobˆ
©e¨it probl‚m vypl¤ov n¡ ¨koln¡ch vysvˆd‡en¡ za pomoc¡ \TeX{}u. P©itom
se vyu‘ije buƒ v˜stup z~datab zov‚ho syst‚mu, kter˜ m  ¨kola u‘ zakoupen˜,
nebo se pro vkl d n¡ £daj– pou‘ije program MNU. Pokud p©i ©e¨en¡ tohoto
£kolu naraz¡m na nˆjak‚ zaj¡mavosti, zm¡n¡m se o~tom nˆkdy p©¡¨tˆ na
str nk ch tohoto ‡asopisu.


\sub Okno pro p©ihl ¨en¡ u‘ivatele do s¡tˆ

Na na¨¡ kated©e pou‘¡v me pro p©ipojen¡ do lok ln¡ s¡tˆ syst‚m PC~NFS,
kter˜ umo‘¤uje p©ihl ¨en¡ do s¡tˆ pouze z~© dky DOSu (p©¡kazem {\tt net
init} nebo {\tt net login}. Pomoc¡ programu MNU jsem zv˜¨il bezpe‡nost s¡tˆ
i u‘ivatelsk˜ komfort p©i p©ihla¨ov n¡. V~t‚to uk zce je plno \uv{¨pinav˜ch
trik–}. Kdo nem  takov‚ postupy r d, nechŸ tento odstavec p©esko‡¡. Tak‚ je
to uk zka, kter  nem  nic spole‡n‚ho s~\TeX{}em. M  pouze dokumentovat
dal¨¡ mo‘n‚ vyu‘it¡ programu, kter˜ se ‡ten ©–m d v  k~dispozici jako
sou‡ st \CS\TeX{}u.

Za‡neme konfigura‡n¡m souborem pro program MNU. Jeho n zev je "log.mnu" a
zde je jeho obsah:

\begtt
******* Login promtp *******
~timeout {20, *"scrblank">0}
~mouse {65535, 0}
^1
~param {5, 2, 72, 16, 1, 112, 30, 30, 14, 14}
     P©ihl ¨en¡ do lok ln¡ s¡tˆ na kated©e matematiky FEL €VUT
     =========================================================

 U‘ivatelsk‚ jm‚no (user): |#        |{   "#">USER, 2}

 Heslo (password):

    Po p©ihl ¨en¡ do s¡tˆ m te k~dispozici lok ln¡ disky:
         K: ... s~u‘ivatelsk˜mi soubory
         M: ... s~chr nˆn˜m softwarem
    a na s¡Ÿ p©ipojen‚ tisk rny:
         LPT1 ... jehli‡kov  (Epson)
         LPT2 ... laserov 
^2 [1]
~param {26, 8, 20, 1, 0, 0, 0, 0, 0}
|#                   |{*"trylogin [%USER%] #">0}

^10 [1]
~param {20, 14, 40, 7, 2, 78} " !! CHYBA !! " ;

          Chybn‚ p©ihl ¨en¡.
     —daje nebyly vlo‘eny spr vnˆ.
           Zm ‡knˆte  Esc.
^0 [1]
~param {30, 14, 21, 3, 2, 78} " ?? —nik ?? "
   Zm ‡knˆte Esc
\endtt

Cel  procedura se vyvol  d vkou {\tt login.bat} s~t¡mto obsahem:

\begtt
@echo off
call initnet
set MNU=1
:znova
mnu log.mnu
set MNU=10
if not exist OK.bat goto znova
call OK
del OK.bat
\endtt

Po uveden¡ s¡Ÿov˜ch program– do provozu (d vka "initnet.bat") nasko‡¡
program MNU na polo‘ku s~‡¡slem~1. Zde u‘ivatel edituje sv‚ jm‚no.
Po zm ‡knut¡ "Enter" se objev¡ v~m¡stˆ pro naps n¡ hesla ‡ern‚ ok‚nko 
o~v˜¨ce jednoho © dku, obsahuj¡c¡ \uv{neviditelnou} editovatelnou polo‘ku 
(s~‡¡slem~2). Jej¡ neviditelnost je d na t¡m, ‘e m  barevn‚ atributy rovny
nule, tj. ‡ern˜ text na ‡ern‚m pozad¡. Tato polo‘ka mus¡ b˜t pops na 
v~samostatn‚m oknˆ, proto‘e barevn‚ atributy pro polo‘ky jsou spole‡n‚ pro
cel‚ okno; p©itom my chceme text polo©ky "user" vidˆt, zat¡mco "password"
nikoli.

Toto ©e¨en¡ sice nezobrazuje v~m¡stˆ hesla v–bec nic (tedy ani ‘ dn‚
hvˆzdi‡ky ‡i ‡tvere‡ky), ale mysl¡m si, ‘e to je sp¡¨ k~dobru vˆci -- zvy¨uje
to bezpe‡nost u‘ivatelsk˜ch hesel.

Po zad n¡ hesla se vyvol  {\it zevnit©\/} (z~programu MNU) d vka
"trylogin.bat". Tato d vka obdr‘¡ dva parametry. Jedn¡m je u‘ivatelsk‚
jm‚no a druh˜m je heslo. D vka zavol  p©ihla¨ovac¡ program s¡Ÿˆ s~tˆmito
dvˆma parametry a vytvo©¡ soubor "OK.bat" v~p©¡padˆ, ‘e bylo p©ihl ¨en¡
£spˆ¨n‚. Pro‡ vol me d vku zevit© programu MNU? Je to proto, ‘e informaci 
o~obsahu hesla nejsme schopni p©edat ©¡dic¡ d vce jinak, ne‘ v~souborech typu
"envir.bat". Potulov n¡ hesel po souborech (t©eba‘e smazan˜ch) by
ale mohlo oslabit jejich bezpe‡nost.

Zpˆtnou informaci o~£spˆ¨nosti p©ihl ¨en¡ zase nelze p©en‚st jinak, ne‘
existenc¡ souboru. Nav¡c nyn¡ mus¡me program MNU opustit, proto‘e 
v~programu samotn‚m nem–‘eme za©¡dit vˆtven¡ v˜po‡tu z visl‚ na existenci
souboru.%
\footnote{$^4$}{Nen¡ to tak docela pravda; lze vyu‘¡t konstrukce typu
"[%...]" nap©¡klad v defini‡n¡m © dku okna a t¡m ovlivnit chov n¡ programu
v~z vislosti na obsahu souboru. Nen¡ to ale p©¡li¨ elegantn¡}
V~hlavn¡ d vce se v~p©¡padˆ, ‘e neexistuje soubor OK.bat p©ejde
znova na vol n¡ programu MNU, nyn¡ ale m  v˜choz¡ polo‘ka ‡¡slo 10.
Na t‚to polo‘ce n m program MNU vynad  a umo‘n¡ po kl vese "Esc"
p©ihla¨ovac¡ proceduru opakovat.

Pokud je p©ihl ¨en¡ £spˆ¨n‚, ©¡dic¡ proces se ukon‡¡ vyvol n¡m d vky
"OK.bat", kter  obsahuje jedin˜ © dek ve tvaru nap©. {\tt set
USER=vopicka}. Po ukon‡en¡ p©ihla¨ovac¡ procedury m me tedy v~promˆnn‚
"USER" podchycen‚ u‘ivatelsk‚ jm‚no. To je u‘ite‡n‚ pro dal¨¡ d vky, kter‚
mohou s~touto hodnotou pracovat. Samotn˜ PC NFS software n m takovou vˆc
neumo‘n¡.

Pro zaj¡mavost je¨tˆ uveƒme, jak vypad  d vka "trylogin.bat", kter 
realizuje vlastn¡ p©ihl ¨en¡. Zde je jej¡ obsah:

\begtt
@echo off
if exist OK.bat del OK.bat
if `%2==` exit
if `%1==` exit
net init %1 %2 < letter.a
if errorlevel 1 exit
echo set USER=%1 > OK.bat
\endtt

Zde je pou‘it je¨tˆ jeden nehezk˜ trik. Program {\tt net init} p©i
ne£spˆ¨n‚m p©ihl ¨en¡ vyd  zpr vu typu {\tt Abort, Retry, Ignore?}, p©i‡em‘
my nechceme, aby u‘ivatel mˆl mo‘nost na tuto zpr vu reagovat. Volbou
"Ignore" by toti‘ mohl z~p©ihla¨ov n¡ vyklouznout. Soubor "letter.a", na
kter˜ je p©esmˆrov n vstup, obsahuje p¡smeno "a". Program {\tt net init}
tedy p©i ne£spˆ¨n‚m p©ihl ¨en¡ reaguje, jakoby bylo ©e‡eno "Abort", a
v~takov‚m p©¡padˆ vr t¡ nenulov˜ error k¢d, co‘ my v~z pˆt¡ testujeme.

Cel˜ syst‚m d vek je navr‘en tak, aby u‘ivatel nemˆl ¨anci p©ihl ¨en¡ nijak
obej¡t. P©i t‚ p©¡le‘itosti podotknˆme, ‘e program MNU je odoln˜ proti
kombinac¡m typu "Ctrl-Break" apod.

V~konfigura‡n¡m souboru jsou dvˆ zaj¡mav‚ glob ln¡ definice. Prvn¡ z~nich
("~timeout") ©¡k , ‘e po dvaceti vte©in ch klidu kl vesnice se vyvol 
program {\tt scrblank}, kter˜ zhas¡n  obrazovku. Takov˜ program
udˆl  ¨ikovn˜ program tor za p r minut. Nem te-li program tohoto typu po
ruce, m–‘e poslou‘it DOSovsk‚ {\tt cls}, ale toto ©e¨en¡ neskr˜v  kurzor.
›ikovn˜ program tor se p©itom m–‘e vy© dit a udˆlat z~obrazovky t©eba
\uv{toulky vesm¡rem} nebo \uv{akv rium} apod. Velice jednoduch˜ program
{\tt scrblank} jsem za©adil do \CS\TeX{}u 94 (jedn  se o~p r © dk–
v~jazyce~C).

Druhou definic¡, na ni‘ bych chtˆl upozornit, je "~mouse". Parametry
kurzoru my¨i jsou nastaveny tak, aby tento kurzor nebyl vidˆt.
P©esnˆji, maska AND propust¡ v¨echno (hodnota FFFFh) a maska XOR nezmˆn¡
nic (hodnota 0000h). To je d–le‘it‚, proto‘e nap©¡klad p©i implicitn¡ch
hodnot ch kurzoru my¨i by ¨lo pohybem kurzoru v~poli pro heslo demaskovat
postupnˆ jednotliv  p¡smena hesla.

Nakonec je¨tˆ poznamenejme, ‘e lokalizace nˆkter˜ch soubor– (nap©¡klad
"OK.bat") je ve skute‡n˜ch d vk ch provedena samoz©ejmˆ jinde, ne‘
v~aktu ln¡m adres ©i. Pro stru‡nost jsem tyto vˆci nevypisoval. Pro vy¨¨¡
bezpe‡nost proti vir–m a vlezl˜m u‘ivatel–m je nav¡c v¨e, co se
t˜k  konfigurace tohoto p©ihl ¨en¡, um¡stˆno na takov‚ ‡ sti lok ln¡ho
disku, kter  je zabezpe‡ena proti z pisu.

\sub Z vˆrem

T¡mto ‡l nkem jsem chtˆl nazna‡it, ‘e lze program MNU pou‘¡t p©i rozli‡n˜ch
p©¡le‘itostech. Zdaleka jsem nevy‡erpal v¨echny mo‘nosti programu. Pokud
v s ‡l nek zaujal, mu‘ete si p©¡mo jednotliv‚ uk zky vyzkou¨et. V¨echny
byly testov ny.

P©ipravuji se prov‚st nˆjak‚ £pravy v~\CS\TeX{}u, t˜kaj¡c¡ se specifik na¨¡
lok ln¡ s¡tˆ. Pr vˆ proto, ‘e v¨e stoj¡ na ©¡dic¡ch d vk ch DOSu, budou se
takov‚ zmˆny dˆlat celkem snadno. Do v¨eho je toti‘ vidˆt; nic nen¡ skryto
p©ed v¨ete‡n˜mi z sahy tzv. \uv{MNU-in‘en˜r–}, kter˜mi se m–‘ete st t i vy.
Jedin‚, co je skryto, je zdrojov˜ text programu MNU (asi 1600 © dk–
v~jazyce C). Tento text ned m z~ruky. T¡m zabr n¡m mo‘n‚mu ¨¡©en¡ r–zn˜ch
mutac¡ se \uv{zaru‡enˆ nejlep¨¡mi} vylep¨en¡mi.

Je¨tˆ posledn¡ p©¡klad pou‘it¡ programu MNU. Asi p©ed rokem jsem za©adil
vol n¡ tohoto programu do "autoexec"u po‡¡ta‡e na¨¡ pan¡ sekret ©ky. Musel
jsem samoz©ejmˆ pamatovat na v¨echny operace, kter‚ jsou na tomto po‡¡ta‡i
prov dˆny -- od vol n¡ jednotliv˜ch programov˜ch celk– a‘ po archivaci
soubor– na diskety. T¡m se mi poda©ilo zcela izolovat u‘ivatelku tohoto
po‡¡ta‡e od DOSovsk‚ho promptu. Syst‚m u‘ nˆjakou dobu funguje a pan¡
u‘ivatelka si nestˆ‘uje.

Na z vˆr bych chtˆl pop© t mnoho zdaru a trpˆlivosti v¨em odv ‘livc–m,
kte©¡ chtˆj¡ m–j program potr pit nˆjak˜m netrivi ln¡m zp–sobem.
Bohu‘el, jazyk konfigura‡n¡ch soubor– je dosti kryptick˜ a mo‘nosti DOSu
a programu MNU jsou dost omezen‚. I~za tˆchto omezen¡ lze ale vytvo©it
neuvˆ©iteln‚ vˆci.

Pokud nˆkdo z~v s p©ijde p©i konfiguraci \TeX{}u na zaj¡mav‚ pou‘it¡
programu MNU, velice mˆ potˆ¨¡, kdy‘ si o~tom p©e‡tu na str nk ch tohoto
‡asopisu.

\sub Literatura

\parindent=0pt \parskip=4pt

Kernighan, B. W. -- Ritchie, D. M.: {\it The C Programming Language\/},
Englewood Cliffs, Prentice-Hall 1978.

Knuth D. E.: {\it The Art of Computer Programming\/}, vol. I--$\infty$,
Addison Wesley, 1972--\dots

Knuth D. E.: {\it The \TeX book\/}, vol. A~of {\it Computers \&
typesetting\/}, Addison Wesley, 1986

Ol¨ k P.: {\it Program MNU, Konfigurovateln‚ menu pro spou¨tˆn¡ aplikac¡ pod
DOSem\/} ({\tt mnu.tex} -- dokumentace zahrnut  do \CS\TeX{}u), 1993

{\tt cfg.doc}, {\tt install.doc} -- dokumenta‡n¡ soubory k~p©¡klad–m
pou‘it¡ programu MNU v~\CS\TeX{}u.

MS~DOS: Dokumentace k~syst‚mu.


\end
