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

See Also

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