***************************************************************** * * * 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= 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 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 set TEXDIRCFG=c:\emtex\cfg set RAM=e:\temp set EDIT=c:\editors\ne set SHELL=c:\nc\nc ** 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.