Dec 102017
 
Use high end ASCII characters not normally allowed with Lotus.
File 123V2GFX.ZIP from The Programmer’s Corner in
Category Lotus and other Spreadsheets
Use high end ASCII characters not normally allowed with Lotus.
File Name File Size Zip Size Zip Type
123V2GRF.TXT 12800 3063 deflated

Download File 123V2GFX.ZIP Here

Contents of the 123V2GRF.TXT file


Altering Lotus 2.0 to accept graphics characters

Lotus 2.0 alters graphics characters (those characters in the
range of 176 to 223 decimal) by translating them to other characters.
The IBM graphic characters can be used to draw boxes and shapes and
are often used to enhance 123 spreadsheets. The loss of the ability
to use these characters restricts the use of 123 and hinders the
transition from lotus 1a to 2.0. I have altered my 123.set file to
allow the importing of these characters from .PRN files. Since the
123.set file changes each time you run the install procedures for
Lotus there is no one way to alter the 123.set file. You must be at
least moderately proficient with debug to find and change the code
that does the trnaslating. The following is a guide. Remember that
all numbers will change depending on how you have configured Lotus.
This seems to be alot of code, but I have annotated it and
done it twice. There are only a couple of simple steps. You might
feel a little better about DEBUG if you are new to debugging after
you follow these steps. Think of this as a learning experience.

Step 1. make a copy of 123.set. no matter how good you are, debug does
not forgive you if you make a mistake.

Step 2. Enter debug and find where the translation process takes
place.
A>DEBUG 123.SET
-s 0 fff0 d7 5b 1f ;this line searches for the translation
08F8:48A4 ; these three lines show the address where
08F8:48B8 ; lotus is using the XLAT command to change
08F8:48D0 ; characters

Step 3. Unassemble the code to see where changes need to be made

Start about 20h bytes before the first occurrence untill
you hit the CMP AL,80. This is where 123 starts excluding
the bytes above 128 decimal.
-u 4889
08F8:4889 3C80 CMP AL,80
08F8:488B 7307 JNB 4894
08F8:488D 3C20 CMP AL,20
08F8:488F 7219 JB 48AA
08F8:4891 EB28 JMP 48BB
08F8:4893 90 NOP
08F8:4894 1E PUSH DS
08F8:4895 50 PUSH AX
08F8:4896 2E CS:
08F8:4897 A14600 MOV AX,[0046]
08F8:489A 8ED8 MOV DS,AX
08F8:489C 58 POP AX
08F8:489D 53 PUSH BX

Step 4. Assemble a jump around the translate

123 does an XLAT after subtracting 60h here. Those characters
below 20h, however should be translated. What you have to do
is change the JNB 4894 (yours will be a different number).
Do you see the JMP 48BB? Well thats where we want to go so
change the JNB 4894 to JNB 48BB (use the numbers you see).
-a 488b ; this is where the JNB was, use your numbers
08F8:488B jnb 48bb ; you assemble here a bypass to 48bb
08f8:48BD ; hit enter to exit the A command

Step 5. Find the next spot

now you have to unassemble a little more to find the next
exlate command.

-u
08F8:488D 3C20 CMP AL,20
08F8:488F 7219 JB 48AA
08F8:4891 EB28 JMP 48BB
08F8:4893 90 NOP
08F8:4894 1E PUSH DS
08F8:4895 50 PUSH AX
08F8:4896 2E CS:
08F8:4897 A14600 MOV AX,[0046]
08F8:489A 8ED8 MOV DS,AX
08F8:489C 58 POP AX
08F8:489D 53 PUSH BX
08F8:489E 8D1E0000 LEA BX,[0000]
08F8:48A2 2C60 SUB AL,60
08F8:48A4 D7 XLAT
-u
08F8:48A5 5B POP BX
08F8:48A6 1F POP DS
08F8:48A7 EB12 JMP 48BB
08F8:48A9 90 NOP
08F8:48AA 1E PUSH DS
08F8:48AB 50 PUSH AX
08F8:48AC 2E CS:
08F8:48AD A14600 MOV AX,[0046]
08F8:48B0 8ED8 MOV DS,AX
08F8:48B2 58 POP AX
08F8:48B3 53 PUSH BX
08F8:48B4 8D1E0000 LEA BX,[0000]
08F8:48B8 D7 XLAT
08F8:48B9 5B POP BX
08F8:48BA 1F POP DS
08F8:48BB CB RETF
-u
08F8:48BC 3C80 CMP AL,80
08F8:48BE 7213 JB 48D3
08F8:48C0 1E PUSH DS
08F8:48C1 50 PUSH AX
08F8:48C2 2E CS:
08F8:48C3 A14600 MOV AX,[0046]
08F8:48C6 8ED8 MOV DS,AX
08F8:48C8 58 POP AX

Step 6. Assemble the code to bypass the next translate.

If you see the next CMP AL,80 you see the next place where
123 is trying to get rid of the extended ascii characters.
This one is easy.
Assemble at the address where you see the CMP AL,80
-A 48BC
08F8:48BC retf
08F8:48Bd ; his enter to exit the A command
Just bypass the whole routine. So much for 123.set translation.

Step 7. Find the translation table.

Lotus still translates deep inside of 123. So far we have fixed the
translation of imported or retrieved files. You must alter the tables
that 123 uses to translate the character it displays. This means going
to the translation table itself.
We must search to find it.

-s 0 fff0 41 41 41 41 8e 8f ; we are looking for the table
08F8:2D1B
This is the location of the translation table for graphics
characters. If you dump below this you can see all of the characters,
but we are only interested for now with the characters b0h to cfh.

Step 8. Overlay the old transation table.

We re-enter the table the way we want:
-e 2d1b ; use a space after each entry to move to next entry
08F8:2D1B 41.b0 41.b1 41.b2 41.b3 8E.b4

08F8:2D20 8F.b5 92.b6 80.b7 90.b8 45.b9 45.ba 45.bb 49.bc
08F8:2D28 49.bd 49.be 49.bf 44.c0 A5.c1 4F.c2 4F.c3 4F.c4
08F8:2D30 4F.c5 99.c6 4F.c7 30.c8 55.c9 55.ca 55.cb 9A.cc
08F8:2D38 59.cd 50.ce E1.cf ; end with a carriage return

Step 9. Save it and get out.

-w ;write it
-q ; get out
you have done it!

Step 10. Test 123

Here is the actual output of when I changed a friends 123.set.

C>DEBUG 123.SET
-s 0 fff0 d7 5b 1f
09C8:5D78
09C8:5D8C
09C8:5DA4
-u 5d50
09C8:5D50 8CC8 MOV AX,CS
09C8:5D52 050A00 ADD AX,000A
09C8:5D55 90 NOP
09C8:5D56 2E CS:
09C8:5D57 A34600 MOV [0046],AX
09C8:5D5A 33C0 XOR AX,AX
09C8:5D5C CB RETF
09C8:5D5D 3C80 CMP AL,80
09C8:5D5F 7307 JNB 5D68
09C8:5D61 3C20 CMP AL,20
09C8:5D63 7219 JB 5D7E
09C8:5D65 EB28 JMP 5D8F
09C8:5D67 90 NOP
09C8:5D68 1E PUSH DS
09C8:5D69 50 PUSH AX
09C8:5D6A 2E CS:
09C8:5D6B A14600 MOV AX,[0046]
09C8:5D6E 8ED8 MOV DS,AX
-a 5d5f
09C8:5D5F jnb 5d8f
09C8:5D61
-u
09C8:5D70 58 POP AX
09C8:5D71 53 PUSH BX
09C8:5D72 8D1E0000 LEA BX,[0000]
09C8:5D76 2C60 SUB AL,60
09C8:5D78 D7 XLAT
09C8:5D79 5B POP BX
09C8:5D7A 1F POP DS
09C8:5D7B EB12 JMP 5D8F
09C8:5D7D 90 NOP
09C8:5D7E 1E PUSH DS
09C8:5D7F 50 PUSH AX
09C8:5D80 2E CS:
09C8:5D81 A14600 MOV AX,[0046]
09C8:5D84 8ED8 MOV DS,AX
09C8:5D86 58 POP AX
09C8:5D87 53 PUSH BX
09C8:5D88 8D1E0000 LEA BX,[0000]
09C8:5D8C D7 XLAT
09C8:5D8D 5B POP BX
09C8:5D8E 1F POP DS
09C8:5D8F CB RETF
-u
09C8:5D90 3C80 CMP AL,80
09C8:5D92 7213 JB 5DA7
09C8:5D94 1E PUSH DS
09C8:5D95 50 PUSH AX
09C8:5D96 2E CS:
09C8:5D97 A14600 MOV AX,[0046]
09C8:5D9A 8ED8 MOV DS,AX
09C8:5D9C 58 POP AX
09C8:5D9D 53 PUSH BX
09C8:5D9E 8D1EA000 LEA BX,[00A0]
09C8:5DA2 2C80 SUB AL,80
09C8:5DA4 D7 XLAT
09C8:5DA5 5B POP BX
09C8:5DA6 1F POP DS
09C8:5DA7 CB RETF
09C8:5DA8 0020 ADD [BX+SI],AH
09C8:5DAA 2020 AND [BX+SI],AH
09C8:5DAC 2020 AND [BX+SI],AH
09C8:5DAE 2020 AND [BX+SI],AH
-a 5d90
09C8:5D90 retf
09C8:5D91
-s 0 fff0 41 41 41 41 8e 8f
09C8:32E5
-e 32e5
09C8:32E5 41.b0 41.b1 41.b2
09C8:32E8 41.b3 8E.b4 8F.b5 92.b6 80.b7 90.b8 45.b9 45.ba
09C8:32F0 45.bb 49.bc 49.bd 49.be 49.bf 44.c0 A5.c1 4F.c2
09C8:32F8 4F.c3 4F.c4 4F.c5 99.c6 4F.c7 30.c8 55.c9 55.ca
09C8:3300 55.cb 9A.cc 59.cd 50.ce E1.cf 85.
-w
Writing 9DF7 bytes
-q
C>

Altering anyone's code blindly like this can lead to other problems
further down the road. Retain an old 123.set around in case the
fixed one starts acting flacky. If you test these changes and they
seem to work, drop me a line at Charlie Innusa`s PC Rockland BBS at
(914) 353-2176. If they don't work definitely leave a message and
tell me what the matter is. If Lotus won't fix this problem its
up to us in the trenches to find the fix.
/QY
Keith Graham



 December 10, 2017  Add comments

Leave a Reply