summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Build/source/utils/vlna/vlna.dvibin82840 -> 91064 bytes
-rw-r--r--Build/source/utils/vlna/vlna.idx268
-rw-r--r--Build/source/utils/vlna/vlna.scn54
-rw-r--r--Build/source/utils/vlna/vlna.tex391
4 files changed, 422 insertions, 291 deletions
diff --git a/Build/source/utils/vlna/vlna.dvi b/Build/source/utils/vlna/vlna.dvi
index c536533c3a9..0ed7d863a22 100644
--- a/Build/source/utils/vlna/vlna.dvi
+++ b/Build/source/utils/vlna/vlna.dvi
Binary files differ
diff --git a/Build/source/utils/vlna/vlna.idx b/Build/source/utils/vlna/vlna.idx
index 6e2804cc03c..6cd07a75cf5 100644
--- a/Build/source/utils/vlna/vlna.idx
+++ b/Build/source/utils/vlna/vlna.idx
@@ -1,135 +1,143 @@
-\I\.{ANY}, \[15], 22, 23, 34, 37, 39, 46, 50.
-\I\.{ANY\_NOT}, \[15], 23.
-\I\\{ap}, \[26], 27, 29, 31.
-\I\\{argc}, \[5], 8, 12, 13.
-\I\\{argv}, \[5], 8, 12, 13, 14.
-\I\\{backslash}, \[33], 39.
-\I\\{backup}, \[9], 13, 14.
-\I\.{BAD\_OPTIONS}, \[4], 8, 12, 13.
-\I\.{BAD\_PROGRAM}, \[4], 17, 26, 31.
+\I\.{ANY}, \[17], 25, 26, 37, 40, 42, 49, 53.
+\I\.{ANY\_NOT}, \[17], 26.
+\I\\{ap}, \[29], 30, 32, 34.
+\I\\{argc}, \[5], 9, 14, 15.
+\I\\{argv}, \[5], 9, 14, 15, 16.
+\I\\{backslash}, \[36], 42.
+\I\\{backup}, \[11], 15, 16.
+\I\.{BAD\_OPTIONS}, \[4], 9, 10, 14, 15.
+\I\.{BAD\_PROGRAM}, \[4], 20, 29, 34.
\I\.{BANNER}, \[2], 5, 6.
-\I\\{blanks}, \[33], 34, 36, 37, 38, 39, 46.
-\I\\{blankscr}, 22, \[33], 38, 40, 41, 50.
-\I\\{buff}, \[16], 26, 27, 28, 36, 38, 45, 49, 52, 53.
-\I\.{BUFI}, \[16], 26.
-\I\|{c}, \[16].
-\I\\{charset}, \[7], 8, 15, 34, 37, 39.
+\I\\{blanks}, \[36], 37, 39, 40, 41, 42, 49.
+\I\\{blankscr}, 25, \[36], 41, 43, 44, 53.
+\I\\{buff}, \[18], 19, 29, 30, 31, 39, 41, 44.
+\I\\{buffnz}, \[19], 29, 30, 31, 48, 52, 55, 56.
+\I\.{BUFI}, \[18], 29.
+\I\|{c}, \[10], \[18].
+\I\\{charset}, \[7], 9, 17, 37, 40, 42.
\I\\{charsetdefault}, \[7].
-\I\\{checkmode}, 26, 46, \[47].
-\I\\{commentlist}, \[16], 26, 54.
-\I\\{cr}, \[33], 37, 39, 46.
-\I\\{displayin}, 48, \[49].
-\I\.{DISPLAYMODE}, \[25], 45, 49, 53.
-\I\\{displayout}, 48, \[49].
-\I\\{dolar}, \[33], 43.
-\I\.{EOF}, 26.
-\I\\{exit}, 8, 12, 13, 17, 26, 31.
-\I\|{f}, \[10].
-\I\\{fclose}, 12, 13.
-\I\\{feof}, 26.
-\I\\{filename}, 12, 13, \[25], 32, 42.
-\I\\{flag}, \[15], \[19], 20, 23.
-\I\\{fopen}, 12, 13, 14.
-\I\.{FOUND}, \[23], 24, 29, 30.
-\I\\{fprintf}, 5, 6, 10, 14, 17, 26, 31, 32, 42.
-\I\\{fputs}, 28.
-\I\\{getc}, 26.
-\I\|{i}, \[20], \[38], \[52].
-\I\\{ic}, \[26].
-\I\\{ind}, \[16], 26, 27, 28, 36, 38, 45, 49, 52, 53.
-\I\\{infile}, \[9], 12, 13, 14, 25.
-\I\\{input}, \[26].
-\I\.{IO\_ERR}, \[4], 12.
-\I\\{ioerr}, \[10], 12, 13.
-\I\\{isfilter}, \[7], 8, 11, 12, 13, 14.
-\I\|{j}, \[9], \[22], \[38].
-\I\|{k}, \[26].
-\I\\{lapi}, \[16], 27, 29, 30, 31.
-\I\\{lapt}, \[16], 29, 31.
-\I\\{lastpi}, \[16], 18, 19.
-\I\\{lastpt}, \[16], 18, 19, 54.
-\I\\{latex}, \[7], 8, 43, 48, 50.
-\I\\{letters}, \[33], 39.
-\I\\{listpatt}, \[16], 26, 30, 35, 44, 47, 49, 51, 52, 53.
-\I\|{m}, \[23], \[26].
+\I\\{checkmode}, 29, 49, \[50].
+\I\\{commentlist}, \[18], 29, 57.
+\I\\{cr}, \[36], 40, 42, 49.
+\I\\{displayin}, 51, \[52].
+\I\.{DISPLAYMODE}, \[28], 48, 52, 56.
+\I\\{displayout}, 51, \[52].
+\I\\{dolar}, \[36], 46.
+\I\.{EOF}, 29.
+\I\\{exit}, 9, 10, 14, 15, 20, 29, 34.
+\I\|{f}, \[12].
+\I\\{fclose}, 14, 15.
+\I\\{feof}, 29.
+\I\\{filename}, 14, 15, \[28], 35, 45.
+\I\\{flag}, \[17], \[22], 23, 26.
+\I\\{fopen}, 14, 15, 16.
+\I\.{FOUND}, \[26], 27, 32, 33.
+\I\\{fprintf}, 5, 6, 12, 16, 20, 29, 34, 35, 45.
+\I\\{fwrite}, 31.
+\I\\{getc}, 29.
+\I\\{hexnum}, \[10].
+\I\|{i}, \[10], \[23], \[39], \[41], \[55].
+\I\\{ic}, \[29].
+\I\\{ind}, \[18], 29, 30, 31, 39, 41.
+\I\\{infile}, \[11], 14, 15, 16, 28.
+\I\\{input}, \[29].
+\I\\{inz}, \[19], 29, 30, 48, 52, 55, 56.
+\I\.{IO\_ERR}, \[4], 14.
+\I\\{ioerr}, \[12], 14, 15.
+\I\\{isfilter}, \[7], 9, 13, 14, 15, 16.
+\I\|{j}, \[10], \[11], \[25], \[41].
+\I\|{k}, \[29].
+\I\\{lapi}, \[18], 30, 32, 33, 34.
+\I\\{lapt}, \[18], 32, 34.
+\I\\{lastpi}, \[18], 21, 22.
+\I\\{lastpt}, \[18], 21, 22, 57.
+\I\\{latex}, \[7], 9, 46, 51, 53.
+\I\\{letters}, \[36], 42.
+\I\\{listpatt}, \[18], 29, 33, 38, 47, 50, 52, 54, 55, 56.
+\I\|{m}, \[26], \[29].
\I\\{main}, \[5].
-\I\\{malloc}, 17.
-\I\\{match}, \[23], 24, 29, 30.
-\I\\{mathin}, 43, \[44], 45.
-\I\\{mathlist}, \[33], 43, 44, 53.
-\I\.{MATHMODE}, \[25], 44, 53.
-\I\\{mathout}, 43, \[44], 45.
-\I\.{MAXBUFF}, \[16], 26.
-\I\.{MAXLEN}, \[9], 14.
-\I\.{MAXPATT}, \[16], 27, 31.
-\I\\{mode}, \[25], 26, 27, 44, 45, 47, 49, 51, 52, 53.
-\I\\{myalloc}, \[17], 18, 19.
-\I\|{n}, \[26].
-\I\\{next}, \[15], 18, 19, 23, 24, 29, 30, 31, 51, 52, 53.
-\I\\{nochar}, \[33], 34, 37, 39.
-\I\.{NOFOUND}, \[23], 24, 29, 30.
-\I\\{nomath}, \[7], 8, 43, 48.
-\I\\{normallist}, \[16], 26, 34, 35, 44, 47, 49, 51, 52, 53, 55.
-\I\\{normalpattern}, 17, 20, \[22], 40, 43, 48, 50, 54.
-\I\\{noverb}, \[7], 8, 50.
-\I\\{numchanges}, \[25], 27, 32, 36, 38.
-\I\\{numline}, \[25], 26, 27, 32, 38, 42.
+\I\\{malloc}, 20.
+\I\\{match}, \[26], 27, 32, 33.
+\I\\{mathin}, 46, \[47], 48.
+\I\\{mathlist}, \[36], 46, 47, 56.
+\I\.{MATHMODE}, \[28], 47, 56.
+\I\\{mathout}, 46, \[47], 48.
+\I\.{MAXBUFF}, \[18], 29.
+\I\.{MAXLEN}, 8, 10, \[11], 16.
+\I\.{MAXPATT}, \[18], 30, 34.
+\I\\{mode}, \[28], 29, 30, 47, 48, 50, 52, 54, 55, 56.
+\I\\{myalloc}, \[20], 21, 22.
+\I\|{n}, \[29].
+\I\\{next}, \[17], 21, 22, 26, 27, 32, 33, 34, 54, 55, 56.
+\I\\{nochar}, \[36], 37, 40, 42.
+\I\.{NOFOUND}, \[26], 27, 32, 33.
+\I\\{nomath}, \[7], 9, 46, 51.
+\I\\{normallist}, \[18], 29, 37, 38, 47, 50, 52, 54, 55, 56, 58.
+\I\\{normalpattern}, 20, 23, \[25], 43, 46, 51, 53, 57.
+\I\\{noverb}, \[7], 9, 53.
+\I\\{numchanges}, \[28], 30, 35, 39, 41.
+\I\\{numline}, \[28], 29, 30, 35, 41, 45.
\I\.{OK}, \[4], 5.
-\I\.{ONE}, \[15], 20, 22, 23, 34, 37, 39, 40, 43, 46, 50.
-\I\.{ONE\_NOT}, \[15], 23, 34, 37, 39, 43, 50.
-\I\\{onedollar}, 43, \[45].
-\I\\{openbrace}, \[33], 39.
-\I\\{outfile}, \[9], 12, 13, 25.
-\I\\{output}, \[26], 28.
-\I\|{p}, \[17], \[19], \[23], \[36], \[38].
-\I\\{parcheck}, \[33], 46, 49, 53.
-\I\&{PATITEM}, \[15], 16, 19, 23, 26.
-\I\\{patt}, \[15], 18, 19, 30, 31.
-\I\&{PATTERN}, \[15], 16, 18, 19, 22, 26, 33, 51.
-\I\\{pi}, \[26], 31.
-\I\\{pp}, \[18], \[22], \[26], 30, 31.
-\I\\{prefixes}, \[33], 34, 37, 39.
-\I\\{prevlist}, \[51], 52, 53.
-\I\\{prevmode}, \[51], 52, 53.
-\I\\{printusage}, \[6], 8, 12, 13.
-\I\\{printwarning}, \[42], 44, 45, 47, 49.
-\I\\{proc}, 15, 16, 18, 22, 29, 30.
-\I\\{prog\_name}, \[4], 5, 10, 14, 17.
-\I\\{pt}, \[16].
-\I\\{remove}, 13, 14.
-\I\\{rename}, 13, 14.
-\I\\{rmbackup}, \[7], 8, 13, 14.
-\I\\{setpattern}, 17, \[18], 22, 34, 37, 39, 43, 46, 50.
-\I\\{setpi}, 17, 18, \[19], 22, 34, 37, 39, 40, 43, 46, 50.
-\I\\{silent}, 5, \[7], 8, 14, 25, 26, 42.
-\I\\{size}, \[17].
-\I\\{status}, \[4], 5, 13, 42.
-\I\\{stderr}, 5, 6, 10, 14, 17, 26, 31, 32, 42.
-\I\\{stdin}, 12.
-\I\\{stdout}, 12.
-\I\\{str}, \[15], \[19], \[22], 23.
-\I\\{strchr}, 23, 36, 38.
-\I\\{strcpy}, 14.
-\I\\{strings}, \[20], 21, 22.
-\I\\{strlen}, 14.
-\I\\{tblanks}, \[33], 34, 37.
-\I\\{tblankscr}, \[33], 34, 37, 39.
-\I\.{TEXTMODE}, \[25], 27, 44, 45, 47, 49, 53.
-\I\\{tie}, 12, 13, 25, \[26], 32.
-\I\\{tielock}, 40, \[41].
-\I\\{tieoff}, 54, \[55].
-\I\\{tieon}, 54, \[55].
-\I\\{twodollars}, 48, \[49].
-\I\\{verbchar}, 50, \[51].
-\I\\{verbin}, 50, 51, \[52].
-\I\\{verbinchar}, 50, \[51].
-\I\\{verblist}, \[33], 50.
-\I\.{VERBMODE}, \[25], 26, 51, 52, 53.
-\I\\{verbout}, 50, \[53].
-\I\\{verboutlist}, 50, \[51], 52.
-\I\\{vlnkacr}, 37, \[38], 39.
-\I\\{vlnkain}, 34, \[36], 39.
-\I\\{vlnkalist}, \[33], 34, 35, 44, 47, 49, 53, 55.
-\I\.{WARNING}, \[4], 13, 42.
-\I\\{web}, \[7], 8, 26, 50, 53.
+\I\.{ONE}, \[17], 23, 25, 26, 37, 40, 42, 43, 46, 49, 53.
+\I\.{ONE\_NOT}, \[17], 26, 37, 40, 42, 46, 53.
+\I\\{onedollar}, 46, \[48].
+\I\\{openbrace}, \[36], 42.
+\I\\{outfile}, \[11], 14, 15, 28.
+\I\\{output}, \[29], 31.
+\I\|{p}, \[20], \[22], \[26], \[39], \[41].
+\I\\{parcheck}, \[36], 49, 52, 56.
+\I\&{PATITEM}, \[17], 18, 22, 26, 29.
+\I\\{patt}, \[17], 21, 22, 33, 34.
+\I\&{PATTERN}, \[17], 18, 21, 22, 25, 29, 36, 54.
+\I\\{pi}, \[29], 34.
+\I\\{pp}, \[21], \[25], \[29], 33, 34.
+\I\\{prefixes}, \[36], 37, 40, 42.
+\I\\{prevlist}, \[54], 55, 56.
+\I\\{prevmode}, \[54], 55, 56.
+\I\\{printusage}, \[6], 9, 10, 14, 15.
+\I\\{printwarning}, \[45], 47, 48, 50, 52.
+\I\\{proc}, 17, 18, 21, 25, 32, 33.
+\I\\{prog\_name}, \[4], 5, 12, 16, 20.
+\I\\{pt}, \[18].
+\I\\{remove}, 15, 16.
+\I\\{rename}, 15, 16.
+\I\\{rmbackup}, \[7], 9, 15, 16.
+\I\|{s}, \[10].
+\I\\{setpattern}, 20, \[21], 25, 37, 40, 42, 46, 49, 53.
+\I\\{setpi}, 20, 21, \[22], 25, 37, 40, 42, 43, 46, 49, 53.
+\I\\{settiestr}, 9, \[10].
+\I\\{silent}, 5, \[7], 9, 16, 28, 29, 45.
+\I\\{size}, \[20].
+\I\\{status}, \[4], 5, 15, 45.
+\I\\{stderr}, 5, 6, 12, 16, 20, 29, 34, 35, 45.
+\I\\{stdin}, 14.
+\I\\{stdout}, 14.
+\I\\{str}, \[17], \[22], \[25], 26.
+\I\\{strchr}, 26, 39, 41.
+\I\\{strcpy}, 16.
+\I\\{strings}, \[23], 24, 25.
+\I\\{strlen}, 10, 16.
+\I\\{tblanks}, \[36], 37, 40.
+\I\\{tblankscr}, \[36], 37, 40, 42.
+\I\.{TEXTMODE}, \[28], 30, 47, 48, 50, 52, 56.
+\I\\{tie}, 14, 15, 28, \[29], 35.
+\I\\{tielock}, 43, \[44].
+\I\\{tieoff}, 57, \[58].
+\I\\{tieon}, 57, \[58].
+\I\\{tiestr}, \[8], 9, 10, 39, 41.
+\I\\{tiestrlen}, \[8], 9, 10, 39, 41.
+\I\\{twodollars}, 51, \[52].
+\I\\{verbchar}, 53, \[54].
+\I\\{verbin}, 53, 54, \[55].
+\I\\{verbinchar}, 53, \[54].
+\I\\{verblist}, \[36], 53.
+\I\.{VERBMODE}, \[28], 29, 54, 55, 56.
+\I\\{verbout}, 53, \[56].
+\I\\{verboutlist}, 53, \[54], 55.
+\I\\{vlnkacr}, 40, \[41], 42.
+\I\\{vlnkain}, 37, \[39], 42.
+\I\\{vlnkalist}, \[36], 37, 38, 47, 50, 52, 56, 58.
+\I\.{WARNING}, \[4], 15, 45.
+\I\\{web}, \[7], 9, 29, 53, 56.
+\I\|{z}, \[39], \[41].
diff --git a/Build/source/utils/vlna/vlna.scn b/Build/source/utils/vlna/vlna.scn
index e15f1743d10..04038aa9e76 100644
--- a/Build/source/utils/vlna/vlna.scn
+++ b/Build/source/utils/vlna/vlna.scn
@@ -1,42 +1,42 @@
-\I\X4, 7, 15, 16, 20, 25, 33:Globální deklarace\X
+\I\X4, 7, 8, 17, 18, 19, 23, 28, 36:Globální deklarace\X
\U1.
\I\X3:Hlavičkové soubory k načtení\X
\U1.
\I\X5:Hlavní program\X
\U1.
-\I\X21, 34, 37, 39, 40, 43, 46, 48, 50, 54:Inicializace datových struktur\X
+\I\X24, 37, 40, 42, 43, 46, 49, 51, 53, 57:Inicializace datových struktur\X
\U5.
-\I\X27, 35:Inicializace proměnných při startu funkce \PB{\\{tie}}\X
-\U26.
-\I\X9:Lokální proměnné funkce \PB{\\{main}}\X
+\I\X30, 38:Inicializace proměnných při startu funkce \PB{\\{tie}}\X
+\U29.
+\I\X11:Lokální proměnné funkce \PB{\\{main}}\X
\U5.
-\I\X8:Načtení parametrů příkazového řádku\X
+\I\X9:Načtení parametrů příkazového řádku\X
\U5.
-\I\X30:Otevři nové patterny\X
-\U26.
-\I\X14:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej
+\I\X33:Otevři nové patterny\X
+\U29.
+\I\X16:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej
jako \PB{\\{infile}}\X
-\U13.
-\I\X6, 10, 17, 18, 19, 22, 23, 36, 38, 41, 42, 44, 45, 47, 49, 51, 52, 53,
-55:Pomocné funkce\X
+\U15.
+\I\X6, 10, 12, 20, 21, 22, 25, 26, 39, 41, 44, 45, 47, 48, 50, 52, 54, 55, 56,
+58:Pomocné funkce\X
\U1.
-\I\X29:Projdi otevřené patterny\X
-\U26.
-\I\X32:Tiskni závěrečnou zprávu\X
-\U26.
-\I\X26:Vlnkovací funkce \PB{\\{tie}}\X
+\I\X32:Projdi otevřené patterny\X
+\U29.
+\I\X35:Tiskni závěrečnou zprávu\X
+\U29.
+\I\X29:Vlnkovací funkce \PB{\\{tie}}\X
\U1.
-\I\X24:Vrať hodnotu podle následující pozice patternu\X
-\U23.
-\I\X28:Vyprázdni buffer\X
+\I\X27:Vrať hodnotu podle následující pozice patternu\X
\U26.
-\I\X31:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X
-\U30.
-\I\X11:Zpracování souborů\X
+\I\X31:Vyprázdni buffer\X
+\U29.
+\I\X34:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X
+\U33.
+\I\X13:Zpracování souborů\X
\Q6.
\U5.
-\I\X13:Zpracování všech souborů příkazové řádky\X
-\U11.
-\I\X12:Zpracování v režimu filter\X
-\U11.
+\I\X15:Zpracování všech souborů příkazové řádky\X
+\U13.
+\I\X14:Zpracování v režimu filter\X
+\U13.
diff --git a/Build/source/utils/vlna/vlna.tex b/Build/source/utils/vlna/vlna.tex
index b28f72cfa88..ee18bfffdef 100644
--- a/Build/source/utils/vlna/vlna.tex
+++ b/Build/source/utils/vlna/vlna.tex
@@ -21,7 +21,7 @@ Program sestává z těchto hlavních celků:
\Y\B\X3:Hlavičkové soubory k načtení\X\6
\X4:Globální deklarace\X\6
\X6:Pomocné funkce\X\6
-\X26:Vlnkovací funkce \PB{\\{tie}}\X\6
+\X29:Vlnkovací funkce \PB{\\{tie}}\X\6
\X5:Hlavní program\X\par
\fi
@@ -35,8 +35,8 @@ Tu cestinu si vynutil fakt, že DOS-ovská varianta \.{tangle} a
\.{weave} se nesnáší s~akcentovanými písmeny v~/* komentářích */.
A~nyní už slíbený (vícejazyčný) \PB{\.{BANNER}}.
\Y\B\4\D$\.{BANNER}$ \5
-\.{"This\ is\ program\ vln}\)\.{a,\ version\ 1.2,\ (c)\ }\)\.{1995,\ 2002\ Petr%
-\ Olsa}\)\.{k\\n"}\par
+\.{"This\ is\ program\ vln}\)\.{a,\ version\ 1.5,\ (c)\ }\)\.{1995,\ 2002,\
+2009,\ 20}\)\.{10\ Petr\ Olsak\\n"}\par
\fi
\M{3}V programu jsou použity knihovní funkce, jejíchž prototypy jsou
@@ -68,7 +68,7 @@ nultého parametru příkazové řádky.
\Y\B\4\X4:Globální deklarace\X${}\E{}$\6
\&{char} ${}{*}\\{prog\_name};{}$\6
\&{int} \\{status};\par
-\As7, 15, 16, 20, 25\ETs33.
+\As7, 8, 17, 18, 19, 23, 28\ETs36.
\U1.\fi
\M{5}Základní rozvržení funkce \PB{\\{main}}.
@@ -76,14 +76,14 @@ nultého parametru příkazové řádky.
\&{int} \\{main}(\&{int} \\{argc}${},\39{}$\&{char} ${}{*}{*}\\{argv}){}$\1\1\2%
\2\6
${}\{{}$\1\6
-\X9:Lokální proměnné funkce \PB{\\{main}}\X;\6
+\X11:Lokální proměnné funkce \PB{\\{main}}\X;\6
${}\\{prog\_name}\K\\{argv}[\T{0}];{}$\6
${}\\{status}\K\.{OK};{}$\6
-\X8:Načtení parametrů příkazového řádku\X;\6
+\X9:Načtení parametrů příkazového řádku\X;\6
\&{if} ${}(\R\\{silent}){}$\1\5
${}\\{fprintf}(\\{stderr},\39\.{BANNER});{}$\2\6
-\X21:Inicializace datových struktur\X;\6
-\X11:Zpracování souborů\X;\6
+\X24:Inicializace datových struktur\X;\6
+\X13:Zpracování souborů\X;\6
\&{return} \\{status};\6
\4${}\}{}$\2\par
\U1.\fi
@@ -93,7 +93,7 @@ Program čte z~příkazového řádku postupně (nepovinné) parametry,
které začínají znakem \uv{\.{-}}. Pak následují jména vstupních a výstupních
souborů.
\begitems
-* \.{-f} \dots\ program pracuje jako filtr (viz sekce \PB{$\X11:Zpracování
+* \.{-f} \dots\ program pracuje jako filtr (viz sekce \PB{$\X13:Zpracování
souborů\X$}). Není-li tento parametr použit, program pracuje v tzv.
standardním režimu, kdy jednotlivé soubory jsou vstupní i výstupní.
* \.{-s} \dots\ program nevypíše \PB{\.{BANNER}}, ani sumarizaci, ani varování,
@@ -107,6 +107,10 @@ tento parametr vliv.
interpretovány jako neslabičné předložky.
Např. \.{-v KkSsVvZzOoUuAI}. Pokud není parametr uveden, je použita
skupina uvedená v tomto příkladě.
+* \.{-x} \dots\ parametr vymezuje pomocí hexadecimálního zápisu string,
+který program vkládá na vyhledaná místa. Implicitně vkládá vlnku.
+Například \.{-x C2A0} způsobí, že program bude vkládat místo vlnky dva byty,
+první s kódem \.{C2} a druhý s kódem \.{A0}.
* \.{-m} \dots\ program neprovádí kontrolu math/text módů, tj. vlnkuje i
uvnitř matematického módu \TeX{}u. (Implicite tam nevlnkuje).
* \.{-n} \dots\ prorgram neprovádí kontrolu verbatim módu, tj. vlnkuje i
@@ -119,7 +123,7 @@ používanými v dokumentech WEB (např. tento dokument). Důsledek: program
vlnkuje dokumentační část každé sekce, ale nikoli kód.
\enditems
-Definujeme funkci \PB{\\{printusage}}, které tiskne (při chybě) stručný přehled
+Definujeme funkci \PB{\\{printusage}}, která tiskne (při chybě) stručný přehled
možných parametrů. Nepodařilo se mi zjistit, jak se ve WEBu napíše
kulturně dlouhý string obsahující \.{\char92n} s formátovacími
požadavky. Byl jsem nucen to takto nehezky zapsat.
@@ -136,12 +140,13 @@ file1\ \ \ \ \ \ \ ..}\)\.{.\ file1->stdout\\n"}\.{"\ \ \ \ \ \ \ \ \ \ \ \ \ \
messages\ to\ stde}\)\.{rr\\n"}\.{"\ \ \ \ \ \ -r\ :\ \ rmbacku}\)\.{p:\ if\
nofilter,\ remo}\)\.{ves\ temporary\ files\\}\)\.{n"}\.{"\ \ \ \ \ \ -v\
charset\ :\ }\)\.{\ set\ of\ lettres\ to\ a}\)\.{dd\ tie,\ default:\ KkS}\)%
-\.{sVvZzOoUuAI\\n"}\.{"\ \ \ \ \ \ -m\ :\ \ nomath:}\)\.{\ ignores\ math\ modes%
-\\}\)\.{n"}\.{"\ \ \ \ \ \ -n\ :\ \ noverb:}\)\.{\ ignores\ verbatim\ mo}\)%
-\.{des\\n"}\.{"\ \ \ \ \ \ -l\ :\ \ LaTeX\ m}\)\.{ode\\n"}\.{"\ \ \ \ \ \ -w\ :%
-\ \ web\ mod}\)\.{e\\n"});{}$\6
+\.{sVvZzOoUuAI\\n"}\.{"\ \ \ \ \ \ -x\ code\ :\ cod}\)\.{e\ for\ tie\ symbol,\
+de}\)\.{fault:\ 7E,\ example\ -}\)\.{x\ C2A0\\n"}\.{"\ \ \ \ \ \ -m\ :\ \
+nomath:}\)\.{\ ignores\ math\ modes\\}\)\.{n"}\.{"\ \ \ \ \ \ -n\ :\ \ noverb:}%
+\)\.{\ ignores\ verbatim\ mo}\)\.{des\\n"}\.{"\ \ \ \ \ \ -l\ :\ \ LaTeX\ m}\)%
+\.{ode\\n"}\.{"\ \ \ \ \ \ -w\ :\ \ web\ mod}\)\.{e\\n"});{}$\6
\4${}\}{}$\2\par
-\As10, 17, 18, 19, 22, 23, 36, 38, 41, 42, 44, 45, 47, 49, 51, 52, 53\ETs55.
+\As10, 12, 20, 21, 22, 25, 26, 39, 41, 44, 45, 47, 48, 50, 52, 54, 55, 56\ETs58.
\U1.\fi
\M{7}Proměnné \PB{\\{isfilter}}, \PB{\\{silent}}, \PB{\\{rmbackup}}, \PB{%
@@ -159,7 +164,19 @@ použití parametru \.{-v}) na text uvedený v příkazovém řádku.
\&{char} ${}{*}\\{charset}\K\\{charsetdefault}{}$;\par
\fi
-\M{8}\B\X8:Načtení parametrů příkazového řádku\X${}\E{}$\6
+\M{8}String \PB{\\{tiestr}} obsahuje string, kterým se má nahradit vyhledané
+místo. Pokud není použit parametr \.{-u}, je tento string jadnoznakový
+a obsahuje vlnku. Jinak obsahuje string konvertovaný z parametru \.{-u}.
+String má délku \PB{\\{tiestrlen}} bez ohledu na to, zda obsahuje nebo
+neobsahuje nulové znaky (C-čková konvence pro stringy není použita).
+\Y\B\4\X4:Globální deklarace\X${}\mathrel+\E{}$\6
+\&{unsigned} \&{char} \\{tiestr}[\.{MAXLEN}];\6
+\&{int} \\{tiestrlen};\par
+\fi
+
+\M{9}\B\X9:Načtení parametrů příkazového řádku\X${}\E{}$\6
+$\\{tiestr}[\T{0}]\K\.{'\~'};{}$\6
+${}\\{tiestrlen}\K\T{1};{}$\6
\&{while} ${}(\\{argc}>\T{1}\W\\{argv}[\T{1}][\T{0}]\E\.{'-'}){}$\5
${}\{{}$\1\6
\&{if} ${}(\\{argv}[\T{1}][\T{2}]\I\T{0}){}$\1\5
@@ -182,6 +199,13 @@ ${}\\{argv}\PP;{}$\6
${}\\{argc}\MM;{}$\6
${}\\{charset}\K\\{argv}[\T{1}];{}$\6
\&{break};\6
+\4\&{case} \.{'x'}:\6
+\&{if} ${}(\\{argc}<\T{2}){}$\1\5
+${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\2\6
+${}\\{argv}\PP;{}$\6
+${}\\{argc}\MM;{}$\6
+\\{settiestr}(\\{argv}[\T{1}]);\6
+\&{break};\6
\4\&{case} \.{'m'}:\5
${}\\{nomath}\K\T{1};{}$\6
\&{break};\6
@@ -203,18 +227,48 @@ ${}\\{argv}\PP;{}$\6
\4${}\}{}$\2\par
\U5.\fi
-\N{1}{9}Zpracování souborů. Parametr \PB{\.{MAXLEN}} definuje maximální možnou
+\M{10}Vyřešíme konverzi kódu zapsaného za parametrem \.{-x} na string \PB{%
+\\{tiestr}}.
+\Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
+\&{unsigned} \&{char} \\{hexnum}(\&{char} \|c)\1\1\2\2\6
+${}\{{}$\1\6
+\&{if} ${}(\|c\G\.{'0'}\W\|c\Z\.{'9'}){}$\1\5
+\&{return} \|c${}-\.{'0'};{}$\2\6
+\&{if} ${}(\|c\G\.{'A'}\W\|c\Z\.{'F'}){}$\1\5
+\&{return} \|c${}-\.{'A'}+\T{10};{}$\2\6
+\&{if} ${}(\|c\G\.{'a'}\W\|c\Z\.{'f'}){}$\1\5
+\&{return} \|c${}-\.{'a'}+\T{10};{}$\2\6
+${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\6
+\4${}\}{}$\2\7
+\&{void} \\{settiestr}(\&{char} ${}{*}\|s){}$\1\1\2\2\6
+${}\{{}$\1\6
+\&{int} \|i${},{}$ \|j${},{}$ \|c;\7
+${}\|i\K\\{strlen}(\|s);{}$\6
+\&{if} ${}((\|i>\T{2}*\.{MAXLEN})\V\|i\MOD\T{2}\E\T{1}){}$\1\5
+${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\2\6
+${}\\{tiestrlen}\K\|i/\T{2};{}$\6
+${}\|j\K\T{0};{}$\6
+\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\\{tiestrlen};{}$ ${}\|i\PP){}$\5
+${}\{{}$\1\6
+${}\\{tiestr}[\|i]\K\\{hexnum}(\|s[\|j\PP])\LL\T{4};{}$\6
+${}\\{tiestr}[\|i]\MRL{+{\K}}\\{hexnum}(\|s[\|j\PP]);{}$\6
+\4${}\}{}$\2\6
+\4${}\}{}$\2\par
+\fi
+
+\N{1}{11}Zpracování souborů. Parametr \PB{\.{MAXLEN}} definuje maximální
+možnou
délku jména souboru, který vytvoříme jako přechodný, nebo zálohový.
Dále deklarujeme proměnné typu \uv{stream}.
\Y\B\4\D$\.{MAXLEN}$ \5
\T{120}\par
-\Y\B\4\X9:Lokální proměnné funkce \PB{\\{main}}\X${}\E{}$\6
+\Y\B\4\X11:Lokální proměnné funkce \PB{\\{main}}\X${}\E{}$\6
\&{FILE} ${}{*}\\{infile},{}$ ${}{*}\\{outfile};{}$\6
\&{char} \\{backup}[\.{MAXLEN}];\6
\&{int} \|j;\par
\U5.\fi
-\M{10}Definujeme funkci pro výpis chybového hlášení při neúspěšném otevření
+\M{12}Definujeme funkci pro výpis chybového hlášení při neúspěšném otevření
souboru.
\Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
\&{static} \&{void} \\{ioerr}(\&{char} ${}{*}\|f){}$\1\1\2\2\6
@@ -224,14 +278,14 @@ ${}\\{fprintf}(\\{stderr},\39\.{"\%s:\ cannot\ open\ fil}\)\.{e\ \%s\\n"},\39%
\4${}\}{}$\2\par
\fi
-\M{11}Způsob zpracování souborů rozlišíme podle režimu daným přepínačem \.{-f}.
-\Y\B\4\X11:Zpracování souborů\X${}\E{}$\6
-\&{if} (\\{isfilter}) \X12:Zpracování v režimu filter\X\6
-\&{else} \X13:Zpracování všech souborů příkazové řádky\X\par
+\M{13}Způsob zpracování souborů rozlišíme podle režimu daným přepínačem \.{-f}.
+\Y\B\4\X13:Zpracování souborů\X${}\E{}$\6
+\&{if} (\\{isfilter}) \X14:Zpracování v režimu filter\X\6
+\&{else} \X15:Zpracování všech souborů příkazové řádky\X\par
\Q6.
\U5.\fi
-\M{12}V režimu \PB{$\\{isfilter}\E\T{1}$} je další zpracování závislé na počtu
+\M{14}V režimu \PB{$\\{isfilter}\E\T{1}$} je další zpracování závislé na počtu
souborů v
příkazové řádce:
\begitems
@@ -240,7 +294,7 @@ příkazové řádce:
* dva soubory -- první je vstupní, druhý výstupní,
* více souborů -- program skončí s chybou.
\enditems
-\Y\B\4\X12:Zpracování v režimu filter\X${}\E{}$\6
+\Y\B\4\X14:Zpracování v režimu filter\X${}\E{}$\6
${}\{{}$\1\6
\&{if} ${}(\\{argc}>\T{3}){}$\1\5
${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\2\6
@@ -264,9 +318,9 @@ ${}\\{tie}(\\{infile},\39\\{outfile});{}$\6
\&{if} ${}(\\{infile}\I\\{stdin}){}$\1\5
\\{fclose}(\\{infile});\2\6
\4${}\}{}$\2\par
-\U11.\fi
+\U13.\fi
-\M{13}V~režimu \PB{$\\{isfilter}\E\T{0}$} jsou jednotlivé soubory v~příkazovém
+\M{15}V~režimu \PB{$\\{isfilter}\E\T{0}$} jsou jednotlivé soubory v~příkazovém
řádku
interpretovány jako vstupní i výstupní. Více souborů v~příkazovém řádku má
stejný efekt, jako opakované volání programu na jednotlivé soubory.
@@ -275,7 +329,7 @@ všech souborů s~příponou~\.{tex}. Toto neplatí v~DOSu, protože interpretace
masky je v~\UNIX/u starostí shellu a nikoli programu samotného. Náš program
masku nebude interpretovat. Je-li v~tomto režimu nulový počet souborů,
program se ukončí s~chybou.
-\Y\B\4\X13:Zpracování všech souborů příkazové řádky\X${}\E{}$\6
+\Y\B\4\X15:Zpracování všech souborů příkazové řádky\X${}\E{}$\6
${}\{{}$\1\6
\&{if} ${}(\\{argc}\E\T{1}){}$\1\5
${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\2\6
@@ -283,7 +337,7 @@ ${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\2\6
${}\{{}$\1\6
${}\\{argc}\MM;{}$\6
${}\\{argv}\PP;{}$\6
-\X14:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej jako %
+\X16:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej jako %
\PB{\\{infile}}\X;\6
\&{if} ${}(\\{infile}\E\NULL){}$\5
${}\{{}$\1\6
@@ -305,9 +359,9 @@ ${}\\{fclose}(\\{outfile}),\39\\{fclose}(\\{infile});{}$\6
\\{remove}(\\{backup});\2\6
\4${}\}{}$\2\6
\4${}\}{}$\2\par
-\U11.\fi
+\U13.\fi
-\M{14}Při \PB{$\\{isfilter}\E\T{0}$} program přejmenuje každý zpracovávaný
+\M{16}Při \PB{$\\{isfilter}\E\T{0}$} program přejmenuje každý zpracovávaný
soubor tak, že
změní poslední písmeno názvu souboru na znak \.{\char126}. Tento
přejmenovaný soubor bude otevřen jako vstupní a výstupem bude původní
@@ -317,7 +371,7 @@ záloha.
Proč vlnku nepřidáváme na konec názvu souboru, ale měníme ji za poslední
znak souboru? Protože chceme, aby program fungoval i v tak nemožných
systémech, jako je DOS.
-\Y\B\4\X14:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej
+\Y\B\4\X16:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej
jako \PB{\\{infile}}\X${}\E{}$\6
$\\{infile}\K\NULL;{}$\6
${}\|j\K\\{strlen}(\\{argv}[\T{0}])-\T{1};{}$\6
@@ -336,9 +390,9 @@ ${}\|j\K\\{rename}(\\{argv}[\T{0}],\39\\{backup});{}$\6
\&{if} ${}(\|j\E\T{0}){}$\1\5
${}\\{infile}\K\\{fopen}(\\{backup},\39\.{"r"});{}$\2\6
\4${}\}{}$\2\par
-\U13.\fi
+\U15.\fi
-\N{1}{15}Patterny. Abychom mohli účelně definovat chování programu
+\N{1}{17}Patterny. Abychom mohli účelně definovat chování programu
v~různých situacích, zavedeme datovou strukturu \PB{\.{PATTERN}}. Zhruba
řečeno, budeme sledovat vstup znak po znaku a pokud bude část vstupu
souhlasit s~definovaným patternem, provedeme námi požadovanou
@@ -392,7 +446,7 @@ patternu }\2\6
${}\}{}$ \&{PATTERN};\par
\fi
-\M{16}Deklarujeme některé globální proměnné pro práci s~patterny. \PB{\\{lapi}}
+\M{18}Deklarujeme některé globální proměnné pro práci s~patterny. \PB{\\{lapi}}
je pole
obsahující ukazatele na aktuální pozice v~otevřených patternech. Říkáme,
že \uv{pattern je otevřen}, pokud zkoumaný řetězec s~ním {\it začíná\/}
@@ -453,7 +507,24 @@ patterny }\6
\&{int} \\{ind};\C{ aktualni pozice prechodneho bufferu }\par
\fi
-\M{17}Nyní definujeme pomocné funkce \PB{\\{setpattern}}, \PB{\\{setpi}} a \PB{%
+\M{19}Dne 30. 4. 2009 jsem přidal možnost čtení vstupu, který obsahuje nulové
+byty.
+Takové nuly se přepisují do výstupu, ale program si jich nevšímá při
+procházení patternů. Tím je možno program použít na soubory kódované
+v UTF16, ačkoli patterny obsahují jen jednobytové ASCII znaky.
+Buffer \PB{\\{buff}} může obsahovat i nulové byty, které je třeba přepsat do
+výstupu.
+Na druhé straně buffer \PB{\\{buffnz}} obsahuje jen nenulové byty, na které se
+někdy ptáme při pohledu dozadu. Nejdelší pohled dozadu je o čtyři byty.
+Udělám tedy \PB{\\{buffnz}} osmibytový, začnu jej plnit od \PB{\\{buffnz}}[4]
+a kdykoli je buffer zcela zaplněn, přesunu horní čtyři byty na spodní a dále
+pokračuji v plnění bufferu od pozice \PB{\\{buffnz}}[4].
+\Y\B\4\X4:Globální deklarace\X${}\mathrel+\E{}$\6
+\&{char} \\{buffnz}[\T{8}];\6
+\&{int} \\{inz};\par
+\fi
+
+\M{20}Nyní definujeme pomocné funkce \PB{\\{setpattern}}, \PB{\\{setpi}} a \PB{%
\\{normalpattern}}.
Tyto funkce alokují paměť pomocí standardní funkce \PB{\\{malloc}}. Abychom
mohli
@@ -474,7 +545,7 @@ ${}\\{fprintf}(\\{stderr},\39\.{"\%s,\ no\ memory,\ mall}\)\.{oc\ failed\\n"},%
\4${}\}{}$\2\par
\fi
-\M{18}Funkce \PB{\\{setpattern}} alokuje paměťové místo struktury \PB{%
+\M{21}Funkce \PB{\\{setpattern}} alokuje paměťové místo struktury \PB{%
\&{PATTERN}} a napojí
ji pomocí proměnné \PB{\\{lastpt}} na už alokovaný řetěz patternů.
Vrátí ukazatel na nově alokované místo. Jednotlivé pozice patternu se musí
@@ -496,7 +567,7 @@ ${}\\{lastpi}\K\NULL;{}$\6
\4${}\}{}$\2\par
\fi
-\M{19}Funkce \PB{\\{setpi}} alokuje paměťové místo pro jednu pozici patternu.
+\M{22}Funkce \PB{\\{setpi}} alokuje paměťové místo pro jednu pozici patternu.
Provede
zřetězení tak, aby první pozice řetězu pozic byla zaznamenána v položce
\PB{\\{patt}} ve struktuře \PB{\&{PATTERN}} a další byly provázány položkou %
@@ -519,7 +590,7 @@ ${}\\{lastpi}\K\|p;{}$\6
\4${}\}{}$\2\par
\fi
-\M{20}Připravme si půdu pro funkci \PB{\\{normalpattern}}. Tato funkce alokuje
+\M{23}Připravme si půdu pro funkci \PB{\\{normalpattern}}. Tato funkce alokuje
strukturu pro jeden pattern včetně pozic patternu na základě vstupního
stringu. Každá pozice patternu obsahuje v~množině znaků jediný znak a má
\PB{$\\{flag}\K\.{ONE}$}. Znaky ve vstupním stringu odpovídají po řadě
@@ -535,17 +606,17 @@ Nejdříve deklarujeme pole všech možných jednopísmenných stringů.
\&{int} \|i;\par
\fi
-\M{21}Inicializujeme toto pole (znak, nula, znak, nula, atd...).
-\Y\B\4\X21:Inicializace datových struktur\X${}\E{}$\6
+\M{24}Inicializujeme toto pole (znak, nula, znak, nula, atd...).
+\Y\B\4\X24:Inicializace datových struktur\X${}\E{}$\6
\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\T{256};{}$ ${}\|i\PP){}$\5
${}\{{}$\1\6
${}\\{strings}[\T{2}*\|i]\K{}$(\&{char}) \|i;\6
${}\\{strings}[\T{2}*\|i+\T{1}]\K\T{0};{}$\6
\4${}\}{}$\2\par
-\As34, 37, 39, 40, 43, 46, 48, 50\ETs54.
+\As37, 40, 42, 43, 46, 49, 51, 53\ETs57.
\U5.\fi
-\M{22}Definujme funkci \PB{\\{normalpattern}}.
+\M{25}Definujme funkci \PB{\\{normalpattern}}.
\Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
\&{static} \&{PATTERN} ${}{*}\\{normalpattern}(\&{void}({*}\\{proc})(\&{void}),%
\39{}$\&{const} \&{char} ${}{*}\\{str}){}$\1\1\2\2\6
@@ -572,7 +643,7 @@ ${}\|j\PP;{}$\6
\4${}\}{}$\2\par
\fi
-\M{23}Funkce \PB{\\{match}}. Definujeme funkci, která na základě hodnoty znaku %
+\M{26}Funkce \PB{\\{match}}. Definujeme funkci, která na základě hodnoty znaku %
\PB{\|c}
(proměnná \PB{\|c} je definována jako globální), a pozice patternu \PB{\|p}
(parametr
@@ -615,16 +686,16 @@ ${}\{{}$\1\6
\4\&{case} \.{ONE\_NOT}:\5
\&{return} \.{NOFOUND};\C{ Nesouhlas }\6
\4\&{case} \.{ANY\_NOT}:\5
-\X24:Vrať hodnotu podle následující pozice patternu\X;\6
+\X27:Vrať hodnotu podle následující pozice patternu\X;\6
\4${}\}{}$\2\6
\&{return} \T{0};\C{ Tady bychom nikdy nemeli byt, return pro potlaceni
varovani }\6
\4${}\}{}$\2\par
\fi
-\M{24}O kolik pozic je třeba se posunout a s jakým výsledkem zjistíme
+\M{27}O kolik pozic je třeba se posunout a s jakým výsledkem zjistíme
rekurzivním voláním funkce \PB{\\{match}}.
-\Y\B\4\X24:Vrať hodnotu podle následující pozice patternu\X${}\E{}$\6
+\Y\B\4\X27:Vrať hodnotu podle následující pozice patternu\X${}\E{}$\6
\&{switch} ${}(\|m\K\\{match}(\|p\MG\\{next})){}$\5
${}\{{}$\1\6
\4\&{case} \.{NOFOUND}:\5
@@ -634,9 +705,9 @@ ${}\{{}$\1\6
\4\&{default}:\5
\&{return} \T{1}${}+\|m;{}$\6
\4${}\}{}$\2\par
-\U23.\fi
+\U26.\fi
-\N{1}{25}Vlnkovací funkce.
+\N{1}{28}Vlnkovací funkce.
Nejprve připravíme globální deklarace pro \uv{vlnkovací} funkci \PB{\\{tie}}.
Funkce \PB{\\{tie}} \uv{ovlnkuje} vstupní soubor \PB{\\{infile}} a vytvoří
soubor
@@ -664,12 +735,12 @@ statistiku }\6
\&{int} \\{mode};\par
\fi
-\M{26}Nyní definujeme vlnkovací funkci \PB{\\{tie}}. Veškerá činnost se opírá o
+\M{29}Nyní definujeme vlnkovací funkci \PB{\\{tie}}. Veškerá činnost se opírá o
strukturu patternů. Výhodné je (z důvodu rychlosti) \uv{natvrdo} zde
implementovat jen přepínání mezi stavem čtení z oblasti komentáře
(\PB{$\\{listpatt}\E\\{commentlist}$}) a mimo komentář (\PB{$\\{listpatt}\E%
\\{normallist}$});
-\Y\B\4\X26:Vlnkovací funkce \PB{\\{tie}}\X${}\E{}$\6
+\Y\B\4\X29:Vlnkovací funkce \PB{\\{tie}}\X${}\E{}$\6
\&{static} \&{void} \\{tie}(\&{FILE} ${}{*}\\{input},\39{}$\&{FILE} ${}{*}%
\\{output}){}$\1\1\2\2\6
${}\{{}$\1\6
@@ -678,12 +749,12 @@ ${}\{{}$\1\6
\&{int} \\{ic};\6
\&{PATTERN} ${}{*}\\{pp};{}$\6
\&{PATITEM} ${}{*}\\{pi};{}$\7
-\X27:Inicializace proměnných při startu funkce \PB{\\{tie}}\X;\6
+\X30:Inicializace proměnných při startu funkce \PB{\\{tie}}\X;\6
\&{while} ${}(\R\\{feof}(\\{input})){}$\5
${}\{{}$\1\6
-\X30:Otevři nové patterny\X;\6
\&{if} ${}(\\{ap}\E\T{0}\W\\{ind}>\.{BUFI}\W\|c\I\.{'\\\\'}){}$\1\5
-\X28:Vyprázdni buffer\X;\2\6
+\X31:Vyprázdni buffer\X;\2\6
+\X33:Otevři nové patterny\X;\C{ 1. 2. 2010: prohozene poradi }\6
\&{if} ${}(\\{ind}\G\.{MAXBUFF}){}$\5
${}\{{}$\1\6
${}\\{fprintf}(\\{stderr},\39\.{"Operating\ buffer\ ov}\)\.{erflow,\ is\
@@ -694,34 +765,47 @@ anything\ }\)\.{wrong?\\n"});{}$\6
\1\6
\&{break};\2\6
${}\\{buff}[\\{ind}\PP]\K\|c\K\\{ic};{}$\6
+\&{if} ${}(\|c\E\T{0}){}$\1\5
+\&{continue};\C{ 30. 4. 2009 }\2\6
+\&{if} ${}(\\{inz}\G\T{8}){}$\5
+${}\{{}$\1\6
+\&{for} ${}(\\{inz}\K\T{0};{}$ ${}\\{inz}<\T{4};{}$ ${}\\{inz}\PP){}$\1\5
+${}\\{buffnz}[\\{inz}]\K\\{buffnz}[\\{inz}+\T{4}];{}$\2\6
+${}\\{inz}\K\T{4};{}$\6
+\4${}\}{}$\2\6
+${}\\{buffnz}[\\{inz}\PP]\K\|c;{}$\6
\&{if} ${}(\|c\E\.{'\\n'}){}$\1\5
${}\\{numline}\PP,\39\\{listpatt}\K\\{normallist};{}$\2\6
-\&{if} ${}(\|c\E\.{'\%'}\W\\{mode}\I\.{VERBMODE}\W\\{buff}[\\{ind}-\T{2}]\I\.{'%
-\\\\'}){}$\1\5
+\&{if} ${}(\|c\E\.{'\%'}\W\\{mode}\I\.{VERBMODE}\W\\{buffnz}[\\{inz}-\T{2}]\I%
+\.{'\\\\'}){}$\1\5
${}\\{listpatt}\K\\{commentlist};{}$\2\6
-\X29:Projdi otevřené patterny\X;\6
+\X32:Projdi otevřené patterny\X;\6
\4${}\}{}$\2\6
-\X28:Vyprázdni buffer\X;\6
+\X31:Vyprázdni buffer\X;\6
\&{if} ${}(\R\\{web}){}$\1\5
\\{checkmode}(\,);\C{ zaverecna kontrola modu }\2\6
\&{if} ${}(\R\\{silent}){}$\1\5
-\X32:Tiskni závěrečnou zprávu\X;\2\6
+\X35:Tiskni závěrečnou zprávu\X;\2\6
\4${}\}{}$\2\par
\U1.\fi
-\M{27}\B\X27:Inicializace proměnných při startu funkce \PB{\\{tie}}\X${}\E{}$\6
+\M{30}\B\X30:Inicializace proměnných při startu funkce \PB{\\{tie}}\X${}\E{}$\6
\&{for} ${}(\|k\K\T{0};{}$ ${}\|k<\.{MAXPATT};{}$ ${}\|k\PP){}$\1\5
${}\\{lapi}[\|k]\K\NULL;{}$\2\6
${}\|c\K\.{'\\n'};{}$\6
-${}\\{buff}[\T{0}]\K\\{mode}\K\\{ap}\K\T{0};{}$\6
+${}\\{buff}[\T{0}]\K\T{1};{}$\6
+${}\\{mode}\K\\{ap}\K\T{0};{}$\6
${}\\{ind}\K\T{1};{}$\6
+\&{for} ${}(\\{inz}\K\T{0};{}$ ${}\\{inz}<\T{4};{}$ ${}\\{inz}\PP){}$\1\5
+${}\\{buffnz}[\\{inz}]\K\T{0};{}$\2\6
+${}\\{inz}\K\T{4};{}$\6
${}\\{numline}\K\T{1};{}$\6
${}\\{numchanges}\K\T{0};{}$\6
${}\\{mode}\K\.{TEXTMODE}{}$;\par
-\A35.
-\U26.\fi
+\A38.
+\U29.\fi
-\M{28}Při manipulaci s bufferem byl použit jeden trik. Veškeré načtené znaky
+\M{31}Při manipulaci s bufferem byl použit jeden trik. Veškeré načtené znaky
začínají až od \PB{\\{buff}[\T{1}]}, zatímco \PB{\\{buff}[\T{0}]} je rovno
nule. Je to proto, že
některé algoritmy se vrací o jeden znak zpět za svůj pattern, aby zjistily,
@@ -730,16 +814,19 @@ zda tam není symbol \uv{\.{\char92}} (například na výskyt sekvence
procenta). Kdybychm zazačali od \PB{\\{buff}[\T{0}]}, v některých situacích
bychom se ptali, zda \PB{$\\{buff}[{-}\T{1}]\E\.{'\\\\'}$}, tj. sahali bychom
na neošetřené
-místo v paměti.
-\Y\B\4\X28:Vyprázdni buffer\X${}\E{}$\6
+místo v paměti. Od 30. 4. 2009 tento problém pominul, protože se ptáme dozadu
+pouze
+v~\PB{\\{buffnz}}, ale vlastnost dříve implementovanou v \PB{\\{buff}} jsem
+ponechal beze změny.
+\Y\B\4\X31:Vyprázdni buffer\X${}\E{}$\6
${}\{{}$\1\6
-${}\\{buff}[\\{ind}]\K\T{0};{}$\6
-${}\\{fputs}({\AND}\\{buff}[\T{1}],\39\\{output});{}$\6
+${}\\{fwrite}({\AND}\\{buff}[\T{1}],\39\\{ind}-\T{1},\39\T{1},\39%
+\\{output});{}$\6
${}\\{ind}\K\T{1};{}$\6
\4${}\}{}$\2\par
-\U26.\fi
+\U29.\fi
-\M{29}Při procházení otevřenými patterny posunujeme v poli \PB{\\{lapi}} pozice
+\M{32}Při procházení otevřenými patterny posunujeme v poli \PB{\\{lapi}} pozice
jednotlivých patternů podle pokynů funkce \PB{\\{match}}, případně pattern
zavřeme
a případně vyvoláme proceduru patternu.
@@ -747,7 +834,7 @@ a případně vyvoláme proceduru patternu.
Některé patterny v poli \PB{\\{lapi}} už mohou být zavřeny, takže je nutno s
tímto
polem pracovat jako s jakýmsi děravým sýrem.
-\Y\B\4\X29:Projdi otevřené patterny\X${}\E{}$\6
+\Y\B\4\X32:Projdi otevřené patterny\X${}\E{}$\6
$\|n\K\\{ap};{}$\6
${}\|k\K\T{0};{}$\6
\&{while} (\|n)\5
@@ -770,15 +857,16 @@ ${}\\{lapi}[\|k]\K\\{lapi}[\|k]\MG\\{next}{}$;\C{ dalsi pozice patternu }\2\6
${}\|k\PP;{}$\6
${}\|n\MM;{}$\6
\4${}\}{}$\2\par
-\U26.\fi
+\U29.\fi
-\M{30}Při otevírání nových patternů, které nejsou v tuto chvíli zablokovány,
+\M{33}Při otevírání nových patternů, které nejsou v tuto chvíli zablokovány,
se hned vypořádáme s takovými patterny, které nám dávají rovnou odpověď
typu \PB{\.{FOUND}} nebo \PB{\.{NOFOUND}}. V takových případech ani nezanášíme
ukazatel
na pozici do pole \PB{\\{lapi}}.
-\Y\B\4\X30:Otevři nové patterny\X${}\E{}$\6
+\Y\B\4\X33:Otevři nové patterny\X${}\E{}$\6
$\\{pp}\K\\{listpatt};{}$\6
+\&{if} (\|c)\1\6
\&{while} ${}(\\{pp}\I\NULL){}$\5
${}\{{}$\1\6
\&{switch} ${}(\|m\K\\{match}(\\{pp}\MG\\{patt})){}$\5
@@ -788,18 +876,18 @@ ${}({*}\\{pp}\MG\\{proc})(\,){}$;\C{ spustit proceduru }\6
\4\&{case} \.{NOFOUND}:\5
\&{break};\6
\4\&{default}:\5
-\X31:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X;\6
+\X34:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X;\6
\4${}\}{}$\2\6
${}\\{pp}\K\\{pp}\MG\\{next};{}$\6
-\4${}\}{}$\2\par
-\U26.\fi
+\4${}\}{}$\2\2\par
+\U29.\fi
-\M{31}Není-li hned známa odpověď, zda pattern vyhovuje či nikoli,
+\M{34}Není-li hned známa odpověď, zda pattern vyhovuje či nikoli,
překontrolujeme nejdříve, zda už není pattern ve stejné pozici otevřený.
Pak najdeme první \uv{díru} v tabulce \PB{\\{lapi}} a tam uhnízdíme nový
ukazatel
na pozici v patternu.
-\Y\B\4\X31:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X${}\E{}$\6
+\Y\B\4\X34:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X${}\E{}$\6
$\\{pi}\K\\{pp}\MG\\{patt};{}$\6
\&{while} ${}(\|m\MM){}$\1\5
${}\\{pi}\K\\{pi}\MG\\{next};{}$\2\6
@@ -827,17 +915,17 @@ ${}\\{lapt}[\|k]\K\\{pp};{}$\6
${}\\{lapi}[\|k]\K\\{pi};{}$\6
${}\\{ap}\PP;{}$\6
\4${}\}{}$\2\par
-\U30.\fi
+\U33.\fi
-\M{32}Poslední věcí ve funci \PB{\\{tie}} je tisk závěrečné statistiky
+\M{35}Poslední věcí ve funci \PB{\\{tie}} je tisk závěrečné statistiky
zpracování.
-\Y\B\4\X32:Tiskni závěrečnou zprávu\X${}\E{}$\6
+\Y\B\4\X35:Tiskni závěrečnou zprávu\X${}\E{}$\6
$\\{fprintf}(\\{stderr},\39\.{"\~\~\~\ file:\ \%s\\t\ \ lin}\)\.{es:\ \%ld,\
changes:\ \%l}\)\.{d\\n"},\39\\{filename},\39\\{numline},\39\\{numchanges}){}$;%
\par
-\U26.\fi
+\U29.\fi
-\N{1}{33}Inicializace patternů.
+\N{1}{36}Inicializace patternů.
Po vytvoření předchozího kódu opírajícího se o~patterny máme nyní v~ruce
poměrně silný nástroj na definování různých činností programu prostým
vytvořením patternu a příslušné jeho procedury. Pokud budeme chtít
@@ -862,7 +950,7 @@ Nejprve deklarujeme některé často používané skupiny znaků v~patternech.
\\{parcheck},{}$ ${}{*}\\{verblist}{}$;\par
\fi
-\M{34}Začneme definicí nejčastěji používaného patternu na vlnkování uvnitř
+\M{37}Začneme definicí nejčastěji používaného patternu na vlnkování uvnitř
řádku. Připomeňme, že opakované volání funkce \PB{\\{setpattern}} vytváří
interně
seznam patternů, přičemž o~jejich propojení se nemusíme starat. Vyzvedneme
@@ -870,7 +958,7 @@ si z~návratového kódu funkce pouze ukazatel na první položku seznamu
\PB{\\{normallist}}. Stejně tak opakované volání funkce \PB{\\{setpi}} vytváří
seznam
pozic pro naposledy deklarovaný pattern.
-\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6
+\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6
$\\{vlnkalist}\K\\{setpattern}(\\{vlnkain});{}$\6
${}\\{setpi}(\\{tblankscr},\39\.{ONE});{}$\6
${}\\{setpi}(\\{tblanks},\39\.{ANY});{}$\6
@@ -881,29 +969,54 @@ ${}\\{setpi}(\\{blanks},\39\.{ANY});{}$\6
${}\\{setpi}(\\{nochar},\39\.{ONE\_NOT}){}$;\par
\fi
-\M{35}\B\X27:Inicializace proměnných při startu funkce \PB{\\{tie}}\X${}%
+\M{38}\B\X30:Inicializace proměnných při startu funkce \PB{\\{tie}}\X${}%
\mathrel+\E{}$\6
$\\{listpatt}\K\\{normallist}\K\\{vlnkalist}{}$;\par
\fi
-\M{36}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
+\M{39}Vložení vlnky znamená vykonat následující práci: Zapamatovat si znak za
+skupinou mezer
+(do proměnné \PB{\|p}). Pokud před tímto znakem předchází nulový byte,
+použijeme ho později, proto
+si jej uložíme do proměnné \PB{\|z}. Dále se posuneme v bufferu vlevo přes
+všechny mezery, tabelátory
+(přesněji \PB{\\{blanks}}) a přeskakujeme přitom všechny nulové byty. Index %
+\PB{\\{ind}} se zastaví
+na předložce. Posuneme jej doprava za předložku (++\PB{\\{ind}}) a pokud tam je
+nulový byte a první znak
+\PB{\\{tiestr}} není nulový, posuneme se až za tento nulový byte. Dále vložíme
+string \PB{\\{tiestr}},
+neboli vlnku. Nakonec připojíme zapamatovaný znak \PB{\|p}, ovšem pokud před
+ním byla nula,
+vložíme ji ještě před znak \PB{\|p}.
+\Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
\&{static} \&{void} \\{vlnkain}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
-\&{char} \|p;\7
+\&{int} \|i;\6
+\&{char} \|p${},{}$ \|z;\7
${}\\{ind}\MM;{}$\6
${}\|p\K\\{buff}[\\{ind}\MM];{}$\6
-\&{while} ${}(\\{strchr}(\\{blanks},\39\\{buff}[\\{ind}])\I\NULL){}$\1\5
+${}\|z\K\\{buff}[\\{ind}];{}$\6
+\&{while} ${}(\R\\{buff}[\\{ind}]\V(\\{strchr}(\\{blanks},\39\\{buff}[\\{ind}])%
+\I\NULL)){}$\1\5
${}\\{ind}\MM;{}$\2\6
-${}\\{ind}\PP;{}$\6
-${}\\{buff}[\\{ind}\PP]\K\.{'\~'};{}$\6
+\&{if} ${}(\R\\{buff}[\PP\\{ind}]\W\\{tiestr}[\T{0}]){}$\1\5
+${}\\{ind}\PP;{}$\2\6
+\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\\{tiestrlen};{}$ ${}\|i\PP){}$\1\5
+${}\\{buff}[\\{ind}\PP]\K\\{tiestr}[\|i];{}$\2\6
+${}\|i\K\\{tiestrlen}{}$;\C{ nulu pred p vlozime, pokud je z==0 a }\6
+\&{if} ${}(\R\\{tiestr}[\T{0}]){}$\1\5
+${}\|i\MM{}$;\C{ pocet vlozenych znaku z tiestr }\2\6
+\&{if} ${}(\R\|z\W(\|i\MOD\T{2})){}$\1\5
+${}\\{buff}[\\{ind}\PP]\K\T{0}{}$;\C{ je sudy }\2\6
${}\\{buff}[\\{ind}\PP]\K\|p;{}$\6
${}\\{numchanges}\PP;{}$\6
\4${}\}{}$\2\par
\fi
-\M{37}Podobně pro tvorbu vlnky \uv{přes řádek} vytvoříme pattern a kód
+\M{40}Podobně pro tvorbu vlnky \uv{přes řádek} vytvoříme pattern a kód
procedury.
-\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6
+\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6
\\{setpattern}(\\{vlnkacr});\6
${}\\{setpi}(\\{tblankscr},\39\.{ONE});{}$\6
${}\\{setpi}(\\{tblanks},\39\.{ANY});{}$\6
@@ -915,7 +1028,7 @@ ${}\\{setpi}(\\{blanks},\39\.{ANY});{}$\6
${}\\{setpi}(\\{nochar},\39\.{ONE\_NOT}){}$;\par
\fi
-\M{38}V proceduře k tomuto patternu musíme ošetřit případ typu
+\M{41}V proceduře k tomuto patternu musíme ošetřit případ typu
\uv{\.{a\char126v\char92np}},
kdy nelze prostě přehodit \uv{\.{\char92n}} za \uv{\.{v}}, protože
bychom roztrhli
@@ -931,19 +1044,21 @@ nebudeme vytvářet nové. Na výstupu bude soubor o jeden řádek kratší.
\Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
\&{static} \&{void} \\{vlnkacr}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
-\&{char} \|p;\6
+\&{char} \|p${},{}$ \|z;\6
\&{int} \|i${},{}$ \|j;\7
${}\\{ind}\MM;{}$\6
${}\|p\K\\{buff}[\\{ind}\MM];{}$\6
-\&{while} ${}(\\{strchr}(\\{blankscr},\39\\{buff}[\\{ind}])\I\NULL){}$\1\5
+${}\|z\K\\{buff}[\\{ind}];{}$\6
+\&{while} ${}(\R\\{buff}[\\{ind}]\V(\\{strchr}(\\{blankscr},\39\\{buff}[%
+\\{ind}])\I\NULL)){}$\1\5
${}\\{ind}\MM;{}$\2\6
${}\|i\K\\{ind}{}$;\C{ misto predlozky, kterou chceme vazat }\6
\&{while} ${}(\|i\G\T{0}\W(\\{strchr}(\\{blankscr},\39\\{buff}[\|i])\E%
\NULL)){}$\1\5
${}\|i\MM;{}$\2\6
${}\|j\K\|i;{}$\6
-\&{while} ${}(\|i\G\T{0}\W(\\{strchr}(\\{blanks},\39\\{buff}[\|i])\I\NULL)){}$%
-\1\5
+\&{while} ${}(\|i\G\T{0}\W(\R\\{buff}[\\{ind}]\V(\\{strchr}(\\{blanks},\39%
+\\{buff}[\|i])\I\NULL))){}$\1\5
${}\|i\MM;{}$\2\6
\&{if} ${}(\|i\G\T{0}\W\\{buff}[\|i]\E\.{'\\n'}){}$\1\5
${}\|j\K{-}\T{1};{}$\2\6
@@ -951,16 +1066,23 @@ ${}\|j\K{-}\T{1};{}$\2\6
${}\\{buff}[\|j]\K\.{'\\n'};{}$\2\6
\&{else}\1\5
${}\\{numline}\MM;{}$\2\6
-${}\\{ind}\PP;{}$\6
-${}\\{buff}[\\{ind}\PP]\K\.{'\~'};{}$\6
+\&{if} ${}(\R\\{buff}[\PP\\{ind}]\W\\{tiestr}[\T{0}]){}$\1\5
+${}\\{ind}\PP;{}$\2\6
+\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\\{tiestrlen};{}$ ${}\|i\PP){}$\1\5
+${}\\{buff}[\\{ind}\PP]\K\\{tiestr}[\|i];{}$\2\6
+${}\|i\K\\{tiestrlen};{}$\6
+\&{if} ${}(\R\\{tiestr}[\T{0}]){}$\1\5
+${}\|i\MM;{}$\2\6
+\&{if} ${}(\R\|z\W(\|i\MOD\T{2})){}$\1\5
+${}\\{buff}[\\{ind}\PP]\K\T{0};{}$\2\6
${}\\{buff}[\\{ind}\PP]\K\|p;{}$\6
${}\\{numchanges}\PP;{}$\6
\4${}\}{}$\2\par
\fi
-\M{39}Nyní vytvoříme patterny pro případy typu \.{\char92uv\char`\{v lese\char`%
+\M{42}Nyní vytvoříme patterny pro případy typu \.{\char92uv\char`\{v lese\char`%
\}}.
-\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6
+\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6
\\{setpattern}(\\{vlnkain});\C{ na radku }\6
${}\\{setpi}(\\{tblankscr},\39\.{ONE});{}$\6
${}\\{setpi}(\\{backslash},\39\.{ONE});{}$\6
@@ -986,21 +1108,22 @@ ${}\\{setpi}(\\{blanks},\39\.{ANY});{}$\6
${}\\{setpi}(\\{nochar},\39\.{ONE\_NOT}){}$;\par
\fi
-\M{40}Vytvoříme patterny a proceduru pro potlatčení tvorby vlnky u písmen těsně
+\M{43}Vytvoříme patterny a proceduru pro potlatčení tvorby vlnky u písmen těsně
následujících sekvence \.{\char92TeX} a \.{\char92LaTeX}. Tj. nechceme, aby
např z textu \uv{\.{Vlastnosti~\char92TeX~u~jsou...}} jsme dostali text
s nesprávně vázaným písmenem
\uv{\.{Vlastnosti~\char92TeX~u\char126jsou...}}.
-\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6
+\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6
$\\{normalpattern}(\\{tielock},\39\.{"\\\\TeX"});{}$\6
${}\\{setpi}(\\{blankscr},\39\.{ONE});{}$\6
${}\\{normalpattern}(\\{tielock},\39\.{"\\\\LaTeX"});{}$\6
${}\\{setpi}(\\{blankscr},\39\.{ONE}){}$;\par
\fi
-\M{41}Procedura \PB{\\{tielock}} obsahuje nečistý trik. Při provádění procedury
+\M{44}Procedura \PB{\\{tielock}} obsahuje nečistý trik. Při provádění procedury
je
-právě načten znak z \PB{\\{blankscr}} a je uložen do buff. Testy na otevírání
+právě načten znak z \PB{\\{blankscr}} a je uložen do \PB{\\{buff}}. Testy na
+otevírání
nových patternů pro tento znak teprve budou následovat a testují se na
hodnotu proměnné \PB{\|c}. Stačí tedy změnit hodnotu \PB{\|c} a vlnkovací
patterny se
@@ -1012,7 +1135,7 @@ ${}\|c\K\T{1};{}$\6
\4${}\}{}$\2\par
\fi
-\M{42}Ošetříme nyní přechod do/z matematického režimu \TeX{}u. Uvnitř math
+\M{45}Ošetříme nyní přechod do/z matematického režimu \TeX{}u. Uvnitř math
módu vlnky neděláme. Při zjištěném nesouladu v přechodech mezi
math-módy spustíme následující proceduru.
\Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
@@ -1026,11 +1149,11 @@ ${}\\{status}\K\.{WARNING};{}$\6
\4${}\}{}$\2\par
\fi
-\M{43}Začneme patterny pro přechod do/z matematického režimu, ohraničeného
+\M{46}Začneme patterny pro přechod do/z matematického režimu, ohraničeného
jedním dolarem, nebo v La\TeX{}u příslušnými sekvencemi. Sekvence
La\TeX{}u \.{\char92(} a \.{\char92)} nejsou zahrnuty, protože bývají
často předefinovány k jiným užitečnějším věcem.
-\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6
+\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6
\&{if} ${}(\R\\{nomath}){}$\5
${}\{{}$\1\6
${}\\{mathlist}\K\\{setpattern}(\\{onedollar});{}$\6
@@ -1044,7 +1167,7 @@ ${}\\{normalpattern}(\\{mathout},\39\.{"\\\\end.\{math\}"});{}$\6
\4${}\}{}$\2\par
\fi
-\M{44}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
+\M{47}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
\&{static} \&{void} \\{mathin}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
\&{if} ${}(\\{mode}\I\.{TEXTMODE}){}$\1\5
@@ -1061,7 +1184,7 @@ ${}\\{normallist}\K\\{listpatt}\K\\{vlnkalist};{}$\6
\4${}\}{}$\2\par
\fi
-\M{45}Při programování procedury \PB{\\{onedollar}} nesmíme zapomenout na
+\M{48}Při programování procedury \PB{\\{onedollar}} nesmíme zapomenout na
výskyt
sekvence \.{\char92\$}. V tom případě akci ignorujeme. Podobně u sekvence
\.{\$\$} souhlasí ten druhý dolar s naším patternem, ale to už jsme uvnitř
@@ -1069,8 +1192,8 @@ display módu. V takovém případě také nic neděláme.
\Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
\&{static} \&{void} \\{onedollar}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
-\&{if} ${}(\\{buff}[\\{ind}-\T{3}]\E\.{'\\\\'}\V(\\{buff}[\\{ind}-\T{3}]\E\.{'%
-\$'}\W\\{buff}[\\{ind}-\T{4}]\I\.{'\\\\'})){}$\1\5
+\&{if} ${}(\\{buffnz}[\\{inz}-\T{3}]\E\.{'\\\\'}\V(\\{buffnz}[\\{inz}-\T{3}]\E%
+\.{'\$'}\W\\{buffnz}[\\{inz}-\T{4}]\I\.{'\\\\'})){}$\1\5
\&{return};\2\6
\&{if} ${}(\\{mode}\E\.{DISPLAYMODE}){}$\1\5
\\{printwarning}(\,);\2\6
@@ -1084,16 +1207,16 @@ ${}\{{}$\1\6
\4${}\}{}$\2\par
\fi
-\M{46}Pokud najdeme prázdný řádek, překontrolujeme, zda náhodou nejsme v
+\M{49}Pokud najdeme prázdný řádek, překontrolujeme, zda náhodou nejsme v
math-módu. Pokud ano, vypíšeme varování a přejdeme do textového módu.
-\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6
+\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6
$\\{parcheck}\K\\{setpattern}(\\{checkmode});{}$\6
${}\\{setpi}(\\{cr},\39\.{ONE});{}$\6
${}\\{setpi}(\\{blanks},\39\.{ANY});{}$\6
${}\\{setpi}(\\{cr},\39\.{ONE}){}$;\par
\fi
-\M{47}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
+\M{50}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
\&{static} \&{void} \\{checkmode}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
\&{if} ${}(\\{mode}\I\.{TEXTMODE}){}$\5
@@ -1105,12 +1228,12 @@ ${}\\{normallist}\K\\{listpatt}\K\\{vlnkalist};{}$\6
\4${}\}{}$\2\par
\fi
-\M{48}Nyní ošetříme výskyt dvou dolarů, tj. vstup do/z display módu.
+\M{51}Nyní ošetříme výskyt dvou dolarů, tj. vstup do/z display módu.
Rovněž mysleme na La\TeX{}isty a jejich prostředí pro display-mód. Protože
je možná alternativa s hvězdičkou na konci názvu prostředí, raději už
uzavírací závorku do patternu nezahrnujeme.
-\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6
+\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6
\&{if} ${}(\R\\{nomath}){}$\5
${}\{{}$\1\6
${}\\{normalpattern}(\\{twodollars},\39\.{"\$\$"});{}$\6
@@ -1124,7 +1247,7 @@ ${}\\{normalpattern}(\\{displayout},\39\.{"\\\\end.\{equation"});{}$\6
\4${}\}{}$\2\par
\fi
-\M{49}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
+\M{52}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
\&{static} \&{void} \\{displayin}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
\&{if} ${}(\\{mode}\I\.{TEXTMODE}){}$\1\5
@@ -1141,7 +1264,7 @@ ${}\\{normallist}\K\\{listpatt}\K\\{vlnkalist};{}$\6
\4${}\}{}$\2\7
\&{static} \&{void} \\{twodollars}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
-\&{if} ${}(\\{buff}[\\{ind}-\T{3}]\E\.{'\\\\'}){}$\1\5
+\&{if} ${}(\\{buffnz}[\\{inz}-\T{3}]\E\.{'\\\\'}){}$\1\5
\&{return};\2\6
\&{if} ${}(\\{mode}\E\.{DISPLAYMODE}){}$\1\5
\\{displayout}(\,);\2\6
@@ -1150,11 +1273,11 @@ ${}\{{}$\1\6
\4${}\}{}$\2\par
\fi
-\M{50}Následuje ošetření tzv. verbatim módu. Pro plain i La\TeX{} jsou
+\M{53}Následuje ošetření tzv. verbatim módu. Pro plain i La\TeX{} jsou
nejčastější
závorky pro verbatim mod tyto (variantu s \.{\char92begtt} používám
s oblibou já).
-\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6
+\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6
\&{if} ${}(\R\\{noverb}){}$\5
${}\{{}$\1\6
${}\\{verblist}\K\\{normalpattern}(\\{verbinchar},\39\.{"\\\\verb"});{}$\6
@@ -1187,7 +1310,7 @@ ${}\\{normalpattern}(\\{verbout},\39\.{"@>|"});{}$\6
\4${}\}{}$\2\par
\fi
-\M{51}Procedura \PB{\\{verbinchar}} se od \uv{společné} procedury \PB{%
+\M{54}Procedura \PB{\\{verbinchar}} se od \uv{společné} procedury \PB{%
\\{verbin}} liší v
tom, že zavede do stringu \PB{\\{verbchar}} momentální hodnotu proměnné \PB{%
\|c}.
@@ -1208,7 +1331,7 @@ ${}\\{mode}\K\.{VERBMODE};{}$\6
\4${}\}{}$\2\par
\fi
-\M{52}Při programování \uv{obecné} funkce \PB{\\{verbin}} musíme dbát na to,
+\M{55}Při programování \uv{obecné} funkce \PB{\\{verbin}} musíme dbát na to,
aby
zůstal aktivní pouze odpovídající \uv{výstupní} pattern k danému
vstupnímu. Také si zapamatujeme mód, ze kterého jsme do verbatim
@@ -1233,7 +1356,7 @@ ${}\|i\K\T{2};{}$\6
;\6
\4\&{case} \.{'d'}:\5
${}\|i\K\T{3};{}$\6
-\&{if} ${}(\\{buff}[\\{ind}-\T{3}]\E\.{'@'}){}$\1\5
+\&{if} ${}(\\{buffnz}[\\{inz}-\T{3}]\E\.{'@'}){}$\1\5
\&{return};\C{ dvojity @ ignorovat }\2\6
\&{break};\6
\4${}\}{}$\2\6
@@ -1245,13 +1368,13 @@ ${}\\{mode}\K\.{VERBMODE};{}$\6
\4${}\}{}$\2\par
\fi
-\M{53}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
+\M{56}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
\&{static} \&{void} \\{verbout}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
\&{if} ${}(\\{mode}\I\.{VERBMODE}){}$\1\5
\&{return};\2\6
-\&{if} ${}(\\{web}\W\\{buff}[\\{ind}-\T{2}]\E\.{'@'}\W\\{buff}[\\{ind}-\T{3}]\E%
-\.{'@'}){}$\1\5
+\&{if} ${}(\\{web}\W\\{buffnz}[\\{inz}-\T{2}]\E\.{'@'}\W\\{buffnz}[\\{inz}-%
+\T{3}]\E\.{'@'}){}$\1\5
\&{return};\2\6
${}\\{mode}\K\\{prevmode};{}$\6
${}\\{normallist}\MG\\{next}\K\\{prevlist};{}$\6
@@ -1270,16 +1393,16 @@ ${}\\{normallist}\K\\{listpatt}\K\\{vlnkalist};{}$\6
\4${}\}{}$\2\par
\fi
-\M{54}Nyní implementujeme vlastnost dříve používaného programu vlnka, tj. že
+\M{57}Nyní implementujeme vlastnost dříve používaného programu vlnka, tj. že
lze jeho činnost vypnout a opět zapnout v komentářích. Vytváříme druhý
nezávislý seznam patternů a proto nejprve pronulujeme \PB{\\{lastpt}}.
-\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6
+\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6
$\\{lastpt}\K\T{0};{}$\6
${}\\{commentlist}\K\\{normalpattern}(\\{tieoff},\39\.{"\%.\~.-"});{}$\6
${}\\{normalpattern}(\\{tieon},\39\.{"\%.\~.+"}){}$;\par
\fi
-\M{55}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
+\M{58}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6
\&{static} \&{void} \\{tieoff}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
${}\\{normallist}\K\NULL;{}$\6
@@ -1290,7 +1413,7 @@ ${}\\{normallist}\K\\{vlnkalist};{}$\6
\4${}\}{}$\2\par
\fi
-\M{56}Další plánovaná vylepšení. Program by mohl číst definici svého chování
+\M{59}Další plánovaná vylepšení. Program by mohl číst definici svého chování
nejen z~příkazové řádky, ale v~mnohem kompletnější podobě, včetně
uživatelsky definovaných patternů, z komentářové oblasti ve čteném souboru.
Parametry zde uvedené by mohly mít vyšší prioritu, než parametry
@@ -1300,7 +1423,7 @@ písmena nemají být vázana vlnkou (zatím je implemenováno na pevno jen
\fi
-\N{1}{57}Rejstřík.
+\N{1}{60}Rejstřík.
\fi