It’s an exciting time to be in the Lotus 1-2-3 enthusiast community – that was a joke, there is no enthusiast community, it’s just me! 😆
It really is an exciting time though – that part isn’t a joke!
There have been some major developments in the last few weeks, and I guess that’s pretty unusual for 30 year old abandonware.
I’ll cut to the chase; through a combination of unlikely discoveries, crazy hacks and the 90s BBS warez scene I’ve been able to port Lotus 1-2-3 natively to Linux – an operating system that literally didn’t exist when 1-2-3 was released!1
If you want to hear how a proprietary application could be ported to new operating systems 30 years after release, read on!
Lotus 1-2-3 Demo
I really like Lotus 1-2-3, I even maintain a driver to make sure it works well on modern systems. I had to reverse engineer the driver api to make that happen, but it works beautifully.
Getting that driver working was quite an adventure, but there is still one piece of the puzzle missing: add-ins. 1-2-3 was designed to be extensible with plugins (or “add-ins”) – in theory you could add support for modern spreadsheet functions or integrate with Google Finance or something!
The problem is add-ins had to be written in a special language called LPL, and unfortunately the compiler and SDK have been lost. This is not really surprising, this was a niche product and Lotus didn’t just give the SDK away – they charged $395 for it. I can’t imagine many people have a copy just lying around.
There were lots of commercial plugins available in the heyday, some were really impressive! I emailed a few developers who worked on some to see if they had any old backups, the answer was always the same – 1-2-3 was the biggest name in software, nobody thought it was going anywhere, so why would they keep backups?
There were also two third-party books written about LPL, I managed to track them down from old libraries! I like the cover on this one, very serious business. It’s so frustating, I can see screenshots of the debugger, compiler output and sample add-ins – but just can’t do anything with it without the SDK!
Lotus Toolkit Guide
Progress
Scenelist NFO
Fast forward a year or two, and I found someone who used to be a sysop in the ’90s BBS scene. Check out his website, he still has a catalogue of NFOs and a telnet BBS online if you want to see some rad ANSI art!
He had kept tape backups from old BBS systems, and was able to recover a warez copy of the SDK – unbelievable! It actually worked, I was able to build a few sample plugins!
LPL Compiler
You can download the ADK right here, and here is a sample LPL program.
This would already have been enough to keep me entertained for a while, but it doesn’t stop there. It turns out that the BBS also had a warez copy of Lotus 1-2-3 for UNIX. This was widely thought to be lost – I’m told it couldn’t compete with a more popular UNIX office suite called SCO Professional, so there were not many copies sold.
I didn’t really have any use for it, but I’m definitely curious enough to poke around on the installation media to see what’s in it!
Lotus 1-2-3 For UNIX
Teledisk Logo
The warez release was a bunch of TD0 files, that’s a format I’ve never seen before – apparently it’s an old compressed disk image format from the 80s. I found this page which recommends using samdisk to convert it to a raw disk image.
$ ls
123UNIX1.TD0 123UNIX2.TD0 123UNIX3.TD0 123UNIX4.TD0 123UNIX5.TD0 LEGAL.NFO WHATITIS
$ file *.TD0
123UNIX1.TD0: floppy image data (TeleDisk)
123UNIX2.TD0: floppy image data (TeleDisk)
123UNIX3.TD0: floppy image data (TeleDisk)
123UNIX4.TD0: floppy image data (TeleDisk)
123UNIX5.TD0: floppy image data (TeleDisk)
That seemed promising, samdisk builds and seems to work! I’ve uploaded the full images onto the Internet Archive in case anyone else is curious enough to take a look.
$ samdisk info 123UNIX1.TD0
[123UNIX1.TD0]
Type: TD0
Size: 80 Cyls, 2 Heads
created : 1991-06-22 20:24:04
Lotus 1-2-3 for UNIX System V
$ for i in *.TD0; do samdisk copy ${i} ${i/.TD0/.RAW}; done
Wrote 80 cyls, 2 heads, 18 sectors, 512 bytes/sector = 1474560 bytes
Wrote 80 cyls, 2 heads, 18 sectors, 512 bytes/sector = 1474560 bytes
Wrote 80 cyls, 2 heads, 18 sectors, 512 bytes/sector = 1474560 bytes
Wrote 80 cyls, 2 heads, 18 sectors, 512 bytes/sector = 1474560 bytes
Wrote 80 cyls, 2 heads, 18 sectors, 512 bytes/sector = 1474560 bytes
$ file *.RAW
123UNIX1.RAW: tar archive
123UNIX2.RAW: ASCII cpio archive (pre-SVR4 or odc)
123UNIX3.RAW: ASCII cpio archive (pre-SVR4 or odc)
123UNIX4.RAW: ASCII cpio archive (pre-SVR4 or odc)
123UNIX5.RAW: ASCII cpio archive (pre-SVR4 or odc)
123 UNIX Manual
I know that UNIX software was usually distributed as raw archives, and you were expected to insert the diskette and run something like tar -C / -xvf /dev/fd0, so these files look right. I think this is smart, why waste precious bytes on a filesystem!
$ tar xf 123UNIX1.RAW
$ for i in 123UNIX{2..5}.RAW; do cpio -id < $i; done
1555 blocks
2606 blocks
2510 blocks
2481 blocks
Whoops, you're not connected to Mailchimp. You need to enter a valid Mailchimp API key.
Our site uses cookies. Learn more about our use of cookies: cookie policyACCEPTREJECT
Privacy & Cookies Policy
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.