Menu 8

Menu 8 is a DOS-based text-based user interface (TUI) menu program. It was (probably?) the eighth in a series of “menu” programs I’ve written. The inspiration for writing one came from how the computer lab at school had a menu system.1

And it was one of the first programs that was deployed in a usable form and maintained over time. It was installed on a 486 “multimedia” PC in the computer lab, which was pretty cool.2

Up to this point, the “menu” programs I’ve written weren’t really menu programs at all. They were a pretend/play environment that looked like one, which didn’t actually launch any other programs. There would be a “command line” that just accepted simple “commands” on a INPUT statement without any parsing at all, and run a couple of functions.3 All in all, the “menu” was dominated by a bunch of PRINT statements that made it appear like something was happening. And that does hold through to Menu 8 to a certain extent. (Well, probably quite a bit. 😅)


Functionality of Menu 8, as seen in an earlier screenshot, is fairly limited. Menu items consist of two columns split down the middle. On the left, there are four built-in functions labeled (A) through (D). On the right, there are seven slots for user-definable menu items used to launch other programs. And those user-definable items were fixed – there is no way to have more items.

There is one defining feature – mouse support! Supporting mouse-based interactions in a user interface like this seems … superfluous, it was there to trigger the menu items. So yes, it is superfluous. Mouse support code came from a thick book full of printed out sample code, Microsoft QuickBASIC Programmer’s Toolbox published by Microsoft Press.

Another feature was a screen saver. This was when most (if not all) computers used CRT monitors, rather than LCD monitors, where burn in was a real problem. If I recall correctly, this will trigger after 60 seconds of inactivity, which was not configurable.

Oh, and there’s a lot of … extraneous movements in the UI. Mostly animation that doesn’t serve a particular purpose other than being eye candy.

All of those can be seen through this video of Menu 8 in action:

Unfortunate circumstances

Unfortunately, I lost the source code for the program long ago, so that remain in my possessions the binaries:

Directory of E:\.
.              <DIR>            09-08-2023 13:32
..             <DIR>            08-08-2023  9:40
C152C    EXE             39,902 01-12-1996  8:37
LNGFILE  DAT                 72 28-08-1996 13:43
M8_10530 EXE            130,652 03-01-1997 19:23
MENU8    DAT                258 07-07-2008  6:51
MENU8    SYS                 33 03-12-1996 15:05
RC152    EXE             43,432 06-12-1996 14:31
    7 File(s)           214,349 Bytes.
    2 Dir(s)        262,111,744 Bytes free.

(DIR output from DOSBox, which happens to use European date convention for some reason.)

Since the QuickBasic source code no longer exists, everything about it relies on my memory from over a quarter-century ago. And relying on tools like the strings command to find hints from strings in the executable file.

Configuring Menu 8 to launch applications

To launch applications from Menu 8, one had to configure it, so it would launch from one of the seven menu item slots. Configuring the menu items was a little convoluted, to say the least.

First, the configuration utility is not visible from the menu system itself. I vaguely recall it was to hide away the configuration aspects so that regular users could not access it. (See security by obscurity – unintentional, but an approach easily conceived by a middle school kid in the mid-90s.)

Second, it requires writing a C152 “application” to launch an application from the menu item. More later on C152…

To get started, we’ll need to access the aforementioned configuration screen. Except, I don’t remember how to get there. 🤣 And without the source code, there’s no way to find out the key combination to invoke it.

OK, so why do I even know that such a configuration utility exists? A little reverse-engineering of the EXE file using strings shows that such a menu exists somewhere… (Probably waiting to be invoked by some key combination involving Ctrl, Alt, Shift and some other key.4)

$ strings M8_10530.EXE 
(... snip ...)

Menu 8 Configuration Utility
1. Screen Saver
2. Login Password
3. Config/Exit/Autoexea Password
4. Menu Items
5. Delete Menu Item
6. Quit
Enter Number:
Reconfigured Menu 8...
Menu Items:
Deleting Item:
Item Deleted.
New Name for 1:
Changed Name for 1.
New Name for 2:

(... snip ...)

It’s apparent that the utility allowed menu items to be configured in a “user-friendly” way.

One thing that I do remember is that the menu items are stored in MENU8.SYS, which is a plain text file delimited with tabs and commas. And they are just pairs of menu item names and the corresponding C152 launch script.

The C152 “language”

To launch menu items, Menu 8 used a “language” that was “compiled” into a “application” to run. It was called C152 for … not really sure what it really means, as it’s been over 25 years. However, I do recall “152” meant for version 1.05.2x, when this was introduced.

Basically, a script is run through C152C.EXE which “compiles” a program that could be run by RC152.EXE. This script worked a bit like a batch file in DOS, allowing echoing text and running commands.

For example, to launch Cannons 2000, a script like this could be written:

prn.Launching Cannons 2000.;

Then, the script would be “compiled” into some blob:

!C152;&IP0!!&IP0!Launching Cannons 2000.!&UM0;&IP2!CANNON2K.EXE!&IP0!Done.!%EOF%

It really isn’t a necessary step, but it definitely felt cool to the quarter-century-ago me. 🤣

Conclusion (?)

All in all, Menu 8 wasn’t a very extensible or feature-complete menu program. It was good enough to handle small use cases, and entertained me to include a bunch of “cool looking” but not necessarily useful “features.” And it did have a very small audience of users at school, which is to say better than zero users. 😉

  1. I didn’t remember the name but a quick search seems to indicate it was something called Direct Access

  2. I’ve already discussed a bit about Menu 8 has been discussed in a previous blog post Revisiting QuickBASIC, if you’re curious. 

  3. Oh, and did I mention that most of the program flow was accomplished through GOTOs? 🤭 

  4. I went as far as running Menu 8 on FreeDOS and mashing the keyboard to find the key combination but to no avail…