Good ole FGM
Posted: 23 January 2003 at 00:44:27
Today's Fozzolog is a major blast to the past. It's about the FGM BBS - a crude (but effective) bulletin board system I wrote in the early 1990s while at Utah State University... entirely in VMS DCL.
FGM
The FGM started
out early in 1991. I was learning all about Digital Command Language (DCL)
-- the scripting language used for all sorts of
user tasks on computers running the VMS operating system and the FGM BBS
was one of the things I created to teach myself about VMS.
(As I write this, I'm beginning to believe this could turn into a whole series of reminiscent essays talking about "the early days" of my computing "career.")
I found this archive file tonight which contained a fair number of files from my USU VMS system which includes several of the FGM scripts and support files. I thought I'd share of this via the Fozzolog so readers may get a taste of what the FGM was like.
First of all, we have a welcome screen. This is one of the first things a user would see after typing FGM at the DCL prompt on the VMS system.

One of the many FGM BBS welcome screens.
The above is only one of the many welcome screens the FGM BBS had during the course of its life. There was a small group of us who became very proficient with "VT-codes" -- the sequences of control characters which told the DEC VT-series terminals (and VT-compatible terminal emulators) to change the color of screen background, text, and reposition the cursor). We had all kinds of "ASCII art" which we'd use in the welcome screen.
After the welcome screen, a user would see the FGM main menu.

The FGM main menu.
The main menu provided a launchpad to the facilities and resources provided by FGM. This main menu lists the following options:
- Rooms Menu - Go to discussion rooms where users could read and/or participate in text discussions.
- Telnet Menu - This took the user to a list of telnet sites, mostly other bulletin board systems and Gopher servers.
- Files Library - This took the user to an index of files - mostly text files containing computer tutorials and fiction.
- News - FGM - This displayed the latest FGM announcement(s).
- Lyrics Menu - This was an interface to the famous lyrics.uwp.edu FTP server which hosted text files of user-contributed song lyrics to most popular music.
- Quit - This took you to a short farewell screen which sometimes lectured you on the evilness of leaving the FGM.
- Of Interest - Well, that never got finished. That was supposed to be a separate facility managed by my friend Chadd.
- Spawn - The spawn feature got me in a lot of trouble. Just kidding! This allowed people to temporarily leave the FGM so they could chat with someone, read e-mail, etc. and then come back.
- Usage List - Showed you who had recently logged into the FGM BBS and when.
Sometimes, especially during high-load times when a lot of people were getting online to read their e-mail and chat, the FGM would go pretty slow. The scripts would take a long time to load and users would be left staring at a menu screen or a blank screen waiting for the next screen to come up. To provide some reinforcement that the system was working, we identified the slowest parts of the FGM and through up a "please stand by" screen using VT-codes.

The FGM stand-by screen.
How about a peek at some of the code that made the FGM possible? Warning: It's not pretty. :-)
$ type sys$input ^[[2J^[[H S - Save Entry A - Abort E - Edit some more $ENTER_DONE: $ Inquire/nopun ent_comm "Which command: " $ ent_comm = f$extract(0,1,ent_comm) $ If ent_comm .eqs. "S" then goto SA $ if ent_comm .eqs. "A" then goto ABORT_ENTRY $ if ent_comm .eqs. "E" then goto ED $ goto ENTER_DONE $SA: $ DEFINE/NOLOG SYS$ERROR sys$Login:err.fgm_temp $ define sys$output SYS$LOGIN:ERR.FGM_TEMP $ append sys$login:fgm_room.fgm_temp sys$login:fgm_header.fgm_temp $ ren sys$login:fgm_header.fgm_temp sys$login:fgm_room.fgm_temp $ purge sys$Login:*.fgm_temp $ deassign sys$error $ DEASSIGN SYS$OUTPUT $ Write sys$Output "Saving interactive entry." $ open/append LOG_FILE user$disk:[c.slcjm.info]LOG.TXT $ write LOG_FILE f$cvtime(,,"HOUR"),":",F$CVTIME(,,"MINUTE")," " - , "An entry made in ", PRESENT_ROOM, "." $ close LOG_FILE $ NEWN = LAST_NUM + 1 $ LAST_NUM = NEWN $ DEFINE/NOLOG SYS$ERROR sys$Login:err.fgm_temp $ define sys$output SYS$LOGIN:ERR.FGM_TEMP $ append SYS$LOGIN:FGM_ROOM.FGM_TEMP - user$disk:[c.slcjm.info.rooms.'PRESENT_ROOM']POST.'NEWN' $ del SYS$LOGIN:FGM_ROOM.FGM_TEMP; $ deassign sys$error $ DEASSIGN SYS$OUTPUT $ delete sys$login:err.fgm_temp;*