LOADING THE ANSI DRIVER
In order to use any of the techniques in this essay, you must first have
loaded the ANSI.SYS driver into your computer's memory using your CONFIG.SYS
file. You do this my adding the line, DEVICE=ANSI.SYS somewhere in the
CONFIG.SYS file and rebooting your computer.
[My intellegance was insulted here]
KEYBOARD REASSIGNMENT WITH ANSI
Before we get to specific ways to send control codes to the (now loaded) ANSI
driver, you must first know what those codes mean. For the function keys the
codes are listed on the chart below which first appeared in SOFTALK magazine.
Each function key is assigned an "extended function code" which DOS will use
to recognize that a function key has been pressed and in what shifted mode, if
any. Each number is expressed as a 0 followed by a semi-colon, then the
number from the chart below.
KEY NORMAL SHIFT CONTROL ALT
F1 59 84 94 104
F2 60 85 95 105
F3 61 86 96 106
F4 62 87 97 107
F5 63 88 98 108
F6 64 89 99 109
F7 65 90 100 110
F8 66 91 101 111
F9 67 92 102 112
F10 68 93 103 113
Accordingly, the way to designate the F5 key would be 0;63 while the F10 key
would be designated by 0;68 or 0;113 if shifted with the ALT key.
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
Using the ANSI driver, Page -2-
If you examine the DOS Technical Reference Manual (not the Technical Manual
for PC hardware), you will find a section on SCREEN/KEYS. This section was
contained in the DOS 2.0 documentation, but IBM removed it in later editions.
Here is a summary of its contents relative to keyboard redefinition.
To change one key to have the meaning of another, enter:
ESC [#;#p
where the first # is the ASCII value of the key being changed and the second #
is the ASCII value of the new definition. For example, "A" has the ASCII
value of 65 and "Q" has the value of 81. So:
ESC [65;81p
will result in "A" being redefined as "Q." It is also possible to redefine a
key to have the meaning of a string of characters. This is done by enclosing
the string in quotes. So:
ESC [65;"Hi there"p
would change the "A" key to have the meaning of "Hi there." If the first
value for the first # is a 0 however, DOS knows that what is being changed is
not an ASCII value but the meaning of an extended function code. So if you
were to enter:
ESC [0;68;"Hi there"p
DOS would know to change the meaning of the function key (in this case F10) to
the sting enclosed in quotes. This is the key to redefining your function
keys to perform much used commands: like DIR, CHKDSK, COPY *.* B: etc. or to
load programs from disk.
There is a final trick here. If you end the escape command sequence with the
characters ";13p" instead of just "p" the command will self-execute, just as
if you pressed the [enter] key.
The IBM documentation tells the user to preface each command by an ESC
command, and I have represented this in the above paragraphs by writing the
characters "ESC." at the start of each control code sequence mentioned. Most
users assume that this means to press the ESC key on the keyboard when
entering the commands. Not so. To get the Escape Sequence to the ANSI driver
you must enter it using a prompt command or write a .COM file. For example to
configure the F1 key (extended function code 59) to have the meaning in DOS of
"autoexec" with an [enter] command at the end of it you cannot type:
ESC [0;59;"autoexec";13p
^^^^^^^^ [Put something useful]
[here like "Format C:" Then]
[redifine his N to Y, Get the]
[picture?]
as the ESC will not be recognized by DOS as an escape sequence. What DOS will
recognize as an escape sequence is the characters "$e" although this surely
looks strange at first. Users familiar with the PROMPT command will notice
that the "$" character is what the PROMPT command uses as an escape sequence,
and that is precisely how we will get the redefinition to be recognized by
DOS. If you enter the following command:
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
Using the ANSI driver, Page -3-
PROMPT $e[0;59;"autoexec";13p
you will see that it works perfectly. You now have the secret to redefining
the function keys in DOS. Simply write and run a batch file with a list of
PROMPT commands and you will have done it. One precaution, ECHO must be ON,
otherwise DOS will suppress the PROMPT command and the escape sequences will
not get through.
As an example, let's create a batch file called KEYON.BAT that will set F1 as
EDITOR [enter], F2 as PC-FILE [enter], F3 as PC-CALC [enter], F4 as PC-GRAPH
[enter], F5 as PC-TALK [enter], F6 as PC-WRITE [enter], F7 as BASICA [enter],
F8 as DIR without the [enter], F9 to run a batch file called MENUOFF.BAT
[enter] and F10 to run a batch file called MENUON.BAT [enter]. It would be as
follows:
echo on
PROMPT $e[0;59;"EDITOR";13p
PROMPT $e[0;60;"PC-FILE";13p
PROMPT $e[0;61;"PC-CALC";13p
PROMPT $e[0;62;"PC-GRAPH";13p
PROMPT $e[0;63;"PC-TALK";13p
PROMPT $e[0;64;"PC-WRITE";13p
PROMPT $e[0;65;"BASICA";13p
PROMPT $e[0;66;"DIR"p
PROMPT $e[0;67;"MENUOFF";13p
PROMPT $e[0;68;"MENUON";13p
prompt
CLS
You would also want to create another file called KEYOFF.BAT which resets the
function key definitions to DOS normal. The format would be:
echo on
PROMPT $e[0;59;0;59p
PROMPT $e[0;60;0;60p
PROMPT $e[0;61;0;61p
PROMPT $e[0;62;0;62p
PROMPT $e[0;63;0;63p
PROMPT $e[0;64;0;64p
PROMPT $e[0;65;0;65p
PROMPT $e[0;66;0;66p
PROMPT $e[0;67;0;67p
PROMPT $e[0;68;0;68p
prompt
CLS
I should mention that the purpose of the final blank PROMPT command in each of
these batch files is to reset the DOS prompt to A> or whatever your default
prompt is. It serves no redefinition purpose, but does keep the screen
looking clean.
[I have not found any good uses for this Prompt stuff, but if you find any]
[let me know]
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
Using the ANSI driver, Page -4-
USING DEBUG TO LOAD THE ANSI DRIVER
[Using this method you can Write COM files that that contain ANSI trojens,]
[VERY Useful]
While there is no reason why we could not continue to configure our function
keys by batch files consisting of lists of PROMPT commands, this is a clumsy
way to proceed. It is easier to use the DEBUG utility supplied with DOS to
create a .COM file that will do the job for us quickly and directly, without
sending any input to screen. To my knowledge this technique was first
published by Michael J. Grabel in the December 1984 edition of PC WORLD.
Place a formatted DOS disk containing the DEBUG utility in the default drive,
and follow the script below. As you do so hexadecimal numbers will appear on
the left hand side of your screen. These numbers will vary depending on the
configuration of your system. For our purposes here I will represent the
numbers in the form xxxx:nnnn. What you will see on your screen will be
different.
A>DEBUG [enter]
-A 100 [enter]
MOV AH,9 [enter]
MOV DX,109 [enter]
INT 21 [enter]
INT 20 [enter]
xxxx:nnnn DB 1B'[0;59;"EDITOR";13p' [enter]
xxxx:nnnn DB 1B'[0;60;"PC-FILE";13p' [enter]
xxxx:nnnn DB 1B'[0;61;"PC-CALC";13p' [enter]
xxxx:nnnn DB 1B'[0;62;"PC-GRAPH";13p' [enter]
xxxx:nnnn DB 1B'[0;63;"PC-TALK";13p' [enter]
xxxx:nnnn DB 1B'[0;64;"PC-WRITE";13p' [enter]
xxxx:nnnn DB 1B'[0;65;"BASICA";13p' [enter]
xxxx:nnnn DB 1B'[0;66;"DIR"p' [enter]
xxxx:nnnn DB 1B'[0;67;"MENUOFF";13p' [enter]
xxxx:nnnn DB 1B'[0;68;"MENUON";13p' [enter]
xxxx:nnnn DB 1B '$' [enter]
As soon as you have entered the previous line, your computer will respond
with a number in the form of xxxx:nnnn. Copy down the portion of the
number that is being represented here as "nnnn" as you will need it
later. Once you have copied the number down, press [enter]
xxxx: nnnn (enter)
-N KEYON.COM [enter]
-R BX [enter]
When you have entered the command above, your computer will respond with
the following line and a colon as a prompt. At this prompt enter 0 and
press [enter].
BX:0000
:0 [enter]
-R CX [enter]
When you enter the R CX command above, the computer will respond with the
following line and a colon as a prompt. At this prompt enter the number,
"nnnn" you copied down above and press [enter].
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
Using the ANSI driver, Page -5-
CX 0
: nnnn (enter)
-W [enter]
The computer will respond with the following.
WRITING nnnn bytes
-Q [enter]
As soon as you enter the Q command (for Quit) you will be back at the DOS
prompt, and there will be a new file on disk called KEYON.COM. Simply type it
at the DOS prompt and your function keys will be configured. It is a good
idea to use this same procedure to write another .COM file called KEYOFF.COM
which will restore the keys to their native DOS definitions. The procedure
for this is the same as the above, except that the definition section should
be:
xxxx:nnnn DB 1B'[0;59;0;59p' [enter]
xxxx:nnnn DB 1B'[0;60;0;60p' [enter]
xxxx:nnnn DB 1B'[0;61;0;61p' [enter]
xxxx:nnnn DB 1B'[0;62;0;62p' [enter]
xxxx:nnnn DB 1B'[0;63;0;63p' [enter]
xxxx:nnnn DB 1B'[0;64;0;64p' [enter]
xxxx:nnnn DB 1B'[0;65;0;65p' [enter]
xxxx:nnnn DB 1B'[0;66;0;66p' [enter]
xxxx:nnnn DB 1B'[0;67;0;67p' [enter]
xxxx:nnnn DB 1B'[0;68;0;68p' [enter]
xxxx:nnnn DB 1B '$' [enter]
If you find that KEYON.COM doesn't work correctly, reboot the machine to clear
the definitions and try again. The most common mistakes are typing errors (I
often enter a colon when I wanted a semi-colon). Another source of difficulty
will arise if you have another file on disk to start with called KEYON.COM or
KEYOFF.COM. DEBUG bypasses the normal file allocation of DOS and writes
directly to the disk. If you have another file on disk with the same name,
DEBUG will overwrite it, but unless the other file was exactly the same size
as the new one or smaller, there may be a piece of the old file left over
attached to the end of the new one. As a precaution, always erase old
versions of the .COM files, or better yet give each one a unique name and
rename it later using the DOS Rename command.
SOME ADDITIONAL TRICKS
[How to make your Trojens PRETTY??]
Here are some additional control codes for the ANSI driver, summarized from
the IBM material.
1. CURSOR POSITIONING
To move the cursor to a specified position: ESC [#;#h where the first #
is the desired line number and the second the desire column.
To move the cursor up without changing columns: ESC [#a where # specifies
the number of lines moved.
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
DSZ UNPROTECT FOR .EXE OR .COM VERSIONS
The following DEBUG listing should aid most people familiar with
any type of byte editor in removing the opening and closing screens
and also enable the enhanced features of DSZ.COM or DSZ.EXE .
*** IT WILL WORK WITH >ANY< VERSION, EXE OR COM THAT I HAVE TRIED.***
DSZ is an excellent multiple protocol program which can be added to
many terminal programs with very little effort and with excellent
results. ZMODEM is the ultimate choice of this programmer for many
reasons. Here are just a few of the Best Features.
1.Crash recovery is great for those lousy phone lines
that have a tendency to lose connection 5 minutes into a
6 minute download. Just call back and it will pickup
right where it left off which means saving BIG $$$$$
compared to starting all over which makes Ma Bell BIG $$.
2.Automated filename transfer which saves having to double
type in filenames. Just tell the BBS to send using Zmodem
protocol then call up DSZ and it will do the rest.
3.Greatly increases efficiency in transfer rates and the
reliability of what is sent is what you receive. It uses
32-bit CRC error checking and is not unusual to get as
much as 239 CPS from a 2400 baud modem.
The following are debug hex dumps of .COM and .EXE versions which
as you will notice are very similar in the areas listed below.
Directly following the copyright notice you will find 6 00's as
soon as you locate these (which was the same address for every
.COM version I checked and respectivly for every .EXE verison) all
you need to do is change 4 of the 6 (the first 2 and last 2) as follows.
--------< 64 1A{00 00 00 00 00 00}FF FF
| ^|| || || || || ||^
| 91 14 00 00 CF 16
|
|
|
|
| DSZ.COM
|
| ????:0180 90 90 90 90 C3 43 6F 70-79 72 69 67 68 74 20 31 .....Copyright 1
| ????:0190 39 38 34 2C 20 31 39 38-38 20 4F 6D 65 6E 20 54 984, 1988 Omen T
| ????:01A0 65 63 68 6E 6F 6C 6F 67-79 20 49 6E 63 20 41 6C echnology Inc Al
| ????:01B0 6C 20 52 69 67 68 74 73-20 52 65 73 65 72 76 65 l Rights Reserve
>>????:01C0 64 1A{00 00 00 00 00 00}FF FF 1E 06 55 56 57 F6 d...........UVW.
| ????:01D0 06 D9^A2 FF 74 1C B8 00^10 CD 16 A3 DC A2 3D 00 ....t.........=.
| ????:01E0 10 74 0F 3C E0 75 12 88-26 DB A2 8A C4 B4 02 EB .t.<.u..&.......
|
|
| DSZ.EXE
|
| ????:0110 90 90 90 90 90 90 C3 43-6F 70 79 72 69 67 68 74 .......Copyright
| ????:0120 20 31 39 38 34 2C 20 31-39 38 38 20 4F 6D 65 6E 1984, 1988 Omen
| ????:0130 20 54 65 63 68 6E 6F 6C-6F 67 79 20 49 6E 63 20 Technology Inc
| ????:0140 41 6C 6C 20 52 69 67 68-74 73 20 52 65 73 65 72 All Rights Reser
>>????:0150 76 65 64 1A{00 00 00 00-00 00}FF FF 1E 06 55 56 ved...........UV
????:0160 57 F6 06 69^00 FF 74 1C-B8 00^10 CD 16 A3 6C 00 W..i..t.......l.
????:0170 3D 00 10 74 0F 3C E0 75-12 88 26 6B 00 8A C4 B4 =..t.<.u..&k....
If this has been a help to you GREAT!!!! if not find a friend
that understands this type of hacking and ask for help.
Furthermore I do not request anything (i.e. Money, Your first
born or otherwise). If you have a guilty conscience about getting
something for nothing THEN send a contribution to the AMERICAN
CANCER SOCIETY. I'm certain that they can put it to better use
than I would.
Using the ANSI driver, Page -6-
To move the cursor to a specified horizontal and vertical position: ESC
[#;#f where # means first the line number and secondly the column number.
To get a device status report: ESC [6n
To get a cursor position report: ESC [#;#r where the first # specifies
the current line and the second # specifies the current column
To move the cursor down: ESC [#b where # specifies the number of lines
moved down.
To move the cursor forward: ESC [#C where # specifies the number of
columns moved.
To move the cursor backward: ESC [#d where # specifies the number of
columns moved.
To save the cursor position: ESC [s and to restore it: ESC [u.
2. ERASING
To do a CLS (erase screen move cursor to home position): ESC [2j
To erase from cursor to end of line: ESC [k
3. COLOR graphics
To set the color/graphics attributes, enter ESC [#;#m where the first #
is the desired foreground color and the second is the desired background
color. Select colors from the list below:
30 black foreground
31 red foreground
32 green foreground
33 yellow foreground
34 blue foreground
35 magenta foreground
36 cyan foreground
37 white foreground
40 black background
41 red background
42 green background
43 yellow background
44 blue background
45 magenta background
46 cyan background
47 white background
To set additional attributes enter: ESC [#m where # is the number of the
desired attribute. Select attributes from the list below:
0 all attributes off (white on black)
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
Using the ANSI driver, Page -7-
1 bold on
4 underscore (on IBM Monochrome Display)
5 blink
7 reverse video
8 invisible
To give an example of what can be done with these additional codes, a batch
file called MENUOFF.BAT containing only the line:
PROMPT $e[2J$e[30;40m$h
would blank a color display completely. It does a CLS, sets the display to a
black foreground and background and the with the "$h" performs a backspace to
erase the blinking cursor (the "$h command is documented in the DOS manual
under PROMPT). Another batch file called MENUON.BAT containing the lines:
PROMPT $e[0m
prompt
CLS
Would reset a color display to restore the screen after MENUOFF.BAT had been
run.
Enjoy ANSI! It is a wonderful tool, and can be a lot of fun to use. It's not
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [It IS a wonderful tool, especially in]
[The Right (Wrong?) Hands]
a keyboard enhancer, and if you load it up with too many keyboard
redefinitions at one time you will run out of environment space. This is
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [Watch for]