MHo recycled an old program from DOS days and created a tcl prog which reads a script file at startup and present this as hierarchical menus. I need this to work on several inhomogeneous systems where the icons where here and there and everywhere and nowhere, and I need a way to quickly run things.
Every menu item could be a complete tcl script, with some restrictions and some helper routines like "select" or "msgbox".
Example screen:

Some words about keys and functions:
| You can think of the program as a special two-stage tcl-interpreter. In the first stage, only the two main commands menu and app are possible (with various arguments) inside the file(s) interpreted by menue.exe. After interpreting these commands (stage-1), a gui representing the structure appears. Hitting ENTER on an app starts the commands "behind" the app, this means they are again interpreted by tcl (stage-2). |
|---|
Without special configuration, the program loads/processes all *.mnu-files (in that order) out of
Those .MNUs can initially (at the root level of parsing) contain only a very limited set of commands (which together form the heart of the whole machinery...):
where
Some kind of special commands are available, too:
(...Description should be more detailed here; a simple example for the structure of a .MNU-file should be added!)
Additionally, the file(s) *.mak are sourced at program load time (not again with <F5>) in that order:
Attention: Those *.MAKs could contain almost any tcl command and some tk commands. They are not intended to be edited by an end user. For this reason the pwd and other dirs are not parsed for makros, but only the path where the .EXE itself lives (in most situations, the end user has no write access there). Some fundamental macros are already a part of the exe (via Makros provided inside the VFS), containing some useful (at least for me) procs, like
...and some more which are probably too specific or not of common interest (or some are simply not documented yet), like makeAndStartICAFile.
The following commands (and some more) are "built in" right into the .EXE; they are always available (unless overwritten by user macros, of course):
cmdLineHelp is, despite of it's name, of general interest. It can be used to show the results of commands in a scrollable and searchable (Ctrl+F) Box. In the future I plan to add Save As..., Copy to clipboard and maybe a Print-button.
Optionally, the program writes log entries to a user definable file. To configure this, create a file menue.rc in the same folder as the program and put the line
logFile the_name_of_some_logfile.log
in it. There are other options for this .rc, which need to be documented...
You can find a copy of the program here: [L1 ]. It's not always up to date there, though.
Because the menu files I made are very specific, showing some internals of our company, I can't include them in the .ZIP or as an example here. You can ask questions here if you need some complex examples.
The program originally only had one command line switch named --mnuDir. Current version as of Nov. 2011 is 1.17. I have 100 ideas more to improve it, but too little time. In fact, the program is far away from the capabilities of it's DOS ancestor or even away from being nearly complete...
Known issues:
(Sorry for the many edits - old versions of this page could and should be deleted...)
Commandline Switches (need translation and explanation)
Syntax: menue.exe [ -? -@include: {1|0} -@startmenu: {1|0} -askExit: {1|0} -autoStarts: {1|0} -const -ignoreCond -logFile: Log-Datei -logSize: KiloBytes -logWait: Millisekunden -minToTray: {1|0} -mnuDir: Ordner -mnuFile: .mnu-Datei(en) -readmak: {1|0} -run: menuPath item ?exit? -see: menuPath ?item? -showMnuErrs: {1|0} -toTray: {1|0} ]
Schalter:
-? Diese Hilfe anzeigen.
-@include: {1|0} @include-Makros verarbeiten. [1]
-@startmenu: {1|0} @startmenu-Makro verarbeiten. [1]
-askExit: {1|0} Vor Programmende fragen. [1]
-autoStarts: {1|0} Autostarts ausführen. [1]
-const Interne Konstantentabelle ausgeben.
-ignoreCond Bedingungen ignorieren (als TRUE werten).
-logFile: Log-Datei Name einer Protokolldatei. [__test__.log]
-logSize: KiloBytes Maximale Grösse in KB -1 = unbegrenzt. [-1]
-logWait: Millisekunden Maximale Wartezeit bei Logdateizugriffen. [1000]
-minToTray: {1|0} Minimiert in den TaskTray. [0]
-mnuDir: Ordner Weitere(r) Suchordner fuer Menue-Dateien. []
-mnuFile: .mnu-Datei(en) NUR DIESE Menue-Datei(en) verarbeiten! []
-readmak: {1|0} .mak-Dateien parsen. [1]
-run: menuPath item ?exit? Anwendung direkt aufrufen. []
-see: menuPath ?item? Menü (und Anwendung) anzeigen (vorwählen). []
-showMnuErrs: {1|0} .mnu-Parsing-Fehler anzeigen. [1]
-toTray: {1|0} Programm direkt in den TaskTray starten. [0]
"Mehrere Wörter sind in {doppelte Anführungszeichen}" einzuschließen.
{a|b} bedeutet a oder b, ein solcher ?wert? ist optional.
Mit -mnuFile: angegebene Menüdatei(en) können als http://-URL angegeben werden.
In some versions. the program contained the tepam-module, but due to unresolved issues I removed it and replaced with GRIDPLUS2 as a build in dialog tool. Since even GRIDPLUS2 is, for my taste, to complicated, I created some wrappers which allow creating somewhat complex dialogs with very little effort. Here's a simple example:
This is a part of some .MNU-file:
app {gridplus2-Test3 (mit gpDialog1) ************ mit User-Buttons und anderen Tests} {
if {[gpDialog1 dlg2 TestFensterTitel2 [list -title test -taborder row] {
{&e "Benutzer" .benutzer} {&e "Neues Kennwort" .passwort + "=vorgabepw"}
{"Optionen" &c .unlock} {&b "Testbutton" .b1 ~buttonCmd}
{&b "Button-2" .button=btn2} {&b "Button-3" .button=btn3}
{&D "Date-Sel1" .ds1} {&b "Button-4" .button=btn4}
} {
btn2 {
msgBox "hallo-2"
gpSetU dlg2 benutzer [tk_getOpenFile]
}
btn3 {
msgBox "hallo-3"
gpSetU dlg2 passwort Kenn
}
btn4 {
# Test Rekursion
if {[gpDialog1 dlg1 TestFensterTitel [list -title test -taborder row] {
{&e "Benutzer" .benutzer} {&e "Neues Kennwort" .passwort +}
{"Optionen" &c .unlock} {}
}] == 1} {
msgBox ">>>$dlg1_Val<<<"
}
}
}] == 1} {
msgBox ">>>$dlg2_Val<<<"
}
}
And the resulting dialog looks like this:

HJG This program looks useful, but the download does not contain the source.
MHo You can easily extract the source using the utility sdx! But as I have to update the download spot the next days anyway, I can include the source tree as well. Anyway, that source tree won't help you much, since it doesn't contain all sources, as I "compile" with helper routines, which dynamically copy and remove modules as necessary from central shares: Windows batch script for 'compiling' starpacks.
JM is there a new link for this program? MHo Not yet. I'm searching for new, free homespace...
anon maybe try https://neocities.org/ ?
MHo Meanwhile I have a new homepage, but I'm not shure if it's a good idea to upload executables there. Unfortunally, there are enough crazy people in the world who are in search for victims... And, first of all I have to search for codeblocks that are not intened for the public... So, if you want the program now, send a mail to reverse(net gmx at matthias underscore hoffmann), please. P.S.: I just learned that it's not possible to upload ZIPs or anything else than pictures or PDFs at my new homepage... damn.... the search continues.