Date: Thu 23 Jan, 2003 at 00:44
Topic: General
Headline: Good ole FGM
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;*
|