sblendorio / 123elf

A native port of Lotus 1-2-3 to Linux.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Lotus 1-2-3 for Linux

This is a native port of Lotus 1-2-3 Release 3 to Linux. This is possible because Lotus 1-2-3 for UNIX SystemV used a trick called partial linking to workaround a technical limitation in early UNIX systems. Surprisingly, that can be used to modify it to support new platforms.

There's an article documenting how this is possible here.

Lotus 1-2-3 for Linux

Keybindings for real DEC VT320 terminal

If you use a physical DEC VT320 there will be a remapping for some function keys to enable the navigation through multiple-sheet files. These are remapped keys:

  • SHIFT + F20: go to the next sheet (equivalent to CTRL + PgUp on PC)
  • SHIFT + F19: go to the previous sheet (equivalent to CTRL + PgDn on PC)
  • SHIFT + F11: equivalent to ESC

Building

Dependencies

First, you need a version of binutils that is compiled with coff-i386 target support. You can check like this:

$ objdump --info | grep coff-i386

Note: Most distributions do not enable this for some reason.

Run the included binutils.sh to download and compile a version of binutils known to work for this.

Secondly, you need a copy of Lotus 1-2-3 for UNIX, you can download it here. Just place the raw disk images in the build directory and run extract.sh.

Finally, just run make.

Packages

The following packages are required

Ubuntu Fedora Debian (bookworm)
build-essential glibc-devel.i686 build-essential
gcc-multilib libgcc.i686 gcc-multilib
lib32ncurses-dev ncurses-static.i686 lib32ncurses-dev

Binutils

Unfortunately, most distributions do not enable coff-i386 support in binutils.

It's very easy to enable it yourself, download binutils and configure it with --enable-targets=all.

Note: binutils-2.38 is known to work, some earlier versions have been found to not work.

There's no need to install it, just build it with make.

When that's complete, copy objcopy and objdump from the binutils directory, and ld-new from the ld directory to 123elf directory.

Important: Remember to rename ld-new to ld.

The Makefile should automatically use the new binaries, and continue to build.

Running

Just run ./123.

Getting Started

  • There is a man page in ./root/lotus/man/man1/123.1, and a full manual available online here.

Lotus 1-2-3 has context sensitive online help, you can press F1 at most times to see some hints.

Note: You use use the / key to open the 123 menu!

If you've used any spreadsheet before, you should be able to get started quickly. Functions use @ instead of =, but the common functions like @SUM, @AVG, @INDEX, and even @HLOOKUP all work as you would expect.

FAQ

  • Q. How do I quit 123?

If the status indicator in the top right says READY, try /Quit Yes.

If it doesn't say READY (it might say ERROR, HELP POINT, MENU or something else), try hitting Esc until it goes back to READY.

Bugs

  • The keyboard map seems to be incomplete This seems to be working in xterm, please test other terminals!
  • Graphs don't work yet (Partially working!, see #5).
  • Printing doesn't work yet.
  • File an issue if you notice something, there are probably lots of minor issues that can be fixed!

Security

By default, 123 allows Autoexec macros in worksheets. Lotus macros are very powerful, and can run shell commands, read and write arbitrary files, load plugins and so on.

However, you can disable Autoexec macros via /Worksheet Global Default Autoexec.

I am thinking of changing this default before we reach a first release, see #27.

If you disable Autoexec then in theory it's safe to open untrusted worksheets -- but this software hasn't been maintained for over 30 years, and may contain security bugs!

We can fix bugs with coffsyrup, by redirecting unsafe functions to new safe versions, so we will make a best effort to fix vulnerabilities if you report them!

About

A native port of Lotus 1-2-3 to Linux.


Languages

Language:C 94.8%Language:Assembly 3.0%Language:Shell 1.2%Language:Makefile 1.0%