summaryrefslogtreecommitdiff
path: root/support/mnu/examples.doc
blob: 7ce7152eefa261a0a17621ea30b80c4eac142a2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326

     *****************************************************************
     *                                                               *
     *                          Program MNU                          *
     *                                                               *
     *    A configurable menu for starting applications under DOS    *
     *                                                               *
     *               (The description of Examples )                  *
     *                                                               *
     *****************************************************************
     Prague, January 1993                                   Petr Olsak


In the demo batches you can find some methods and tricks used with the MNU
program. There are two examples.

For documentation of MNU program see files README.TXT and MNU.DOC .


1. The first simple example
%%%%%%%%%%%%%%%%%%%%%%%%%%%

The first example shows a basic MNU program principles. This example
describes not really application, but the basic principles of program MNU
is clearly shown.

The files used in the example are listed in the following table:

 ---------------------------------------------------
 demo.bat   The control batch
 demo.mnu   The configuration file
 envir.bat  The auxiliary batch (it will be created)
 ---------------------------------------------------

Remarks
-------

** The batch "demo.bat" controls the main loop of application processes.
   After terminating the MNU program the batch branches next executing by set
   of commands

     if errorlevel ... goto ...

   One should have in mind that these "if errorlevel" commands must have a
   decreasing order of constants ("if errorlevel" does mean ``if errorcode is
   greater or equal to'').

** Instead of the really application calls there are the "echo" commands
   in the control batch "demo.bat" only. You can remove this word ("echo") and
   write the really applications.

** If the user changes the file name (value of the "FILE" environment
   variable), the program MNU writes the line

     set FILE=<newname>

   into the file "envir.bat" (see file "demo.mnu", line 26). After terminating
   of the MNU program the control batch "demo.bat" calls this auxiliary batch
   (see line 44 in "demo.bat"). This is a way to set new value to environment
   variable globally.

** The MNU variable is set to the probably next used item number after
   each applications. So that the user can press only the "Enter" key repeatedly
   to make the loop "Edit"->"Compile"->"Execute".

** After the ``executing of compiler'' the line with test of error code
   of compiler is included (see line 29 in "demo.bat"). If the compiler does
   not end successfully, the batch sets the value 10 (instead 30) to MNU
   variable and this setting influences the next state of MNU program (the
   Edit item offers instead the Execute item). This command is commented out
   ("rem") because the really compiler run does not preceded.

** If user press the "Esc" key, the MNU program searches the item with
   number zero and the "Quit" item offers.


2. The second more complicated example
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

This is the example of emTeX configuration using the MNU program.
The files listed below are really used in CSTeX package. In this package
distributed by CSTuG (Czechoslovak TeX Users Group), the emTeX
programs and MNU configuration are included. The MNU configuration is
separated from the CSTeX package and included as the example here.

 ----------------------------------------------------------------
 demotex.bat  This batch starts the example
 texset.bat   Initialization batch
 texbat.bat   The main loop
 texrun.bat,
 others.bat,
 prints,bat,
 metafont.bat The applications batches (called from "texbat.bat")
 cfg.mnu      The configuration file for menu
 sorry.mnu    The configuration file for ``sorry-messages''
 texcfg.bat   User's configuration
 mfbat.bat    The auxiliary batch (it can be changed)
 gfbat.bat,
 dos.bat",
 envir.bat    The auxiliary batches (they will be created)
 dupcent.exe  Duplicates the "%" character (utility program)
 totext.exe   Sets the screen to text mode (utility program)
 kalk.exe     Calculator -- a simple application program
 kalk.hlp     help texts for "kalk.exe"
 dupcent.c,
 totext.c     The source codes for utility programs
 -----------------------------------------------------------------

Unfortunately, this example cannot show the applications in really action,
because application programs are other matter and they are not included in
this small MNU package. If you are interested in this problem, you can take
the whole CSTeX package from public international network archives.
Note that the installation program of this package is based on MNU program
too.

You can run the staring batch "demotex.bat" and try the menu. The helps
are translated from Czech language to English (more exactly to my poor
English and bad English). So, the sense of individual items can be read
from this helps.

The files listed here can be used in various configuration of TeX
systems, but some modifications are needed. If you intend to use these
files as a motivation when designing the TeX configuration for your
computer, you will have to modify some parts as your needs can be.

In any case, the files listed here can serve as a source of inspiration. At
least you can find the key to a better understanding the philosophy
of the communication between the control batch and the MNU program there.

The remarks to individual tricks and most important parts of files used in
this example follow here.


Remarks to "demotex.bat"
------------------------

** There is only one line here---the call of the batch "texset.bat" via
   the command "command". The environment variable "COMSPEC" will be expanded
   to command "command" including path. The command "command" enlarges the
   system environment. Many environment variables will be used.

** The "texset.bat" has four parameters. First: the format file name
   ("csPLAIN" in the example in "demotex.bat"), second: the item text for
   TeX executing ("PlainT^eX" in the example), third: the working and main
   filename ("%1" in the example) and fourth: the working filename if
   different ("%2" in the example).

** The ``starting batch'' "demotex.bat" has others names in original
   CSTeX package: "plain.bat", "latex.bat" etc. This batches are placed in
   directory where the system "PATH" points. So that the user can call the
   TeX system from his own current directory by the command (for instance)

    latex <filename>

   All working files (".tex", ".dvi", ".log", etc.) will be created in the
   current directory.


Remarks to "texset.bat"
-----------------------

** There are "set" commands here to set the environment of emTeX
   variables and others. Some variables are used only in batches. The field
   signed as ``system dependent variables'' includes variables dependent on
   disk structure. Note that the first settings are nonstandard in demo-version
   of "texset.bat" because only demonstration without special path handling is
   done. The really settings can look as following:

     set TEXDIR=c:\emtex          <the main directory with programs>
     set TEXDIRCFG=c:\emtex\cfg   <the directory with configuration files>
     set RAM=e:\temp              <ram disk with directory for temporary files>
     set EDIT=c:\editors\ne       <the main editor>
     set SHELL=c:\nc\nc           <the file manager>

** After environment settings the "texset.bat" calls the "texcfg.bat" if
   present (see line 57). So that the user can change the default setting in
   his own ``configuration batch'' "texcfg.bat" if this file is placed in
   current directory.

** Some batches and configuration files ("texbat.bat", "cfg.mnu",
   "texrun.bat", "mfbat.bat") are copied into RAM disk to increase the speed
   (see lines 50--53 in "texset.bat"). This process is skipped in demo
   version because the environment variable RAM does not point to RAM disk.
   (see line 50: ".. goto start").

** The "texset.bat" calls the "texbat.bat"--the main loop of
   applications (see line 61).


Remarks to main loop "texbat.bat"
---------------------------------

** The MNU is called here (compare with "demo.bat" from previous
   example). Then the process branches to individual applications or
   application batches.

** The auxiliary batch "envir.bat" is called after each MNU run to
   restore the global environment setting (see line 5).

** If the typical file of application is not found the process go to
   "sorry" label (line 139) and calls the MNU program with "sorry.mnu"
   configuration file to display a message about no-installed program (see
   line 80 for instance). This handling is included to control batches because
   no all applications may be installed---the installation program of CSTeX
   offers many variabilities that no all programs can be installed.

** The "texbat.bat" calls directly only some applications, others are
   called via application batches. You can compare this batches to
   ``procedures'' in programming languages.


Remarks to batches "texrun.bat", "others.bat", "prints.bat" and "metafont.bat"
------------------------------------------------------------------------------

** The error code from MNU is still stored and the process branches to
   individual applications again.

** The ``sorry handling'' is similar as in the "texbat.bat".

** The individual application will not work in demo version because they
   are not installed.

** Some tricks are used here. These tricks are related to emTeX
   configuration itself and they are not in our first interest while we
   are studying the MNU philosophy.


Remarks to "cfg.mnu" configuration file
---------------------------------------

By means of questions and answers, we are going to look into some
constructions in the file "cfg.mnu" installed. We focus on those
parts of the file which need not be quite comprehensible even after reading
the documentation through.

?  Where to look for the item 100 defined in the line " ^ 100 \" (see
   line 10).

!  This item does not exist. It is the case when there are less items
   (zero in this place) in the window than set in the definition line of the
   window. The window opens if the item is called, but there is no item
   active. The window is called as a parent window by the window with the
   basic menu (see line 16). Pressing the key "Esc" at the moment when only
   the basic menu is offered does not cause a jump to the non-existing item
   100, because the window is defined as automatically closeable (the
   character "\").

?  Why is the result of choosing (e.g. "amstex") in "Formats menu"
   stored not only in the environment variable, but also in the file 2 in the
   form "set FMT=amstex">2 (see line 122).

!  The command "csAMSTEX">FMT  has a local character within
   the MNU program, and because the next command (i.e. "*") means closing all
   windows and a jump onto the item 61, also the contents of the window with
   the non-existing item 100 is restored; it bears information about the
   chosen format. On the other hand, the command "set FMT=amstex">2
   enables to forward the information about the chosen format to the
   control batch via the file 2, i.e. the file "envir.bat".

?  How to make sense of definitions of items in the "Diskette menu"
   (lines 172--179).

!  The environment variable "AR" means the direction of copying (from
   or onto the disk), and the variable "D" is the letter of the chosen diskette
   drive (either A or B). The batch works with both variables, and therefore
   the values as stored in the file "envir.bat" in the form of a command
   "set". Moreover, the value "D" is stored also locally, because it is used
   when opening the window with the item 105 (there is a variable text reading
   "Insert diskette to drive [%D%]" ).

?  In the window with ``final question'', the numbers in the window definition do
   not match with the number of items. Unlike the window 100, there are less
   numbers then items (lines 186--189).

!  The program jumps to the item 0 (i.e. "Yes") when closing all
   windows, that is if "Esc" was pressed in the main menu. The item "No" does
   not need to have a number, because the program does not leave it, but the
   window with the item 3 is opened.

?  How to arrange the final question, where "No" is implicitly
   offered.

!  In the window definition, we write e.g.: " ^ 1, 0 "; and in the
   control batch, we use the commands "if errorlevel" to ensure that the batch
   terminates in the case of "errocode=1".

?  Why is the item "DOS" solved intricated using the file 3 (i.e. the
   auxiliary file "dos.bat", see line 203). Is it not sufficient to call a line process by a
   definition: {*"#">0} ?

!  Yes, it will do. But there is a little defect here. The user would
   like to find the last edited value under the item "DOS". We cannot
   guarantee it other way than to store this value in a file. The MNU program
   should terminate and restart several times before the user wishes to use
   the item "DOS" again.

?  Why are items with the same number in "Print menu" ? (See
   line 49.)

!  Why not? If user chose the item, the error code of program
   terminating is set to the number of chosen item and this does not make any
   conflict. The batch "print.bat" branches next process by the environment
   setting and not only by the error code.

?  There is an error in the definition of the editable variable in
   "METAFONT parameters"!  The line 210

       METAFONT  |#[%4% 31, 1, 66]|{!>4, "[%4% 1, 1, 30]#">4}

   means that the program first reads 66 characters of the text from the file 4
   ("mfbat.bat") and opens the window with editable item.
   After editing, the file 4 is reset by the command "!>4". Thus, the
   following construction "[%4% 1, 1, 30]" returns a blank string from the
   resetted file instead of first 30 characters of the old contents of file
   as intended by the programmer of this definition.

!  Congratulations. If you have succeeded to discover this discrepancy
   by yourself, it is evident that you are an attentive reader of the
   documentation. The moment, when the substitution in the constructions
   "[%...]" is performed, is not stressed there. The substitution is done
   during opening the window, and all the text related to the opened window is
   kept in the memory in the substituted form. The commands defining the item
   reaction are performed only when the item has been chosen by the key
   "Enter". These commands are not read from the file, but from the memory,
   where the substitutions have been done. Therefore it works properly.