__ ______ ____ ____ \ \ / / __ )| __ ) ___| \ \ /\ / /| _ \| _ \___ \ \ V V / | |_) | |_) |__) | \_/\_/ |____/|____/____/
I wrote WBBS while living in my first apartment, which I rented shortly after I moved to Phoenix around 1986. I had a Sanyo 550, a mostly-sorta-DOS-compatible PC with two 1.2M floppy drives (no hard drive), and Turbo Pascal 2.0. What else did I need? I was doing data entry at Bank of America the time (I had no credentials that would prove I was a programmer, and knew nobody who could vouch for me); after I got home I would hack on the BBS until it was way too late and then go to bed.
The coolest thing that came out of WBBS was IBMCOM, the communication routines that I released into the public domain (they're now under the LGPL license). I think that several BBS's used IBMCOM, including QBBS and SUBBS. Writing interrupt drivers is pretty fun stuff, and I like to think that my interrupt drivers are pretty clean.
I spent a whole lot of time on WBBS making it responsive. Because BBS's were run off of floppies in that day, it was a common practice to make a big transmit buffer so that the modem always had something to send even if you were busy reading more stuff from the floppy. The problem, of course, was that this meant that a control-C (to stop the output) or a control-S (to pause it) would take a long time to actually happen, because the interrupt driver still had all this buffered output to send. That bugged me.
The cheap hack would just have the keyboard polling routines talk to the interrupt driver, but there was some output I didn't want paused or interrupted -- the prompt, for example, should always show up. I was very concerned that the UI always appear to be cohesive and uniform, so I hated stuff like half-printed prompts. I remember spending lots of time learning how the UI could control the interrupt driver to the degree that control-S and control-C could happen right away instead of seconds from now, but only when it was a "good idea" from a UI point of view.
I hope someone noticed the effort and thought it was a nice feature.
I also tried hard to avoid lots of menus. Most everything in WBBS worked from the main menu. I hated having to go through lots of different menus to do something in other BBS's of the day.
I think that message reading in WBBS was pretty easy, once you got used to it. At least for a programmer it was easy, and that's fine, because I mostly wanted my BBS to be a good place for programmers to exchange code and ideas. For a few years I ran Pascalaholics Anonymous, which had some good Pascal source in the file area.
I also tried hard to make it fast. This was challenging, considering that it was all floppy based. I remember the password file giving me grief, because the BBS would have to read every record from the password file to check it against the entered password. And storing the password file in memory would take too much RAM. The idea I came up with was to compute CRC's on the passwords and store those in memory -- I already had a CRC routing to use for ZModem transfers, and a 16-bit CRC takes hardly any memory. When someone entered their name, I'd compute the CRC of it, compare it to the CRC list in memory, and only read from disk those records that had the same CRC. That reduced the number of disk reads for someone to log on to just 1 or 2.
By the way, I've lost the source. If anyone has it, pretty please send it. I'll release it under the GPL (like I would have originally, if only I had known that there was such a thing).
If anyone has the source code to WBBS, please e-mail: Mark Firestone.