Traveling 20+ years back in time
It is a rare treat to be able to travel 20+ years in the past.
I don’t know if you remember life in ’99. Do you?
I was just graduating from high school, about to go to university. The Y2K craze was in full swing, ICQ was still all the rage, and the Internet was far from common.
And almost all of my personal memories from back then are now rose-colored. Yes, despite only having dial-up modems, terribly slow computers, and only GSM dumb-phones to speak of1.
And I presume I could wax lyrical about the era gone past for quite a while. But today I want to talk about one specific encounter.
About a time capsule I unearthed, in the form of my senior high graduation
project: an MS-DOS program to compute parameters of
gears toothy wheels.
What on un-earth?
Going through some old CD/DVD archives of mine, I spotted an innocent looking
zav.arj. Turns out, even in 2022,
arj is available in Debian stable.
Just inspecting the file:
$ arj t ~/zav.arj ARJ32 v 3.10, Copyright (c) 1998-2004, ARJ Software Russia. Processing archive: /home/wejn/zav.arj Archive created: 1999-03-28 19:23:40, modified: 1999-03-28 19:23:40 Testing DOC/USER-FP.HTM OK Testing DOC/TECH-FP.HTM OK Testing DOC/USER.HTM OK Testing DOC/TECH.HTM OK Testing OZUBENI/OZUBENI.EXE OK Testing OZUBENI/INFO.NFO OK Testing OZUBENI/HELP.NFO OK Testing OZUBENI/LATIN2.FNT OK Testing OZUBENI/LOGO.WMG OK Testing SRC/MAKEFILE OK Testing SRC/BEEPS.C OK Testing SRC/CESTINA.C OK Testing SRC/DOSERR.C OK [...] Testing SRC/OBJEKTY.H OK Testing SRC/HELP.X OK Testing SRC/INFO.X OK Testing SRC/DATA/LATIN2.FNT OK Testing SRC/DATA/LOGO.WMG OK [...] Testing SRC/UTILS/WASTEMEM.C OK 48 file(s)
brought back a flood of memories.
I couldn’t resist, spun up latest FreeDOS image in VirtualBox and was greeted by the terrifying beauty:
Back then it was all in Czech, for DOS, and – by today’s standards – trivial2.
But that doesn’t stop me from fondly remembering the hundreds of hours (yes, seriously) I’ve sank into something that could’ve been “phoned in” in just a few hours in the then-typical fashion:
C:\> ozubeni.exe Ozubeni v. 1.16f 1. Information 2. Calculation 3. End Enter 1-3: 2 ---- 1. Using z, m 2. Using D, m 3. Using Da, m 4. Using Df, m 5. Using D, z 6. Using Da, z 7. Using Df, z 8. Go back Enter 1-8: 1 ---- Computation: Enter m: 1 Enter z: 16 Results: ha: 1 hf: 1.25 h: 2.25 ca: 0.25 D: 16 Da: 18 Df: 13.5 t: 3.1416 b: 1.5708 alfa: 20 tb: 2.9521 No warnings/errors. ---- 1. Save to file 2. Print result 3. Return to main menu 4. End Enter 1-4: 4 Thank you for using Ozubeni v. 1.16f C:\>
And to be fair, that’s a perfectly valid approach that would have netted you a passing grade.
So what was so special about my little program?3
I happened to hate a few things about plain DOS:
- Text-only programs with terrible user experience4
- Issues with Czech accents support5
- Default MS-DOS I/O errors (“Abort, Retry, Fail”, anyone?)
So I went completely ballistic and wrote a TUI from scratch. Because as an auto-didact I had no idea how the proper TUI in Borland C++ 3.1 worked.
I built in a help screen, arrow-based navigation and form-like screens, error indicators that auto-refreshed, custom I/O handler, custom font driver to eliminate the charset issues, fancy fade-out and fade-in transitions6.
@fg13@Nápověda@fg--@ @fg13@Popis ovládání@fg--@ @fg15@Klávesa: Význam:@fg--@ Kurzorové šipky pohyb mezi položkami PgUp / PgDn stránkování (nápovědy a informací o programu)
into a continuous
<char><color> stream (line-adjusted) that was then
arrow-scrollable on the 80x25 display area.
But what’s the
secret sauce lesson? Because none of this is truly
remarkable. It might have a decent level of craftsmanship7. But that’s
I think the lesson is this:
If you bang your head against the wall long enough, decent work inevitably pops out.
It probably helped a lot that I was hopelessly in love with computers by that time. And that I didn’t own one. Because constraints tend to have a positive effect on productivity and creativity.
So maybe a second lesson is about the work of love and overcoming obstacles.
In any case, 20+ years later and to my younger self: hey, not bad. :-)
If you want to do decent work, go bang your head against a wall for a multitude of hours8. See what comes out.
Apart from me writing it. Me. Me. Meeeee. Bear with me, though? ↩
The DOS ones, though. I truly loved Linux by that point. But nowhere in DOS can one find the pipes,
awk, etc. Plus text-interactive programs are the worst. ↩
Back in the day there were two DOS standards for ASCII extended charset (IBM852, DOS-895). And then with Windows there were two more (ISO-8859-2, Windows-1250) before eventually Unicode got adopted… and saved the day (sort of). ↩
That aren’t visible when running in VirtualBox… the whole CPU too fast issue some old DOS games had, I guess. ↩
If you don’t look at the source too closely. And discount it against the circumstances. ↩
Maybe skip that part, it’s terrible. :-) ↩
IBM852 encoded, btw. iconv can handle it. ↩