QModem 4.51 Source Code

(github.com)

191 points | by AaronFriel 21 hours ago ago

70 comments

  • wenc 17 hours 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 16 hours 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 14 hours 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 9 hours 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 16 hours 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 14 hours ago

        Ah SLMR is OLX.

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

        • ghewgill 9 hours ago

          SLMR and OLX were by the same author, but OLX was a complete rewrite and didn't look anything like SLMR.

        • 486sx33 11 hours ago

          Wildcat! Was great

        • EvanAnderson 14 hours 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 12 hours 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 13 hours 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 16 hours ago

      I use slrn and mutt with mbsync/msmtp like that, among RSS.

  • LVB 19 hours 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 20 hours 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 16 hours 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 19 hours 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 8 hours 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 6 hours 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 18 hours 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 18 hours 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 15 hours 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 14 hours ago

        Anders sure has a great lineage of languages he developed.

      • hnlmorg 16 hours ago

        Well said. That’s been one of the biggest lessons I’ve learned over my career too.

  • EvanAnderson 19 hours 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.

  • mrpippy 20 hours ago

    Original post when John Friel passed away: https://news.ycombinator.com/item?id=42551900

    • monocasa 20 hours 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 18 hours ago

        Yikes, my mistake, fixed.

      • reaperducer 20 hours 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 18 hours ago

          Who will devolve themselves out of history, I say let them.

          • monocasa 15 hours ago

            A true gradient descent into the trash can.

  • antirez 19 hours 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 17 hours ago

      Seeing "internet connection" mentioned in connection with QMODEM is weird. Are you sure you got your story right?

      • resize2996 16 hours 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 17 hours 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 16 hours 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 14 hours 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 14 hours 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 5 hours 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 14 hours 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 13 hours 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 14 hours 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 13 hours 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 13 hours 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 15 hours 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 14 hours 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 13 hours 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_ 17 hours 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 17 hours ago

        Modems were the way to connect to the internet providers so I guess he used QMODEM to dial up.

        • yusina 16 hours ago

          That's not at all what QMODEM does.

          • grgbrn 14 hours ago

            That's precisely what QMODEM does? What do you think it does?

            • spauldo 12 hours 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 5 hours 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 20 hours 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 12 hours 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.

  • justmarc 3 hours 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!

  • firesteelrain 13 hours 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 13 hours 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 12 hours 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 19 hours 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 13 hours ago

      I used Procomm for a bit and then Telix. Never used QModem myself but I appreciate any dial up BBS reminiscence.

    • mycall 14 hours ago

      Same here, Telix was the best for its time. Procomm and Qmodem were top tier as well.

  • f1shy 18 hours ago

    Beautiful code in a beautiful language. Very nice to see this.

  • breu 8 hours 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..

  • bananaboy 9 hours 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 20 hours ago

    Batch upload Phone book Mini bbs server Later Windows Scripts Terminal window Graphics

    Great memories !

  • jjuliano 8 hours ago

    ATZ^M

    AT&F^M

    ATDT 12345678

  • snvzz 17 hours 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 16 hours ago

      I'm sure his son can legally apply a license to that work.

  • ck2 18 hours 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 16 hours ago

      You’re probably thinking of YModem.