QModem 4.51 Source Code

190 AaronFriel 70 5/3/2025, 3:30:33 PM github.com ↗

Comments (70)

wenc · 15h ago
This brought back memories. I remember dialling into BBSes using Qmodem, downloading QWKs (compressed email packets) from “conferences” (similar to newsgroups).

I would read/reply offline using OLX (Offline Express, a QWK reader also part of the Qmodem suite), and then batch upload my replies (.REPs, also compressed) to the BBS.

This was back in the day when you weren't connected 24/7, and when dial-up wasn’t unlimited (in my country — even if it was, BBSes were node limited so you couldn’t stay connected forever). So participating in BBS conferences meant quick dial-ins and uploads, where most of the messaging/replies was done offline.

Although bandwidth is abundant these days, I still think the QWK/REP idea is an attractive one. There is an art and a beauty to crafting replies offline from the cozy Turbo Vision UI that was OLX.

atombender · 14h ago
Similar story here. I used RoboMail for MS-DOS as the offline reader back in maybe 1992-1993?, connecting to a BBS that interfaced with RelayNet/RIME, which was similar to FidoNet.

RoboMail wasn't TurboVision, but it was very nice as TUIs went at the time. It seems mostly vanished from Google. I was a Turbo Pascal developer myself at the time, and I made an offline reader that I thought was far superior (multiple Turbo Vision windows etc.), but by the time I had gotten close to the point of release, the Internet arrived and I completely lost interest.

I still wish there was an archive of RelayNet, because I used to post a lot, and of course I never kept anything myself. I've never found any archive of the content since it was shut down in 2007.

Also, it's sad to hear that the QWK format's creator died in a swatting incident in 2020, of all things.

EvanAnderson · 12h ago
> Also, it's sad to hear that the QWK format's creator died in a swatting incident in 2020, of all things.

Oh, man. That sucks. I knew about that tragedy[0] but I never read deep enough to realize that Mark Herring (the gentleman who, arguably, was killed in the incident) was the creator of the QWK format.

It was already a horrific story. Now it just feels that much closer to home. Ugh. RIP Mark Herring.

[0] https://en.wikipedia.org/wiki/2020_Tennessee_swatting

ghewgill · 7h ago
OLX (and SLMR) author here. It gives me warm fuzzies to hear about your positive experiences with OLX, after all these years. To this day I maintain that Turbo Vision was peak computer UI, it's been downhill since. :)
EvanAnderson · 14h ago
I loved QWK packets. That saved me a ton of long distance telephone charges. I didn't use OLX ("Silly Little Mail Reader" was my jam) but the concept was wonderful.
wenc · 12h ago
Ah SLMR is OLX.

Mustang Software (Wildcat! BBS) bought Qmodem and SLMR (and renamed the latter to OLX).

ghewgill · 7h ago
SLMR and OLX were by the same author, but OLX was a complete rewrite and didn't look anything like SLMR.
486sx33 · 9h ago
Wildcat! Was great
EvanAnderson · 12h ago
Oh, wow. I didn't realize that. Very cool. I used the heck out of it.

At one point I learned about the QWK format and wrote some code to build a QWK packet out of text files. My idea was to distribute an e-zine as a QWK packet. I successfully made QWK packets but never had any actual content to release.

wenc · 10h ago
> My idea was to distribute an e-zine as a QWK packet.

What a cool idea! I would have loved something like that.

This hearkens back to the day of Byte and PC Magazine where I would actually buy paper magazines to learn about the latest tech -- and I wondered, why couldn't there be an electronic version of this? (the QWK downloadable e-zine idea sounds so ergonomic). But eventually the Internet happened and we got these in the form of websites.

But I feel websites still lack the nice offline, self-contained natures of a magazine. Links on a website feel dispersed. Whereas an offline packetized magazine would have a linear nature to it, and you'd be able to browse in one sitting. And look at full page glossy ads (hey, I looked at the ads -- they were so cool back in the day with Gateway and Dell feuding).

Ah water under the bridge now...

ghaff · 10h ago
Yeah. My primary BBS was relatively nearby in the same state. But in those days intrastate US calls outside of your very local area could actually cost more than interstate.
anthk · 14h ago
I use slrn and mutt with mbsync/msmtp like that, among RSS.
LVB · 17h ago
I love seeing this. I used these tools during my computer-formative years. Now, at 51 with a whole computer career under my belt, I've been thinking a lot about those days. Nostalgia will bias things positively, of course, but I'm look back fondly on how, at least for personal projects, I just did stuff.

At that time, I had no background in "real" CS or best practices. I didn't have the internet advising this way or that, and my only resource was a book or two from B. Dalton. I didn't even really think about good or bad code... merely: does it do the thing I want it to. I just made my programs however I wanted and thoroughly enjoyed it.

Lately, I've wanted to get back to that mode, at least a bit. It is really tough to set aside all of the rigor and analysis I'm accustomed to and just bang something out. Ugly, buggy, happy path only, but at least they exist. Things like Cursor et al. have come along at the right time...

nu11ptr · 17h ago
Super cool. At first I was thinking QModem was the name of an old protocol (like XModem, YModem, ZModem) because it has been so long, but it sounded so familiar. I googled for images and boom - there it is, my childhood. I spent so many hours in this program, and what a great time I had dialing all my local BBSs and downloading all sorts of programs via ZModem on my 14.4K modem. Thank you, Aaron, for making this little piece of my childhood available for inspection and posterity. And may John RIP.

Update: it is also neat it was written in Pascal which was my 2nd language and holds a special place in my heart. I realized early on that BASIC was not ideal for writing professional programs and hadn't yet moved on to C, so Pascal had my attention for a number of years as a teenager.

johntarter · 14h ago
I also completely forgot that Qmodem isn't the protocol but the software. My first PC was an IBM XT 8088 with 20MB HD and 2400 baud modem. Twice as fast as a 1200 baud and the number of floppy disks it could fit in that hard drive!

Now also remembering we could assign macros on Qmodem to function keys. That let us automate playing games like Trade Wars. I'll be honest and say we were using it to also pirate games like Space Quest, Ultima, Leisure Suit Larry.

My lord, where has the time gone since then?

cptskippy · 17h ago
I remember once a month the the ABBL(Atlanta Bulletin Board List) would come out and my father would download and print it at work because we didn't have a printer. He'd come home with a reem of green striped tractor feed paper and I would scour over it transferring annotations from the previous list and making note of new boards to try.
Mountain_Skies · 6h ago
Atlanta during the BBS era must have been paradise. It had the largest local free calling zone of anywhere in the US. Where I lived, the town on the other side of the interstate was in-state long distance, so we were confined to the BBSes in our little suburb plus the nearby "big city" of about 100k people.

Maybe some places like the Bay Area and New York City had more local BBSes but it wouldn't surprise me if Atlanta was in the top five or even the top given the huge free calling zone.

toast0 · 4h ago
The SF Bay Area was probably full of BBSes, as was the Los Angeles Area, but we had Inter-LATA or 'Zone 3' calling for stuff where the central office was I think more than 15 miles away, but under some limit. Closer rate centera than that was local, farther would go through your long distance carrier. Unlimited local calling was available at a reasonable price, but Zone3 was still charged per minute (could cost more than some long distance carriers)
anonzzzies · 16h ago
Wow that is a long time ago. I spent so much time in there. I wrote my own BBS software for the MSX in Pascal before that and got a bit obsessed with cramming features. When my family switched to PC, I believed real programmers, including the author of qmodem, of course, programmed in C. If I had known then it was Pascal, I would've been a lot more sure of my young self that I was on the right track (I was 14 or so).
nu11ptr · 15h ago
I also felt inferior programming in Pascal and believed "real programmers" wrote in C back in the early 90s. I quickly moved on to Turbo C/C++ after only a couple of years writing in Turbo Pascal in my teen years. If there is one thing I have learned in 35 years writing code, it is to ignore tech religion and focus on getting the work done. Some of the biggest feats in software engineering have been done with the fewest resources at their disposal.
zafka · 13h ago
I loved Turbo C/C++!. I still have copies of the directory tree that I would move from computer to computer. It was a simple little sandbox to test things, or to show newbies code. I have an 486 box that still worked last I checked with a bunch of Turbo Pascal and Turbo C code - Almost all of which I would be embarrassed to see the light. I wrote thousands of lines of code before I should be using functions :). I did amuse myself though.
mycall · 12h ago
Anders sure has a great lineage of languages he developed.
hnlmorg · 13h ago
Well said. That’s been one of the biggest lessons I’ve learned over my career too.
EvanAnderson · 17h ago
Aaron - Thank you for putting this code out on Github. It is a fitting tribute to your father's work and his life. I wish you and and your family well.
justmarc · 1h ago
I glanced at the code, and it shows that your father cared a lot for his work.

Countless people were touched by his work and remember it decades later.

Thank you for sharing this!

mrpippy · 17h ago
Original post when John Friel passed away: https://news.ycombinator.com/item?id=42551900
monocasa · 17h ago
John Friel.

I normally wouldn't care about a mistake that'd be corrected when someone clicks through, but I think this is release supposed to be a sort of memorial to his life.

mrpippy · 16h ago
Yikes, my mistake, fixed.
reaperducer · 17h ago
I normally wouldn't care about a mistake that'd be corrected when someone clicks through, but I think this is release supposed to be a sort of memorial to his life.

Plus, AI crawls the world, and if it sees an error enough times, it becomes the truth for millions of people.

codr7 · 15h ago
Who will devolve themselves out of history, I say let them.
monocasa · 13h ago
A true gradient descent into the trash can.
antirez · 16h ago
A bit less than 30 years ago my friend and I found an IBM AT in the trash, perfect conditions, with even the floppy disks nearby. We connected it with an RS232 cable to a Linux box, and made an IRC workstation using QMODEM, for the girlfriend of my friend. We were connecting via dialups, and the bill every month was high. With Linux NAT, we were already sharing between my and his apartment, using a coaxial cable, and with the IBM AT now we could share the Internet connection to three computers.
yusina · 15h ago
Seeing "internet connection" mentioned in connection with QMODEM is weird. Are you sure you got your story right?
resize2996 · 14h ago
My first "real internet connection" (not prodigy or compuserve or local BBS) was connecting to the county library's gopher server via modem (Likely with QModem), navigating out to other gopher servers and then being able to telnet from there.
EvanAnderson · 14h ago
I'm reading it as they used the IBM AT as a serial terminal, running QMODEM as the terminal emulator, for a Linux host that was connected to the Internet via modem.
yusina · 14h ago
Saying "share the internet connection" is quite a stretch though if you just had a terminal connection to some other host which then connected to the internet. I'd associate "sharing a connection" with some (perhaps NATed) IP routing. And they mention NAT, thus my question.
EvanAnderson · 12h ago
Based on their mention of "coax" I bet they have a Linux box w/ a modem doing dial-up PPP to an ISP, and a 10Base-2 NIC that they used to attach another PC. The Linux box was doing IP masquerading (NAT) to share the PPP connection w/ the machine(s) on the 10Base-2 LAN.

Having the IBM AT a a serial terminal would let somebody run CLI-based software on the Linux box (like Lynx, an IRC client, FTP, etc). You'd just be using a shell account on the Linux box.

I did stuff like this in the early 90s at home and later at a company I worked at (sharing a single dial-up connection over 10Base-2 with 5-ish Windows 95 PCs).

grgbrn · 12h ago
Maybe your association would be different / the terminology would make more sense if you were online in the early 90s?

BUT, it was definitely possible to do what you're describing with some combination of a dialup shell account, a terminal program like qmodem and something like https://en.wikipedia.org/wiki/Slirp

yusina · 3h ago
I was online in the 90s and I did have a 286 PC. Thus my questions. (That PC was running DOS and didn't have much of a chance to have IP connectivity.)
EvanAnderson · 12h ago
I think running SLiRP on the Linux box and a SLIP client on the IBM AT was probably a stretch, but it's certainly possible. At that point it probably would have made more sense to grab an NE2000 NIC and throw the IBM AT onto the coax network.
spauldo · 10h ago
Most network software for DOS was LAN-oriented, like Novell or NetBIOS. Just drive mapping and printer redirection. I'm not aware of a TCP/IP connectivity suite being available for DOS in that era, and I'm not sure how it would have worked given that DOS provided no networking libraries to hook into.
grgbrn · 11h ago
Oh I wasn't trying to reverse-engineer his network from that comment, just saying that this was a thing that was possible and that people did at the time.

I agree it's highly unlikely that the AT was running slirp. Wikipedia says an AT was a 286, so it wouldn't have been linux. Not even sure what the options would have been. Minix? Xenix?

spauldo · 10h ago
QModem ran on DOS, so the AT wasn't running UNIX. It's almost certainly being used as a terminal.

I can confirm that they did run Minix OK, although I remember the network support was iffy at best. We never got it to work at any rate. XENIX would have been hard to get your hands on. I think QNX would run on an AT as well, although my memory might be playing tricks on me there.

EvanAnderson · 11h ago
Xenix definitely ran on a 286. I can't say re: Minix-- I never have used it (though I probably should just to have the experience). I believe there was a Crynwr SLIP packet driver.
antirez · 12h ago
The clue is in the rs232 mentioned in my comment. Linux is a Unix, even if nobody does it today you can configure an external terminal via serial port and use the system as if you were a user.

The two Linux box were one with the modem and the other via Nat (Ethernet but with old coaxial cables). The AT was just a terminal.

EvanAnderson · 12h ago
Having a serial terminal was just good fun, too, back in the days when having multiple monitors / computers wasn't common. I ran Slackware on a 486 w/ X Windows so I could use Netscape Navigator and I had an old RS-232 dumb terminal from my dad's old computer connected so I could have a shell open w/ an IRC client or my mail while I used Netscape. (I never liked running Pine in an X terminal. It was abnormal and strange. It seemed more natural on the terminal and it was cool to have two screens!)
antirez · 11h ago
Yes... I remember that even after having used Linux for a long time when we connected the AT we had the "Unix" experience in a different way.
tom_ · 14h ago
qmodem probably makes a perfectly good terminal program. So presumably the 3rd PC gets its internet connection (so to speak) by being a terminal for one of the other 2.
kosolam · 15h ago
Modems were the way to connect to the internet providers so I guess he used QMODEM to dial up.
yusina · 14h ago
That's not at all what QMODEM does.
grgbrn · 12h ago
That's precisely what QMODEM does? What do you think it does?
spauldo · 10h ago
QMODEM didn't connect to the Internet. It had no IP stack.

It could connect you to a machine that had Internet access. Some ISPs offered that as a service (you'd get some kind of BBS-like interface or - if you were lucky - a UNIX shell), but that's not the same thing.

QMODEM was essentially just a terminal emulator that used a serial port and understood how to control a modem.

yusina · 3h ago
Exactly.

After all this discussion here my conclusion is that "connecting to the internet" is an ambiguous term.

It can mean "have IP connectivity, i.e., IP packets routed to and from the internet" in which case the described PC was not "connected to the internet with QMODEM". It didn't do anything IP.

It can mean "have a terminal that can interact with information from/to the internet" in which case the PC was indeed "connected to the internet with QMODEM".

To me, the second meaning is quite the stretch, but apparently to others it's fine.

smashed · 17h ago
That is very cool, had no idea qmodem was built in Pascal at the time.

Thanks to the author for adding a very interesting readme.

I know this is for archiving and historical value, but I'm wondering what kind of license this work would/could fall under?

I see some files have copyright headers from probably long gone companies (upgrade.pas for example).

Also, the readme mentions the original documentation is not included but the src dir does contain a 98kb .HLP file, which I thought was more associated with early windows era software and not common for MS-DOS but someone might want to take a look

danielhlockard · 9h ago
Friel, It's no surprise to see you here posting this. This is so cool to see, thank you for preserving this. A fitting tribute.
firesteelrain · 11h ago
I forgot most of this but looking into the BBS software at the time, it looks like most of it was based on Pascal. Apparently very popular at the time
spauldo · 10h ago
Pascal was poised to be the de facto language for microcomputers back in the 80s and early 90s. It really could have gone either way.

I'm not sure what tipped the balance to C/C++. Maybe the Microsoft compilers? Maybe the merge of the minicomputer world into microcomputers? Either way, Pascal held on (via Delphi) into the early 2000s.

firesteelrain · 10h ago
2007-2012 I was still writing code in Borland C++ Builder 5 which shared a lot of code libraries with Delphi.

Our microcontroller code was written in Turbo C++

paulryanrogers · 17h ago
Gives me waves of nostalgia. I settled on Telix, but recall using Qmodem from time to time. These were essential tools to connecting to the outside world for us nerdy teens in the early 90s.
acheron · 11h ago
I used Procomm for a bit and then Telix. Never used QModem myself but I appreciate any dial up BBS reminiscence.
mycall · 12h ago
Same here, Telix was the best for its time. Procomm and Qmodem were top tier as well.
breu · 6h ago
This brings back lots of fond memories dialing into The Forbin Project and HITS BBS in the 90s. Met lots of people in the Waterloo/Cedar Falls (319) area and I feel the BBS scene contributed to my eventual major and multiple careers in IT.

And it all started with QModem..

f1shy · 16h ago
Beautiful code in a beautiful language. Very nice to see this.
bananaboy · 7h ago
Wow! I never knew of qmodem. I used Telix, maybe Procomm I’m not sure, and finally Terminate. I used Terminate the most. So interesting to see this though and like someone else said I also appreciate any reminiscence from that era.
486sx33 · 17h ago
Batch upload Phone book Mini bbs server Later Windows Scripts Terminal window Graphics

Great memories !

jjuliano · 6h ago
ATZ^M

AT&F^M

ATDT 12345678

snvzz · 15h ago
Without a license, it's sadly not possible to continue to maintain the code, or even e.g. package it as part of freedos.
sgt · 14h ago
I'm sure his son can legally apply a license to that work.
ck2 · 15h ago
Ha my instant memory just seeing the word "qmodem" goes back so many decades?

If Zmodem isn't available, choose Qmodem because Xmodem is slow as heck with ack after each packet

I'm sure someone has a simulator around the web somewhere but not quite that nostalgic

sedatk · 14h ago
You’re probably thinking of YModem.