• Please review our updated Terms and Rules here

Lotus 1-2-3 Version 2.x Add-Ins and Developer Tools?

At the time there were quite a few (probably small) companies developing AddIns. But with the change of the development environment to Lotus' specific AddIn language with Release 3 and later, the disks with the earlier more primitive development tools probably have been tossed.

Maybe this compiler came with parts/libraries/header files from the original Lotus Developer Kit. So it would surely be worth to look for it. Do you remember, whether the "compiled" macros were generated in the form of an *.ADN (AddIn) file and whether an assembler/linker was needed for this package?

Martin
 
I remember vividly that there was no GUI. To create a 321GOSUB add-in, one prepared a unique spreadsheet in Lotus V2.x for each function to be created, with the calculation in a single contiguous column. The top cell of the range was the name of the function to be created; the last cell was the result.

The spreadsheet was submitted to the compiler using a DOS command to produce (to the best of my memory) a standalone add-in with no assembler/linker involved. If there were resource files required, they were already part of Lotus. I also remember that, using a command line instruction, one could combine individual functions into a single add-in library. From memory, the 321GOSUB add-in file extension was ADN, but I am not certain on that.

I’ve just found a bunch of 3.5” floppies with 123 V2 spreadsheets and add-ins. Will order a USB peripheral to read them and report back any additional findings. I had the 321GOSUB diskette in my hands only a few months ago, so there is a chance I’ll find it again and be able to produce the compiler itself.

I later made add-ins using Lotus V3 and its own C-like Lotus Programming Language (LPL). Yet later I used the C-API to build industrial grade compiled XLL add-ins for Excel, something I still do today to inform my day trading of stocks and bonds.
 
Hello Martin, I too am interested in Lotus 2.x add-ins. Were you aware of the 321GOSUB function compiler for V2? It was produced by a small Waterloo, Ontario area company. I used it to build compiled financial add-ins. I might just have a floppy with the compiler somewhere and start will looking for it. I am also looking for historical information on the company that produced it, have found nothing on the web. I might have the exact arrangement of the product name slightly wrong, for example it could be 321-GOSUB or 321GO-SUB. Hope this information intrigues you as much as it does me
It looks like "3-2-1 Gosub" is the correct "spelling" which yields results from Google. Google Books has a small number of matches too.
 
A dump of the header of @EASE6.AND shows these details:

File = "ADDINS\ATEASE\@EASE6.ADN"
length = 11471 = 0x2CCF
type = 0x0010 = @function
flags = 0x0002
fnInit @ 0x2286
name = "ADD-IN DRIVER "
name = " Custom Add-In @Function
init = 00 00 00 machine code bytes
term = E9 3D 22 machine code bytes
fnTable @ 0x0542
fnCount = 10
fn[1].Name @ST(1 params) @ 1A75
fn[2].Name @GT(1 params) @ 1AA3
fn[3].Name @C(2 params) @ 18A8
fn[4].Name @U(1 params) @ 1E40
fn[5].Name @GTSU(1 params) @ 1AF6
fn[6].Name @SD(1 params) @ 1F14
fn[7].Name @GTD(1 params) @ 2126
fn[8].Name @GTDSU(1 params) @ 2226
fn[9].Name @DI(1 params) @ 06D1

fn[10].Name @SCOLS(1 params) @ 1837

Martin
 

Attachments

Attached is an improved version of the *.ADN dumper.

I was able to identify the previously labeled "unknown" address as pointing to a table of function pointers.

When Lotus 1-2-3 loads the AddIn, it reads the function pointer table which initially contains offsets to strings with names of internal 1-2-3 functions. It then looks up the address of each function and updates the table of far pointers so that it contains the absolute address of each interface function, residing inside 1-2-3. After this dynamic linking process has performed, the AddIn can call these interface functions to manipulate the spreadsheet and the calculation stack.
What the functions actually do, requires some more research, though.

Martin
 

Attachments

... and another tiny bit of progress ... I have adapted and cleaned the @peek function in my TEST Addin so that it actually checks the number of parameters on the calculation stack and then performs some calculations on its parameters (that has nothing to do with the intended PEEK function).
Unfortunately it is rather time consuming to find out how to use the about 200 internal functions available in the 1-2-3 interface (the function names are in the Python script).
 

Attachments

Back
Top