\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
