Now Reading
Lotus 1-2-3

Lotus 1-2-3

2023-05-09 06:35:44

Imagine it or not, the outdated Lotus ftp site continues to be on-line. I mirrored every little thing they needed to my workstation and sifted by means of it.

Historical past

Lotus 1-2-3 was ported to a bunch of methods, together with OpenVMS, Xenix, and even System/390. In 1991, Lotus launched a model for SunOS4 on SPARC.

Just a few years later, a Lotus engineer uploaded a patch for a file administration bug within the XALERT part that affected the 1.2 replace. Fortunately, they forgot to take away the STABS knowledge, leaving extremely wealthy debugging knowledge.

typedef brief int lmbcs_type;
typedef brief int platform;
typedef brief int memory_type;
struct envblk_ { /* dimension 68 id 9 */
  brief int envsize; /* bitsize 16, bitpos 0 */
  brief int pfid; /* bitsize 16, bitpos 16 */
  brief int csid; /* bitsize 16, bitpos 32 */
  brief int pad; /* bitsize 16, bitpos 48 */
  brief int maps; /* bitsize 16, bitpos 64 */
  brief int kind; /* bitsize 16, bitpos 80 */
  mptr nulh; /* bitsize 32, bitpos 96 */
  lengthy unsigned int maxsize; /* bitsize 32, bitpos 128 */
  unsigned char *applid; /* bitsize 32, bitpos 160 */
  lhdl gabinfo; /* bitsize 32, bitpos 192 */
  char *regfile; /* bitsize 32, bitpos 224 */
  mptr (*get) (/* unknown */); /* bitsize 32, bitpos 256 */
  brief int (*free) (/* unknown */); /* bitsize 32, bitpos 288 */
  lhdl (*map) (/* unknown */); /* bitsize 32, bitpos 320 */
  void (*unmap) (/* unknown */); /* bitsize 32, bitpos 352 */
  lhdl (*alloc) (/* unknown */); /* bitsize 32, bitpos 384 */
  brief int (*dealloc) (/* unknown */); /* bitsize 32, bitpos 416 */
  brief unsigned int (*load) (/* unknown */); /* bitsize 32, bitpos 448 */
  brief unsigned int (*unload) (/* unknown */); /* bitsize 32, bitpos 480 */
  brief unsigned int (*syscall) (/* unknown */); /* bitsize 32, bitpos 512 */
};
typedef struct envblk_ /* id 9 */ envblk;
typedef lengthy int LpiSTATUS;
...

This was the one file (belief me, I checked all of them) that had any debugging knowledge left on the entire ftp!

Now, this file was for a unique structure, working system, compiler, launch and was a protracted out of date format. However, the clues it contained in regards to the driver API have been invaluable, and saved me a lot time.

$ file alert.so1
alert.so1: SPARC demand paged shared library not stripped

The file was so outdated that to learn the information I needed to discover an older model of binutils that also supported a.out-sunos-big. Fortunately that labored and it was in a position to reconstruct a ton of helpful knowledge.

Right here is the full recovered data, should you’re .

Extra Luck

I obtained one other stroke of luck, I discovered a 3rd occasion printer driver on an outdated SUNET archive for the Siemens Highprint 7400. Remarkably, it had some historic Codeview debugging knowledge left in it.

Siemens Highprint 7400

Here’s a image of a girl printing some rorschach checks together with her new Highprint 7400, for some purpose.

The debugging knowledge was so outdated, I struggled to discover a software that would parse it. The information had a model code NB02, which implies they in all probability used hyperlink.exe model 5, launched round 1988. I attempted TDUMP, CVDUMP and even SYMDEB, and none acknowledged it. I did ultimately discover an sufficiently old model of Codeview that would learn it, but it surely had no option to save output to a file besides “printing” your backlog, and the backlog wasn’t sufficiently big to carry all the information!

I needed to script a DOS emulator to scrape the information out a web page at a time! I can’t let you know how a lot time I wasted getting this working, but it surely was price it, it gave some worthwhile hints about how the DEVPRIM (System Primitive) API labored.

Publics for: _DVTBL!*
Symbols for: L13PSI74!*
3CD5:016E struct           psd
3CD5:006E struct GdvEntryTbl1_ pcf
3CD5:01DC unsigned int     print_head_height_dots
3CD5:000A char             grph_init_string[]
3CD5:0158 char             gr_eol_str[]
3CD5:016C unsigned int     col_res_num_pos
3CD5:0020 char             start_grph_str[]
3CD5:0050 char             last_grph_lf_str[]
3CB1:001C unsigned char far * graph_data_ptr
3CD5:0064 char             gr_eog_str[]
3CD5:0006 unsigned lengthy    graph_data_size
3CD5:0000 unsigned int     scan_width
3CD5:001E unsigned int     stripNum
3AC8:0006 unsigned int PROC  hmu_len()
[BP+0008] unsigned char far * lmbcs_str_buf
[BP+0006] unsigned int     lbuf_len
[BP-0006] unsigned int     return_hmu
[BP-000A] unsigned char far * bundle_ptr
[BP-0004] unsigned char far * orig_ptr
3AC8:0148 void PROC        finish_down()
[BP+0006] unsigned int     distance
3CB1:000C char             max_feed[]
[BP-0006] int              i
[BP-0004] unsigned char far * p
3AC8:01A4 int PROC         graphics_init_printer()

Right here is the full recovered data.

Source Link

What's Your Reaction?
Excited
0
Happy
0
In Love
0
Not Sure
0
Silly
0
View Comments (0)

Leave a Reply

Your email address will not be published.

2022 Blinking Robots.
WordPress by Doejo

Scroll To Top