home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 September
/
Simtel20_Sept92.cdr
/
msdos
/
sysutl
/
ctrlalt.arc
/
CTRLALT.DOC
< prev
next >
Wrap
Text File
|
1986-04-09
|
101KB
|
2,523 lines
DOCUMENTATION
FOR
CTRLALT
**********************
Version 1.0
**********************
by Barry Simon and Richard Wilson
Documentation for CTRLALT
TABLE OF CONTENTS
Chapter I:INTRODUCTION.................................1
I.1 Features........................................1
I.2 Files in the CTRLALT package and
installing CTRLALT............................2
I.3 Notation........................................3
I.4 Should you read the documentation?..............4
I.5 A Bow and Two Disclaimers.......................4
I.6 Usage Notes.....................................5
I.7 A Warning.......................................5
Chapter II:TWO MONITOR SUPPORT.........................7
II.1 Main Commands..................................7
II.2 Usage Notes....................................7
Chapter III:TABLES.....................................9
III.1 The Character Tables..........................9
III.2 Entering Keystrokes from ASCII Tables.........9
III.3 The aTtribute and aNsi Tables................10
III.4 ASCII codes and Scan codes...................11
III.5 Usage Notes..................................12
Chapter IV:PRINT CONTROL MODE.........................15
IV.1 Line Marking..................................15
IV.2 Printing the Marked Lines.....................15
IV.3 Sending Control Codes to Your Printer.........15
IV.4 Usage Notes...................................16
Chapter V:MARKING MODE................................19
V.1 Marking a Rectangle............................19
V.2 What you can do with the Marked Box............19
V.3 Inserting the Large Buffer.....................20
V.4 Usage Notes....................................22
Chapter VI:BOX DRAWING................................24
VI.1 The Alt Numeric Keypad........................24
VI.2 Box drawing characters........................25
VI.3 Other graphics characters.....................26
VI.4 Cursor motion and <Grey +/->..................26
VI.5 Usage Notes...................................27
Chapter VII:THE EMERGENCY EXIT........................28
VII.1 A Powerful but Dangerous Command.............28
VII.2 Fouled Interrupts............................29
VII.3 RELEASE: A Safety Valve......................31
Table of Contents Page i
Documentation for CTRLALT
VII.4 Usage Notes..................................31
Chapter VIII:COMMAND SUMMARY..........................34
Chapter IX:CUSTOMIZING CTRLALT........................35
IX.1 The Procedure.................................35
IX.2 Fundamental key combination...................35
IX.3 Command keys..................................36
IX.4 Table colors..................................37
IX.5 Table location................................37
IX.6 Copy attributes...............................37
IX.7 XOR attributes................................38
IX.8 Printer escape sequences......................38
IX.9 Using DEBUG...................................38
Table of Contents Page ii
Chapter I: INTRODUCTION
I.1 Features
This documentation for CTRLALT can be printed out on most
printers by typing the command
copy ctrlalt.doc prn
at the DOS command line.
CTRLALT is a collection of resident utilities taking about
7K of RAM. Its features include the following:
-Two monitor support: copy the active monitor to your
inactive monitor on a two monitor system even inside a
running program making your second monitor a useful scratch
pad; other dual monitor support included.
-Popup tables: One screen (indeed partial screen) tables of
ASCII codes, color attributes, ANSI color codes and
keyboard scan codes.
-Entry of non-keyboard characters: a logical and convenient
way of entering the IBM graphics drawing characters. Any
character can be picked off the resident ASCII table.
-Cut and Paste: Resident cut and paste facilities; with one
keystroke, you can enter a mode which allows you to mark
a box (on either screen, if you have two) which you can
save in a buffer and later insert in any program. You can
print part or all of your screen (or screens on a dual
monitor system).
-Resident printer codes: If you have an IBM graphics
compatible printer, you can send a variety of control codes
to it at any time.
-Emergency exit: a way of recovering from situations where
your system crashes due to some program getting into a loop
or dead end.
In order to keep the memory used to a minimum, no on screen
help is provided. You will need to refer to this documentation
when you need further information. The basic commands follow a
mnemonic system and a command summary can be found in Chapter VIII
and in the file CACMDSUM.DOC which you can print out separately.
This documentation is for version 1.0 of CTRLALT. You can find out
which version of CTRLALT you have by entering the command
type ctrlalt.com
at the DOS prompt. Normally typing a com file will produce junk on
the screen but we have arranged that only brief useful information
will appear when you issue this command. And you needn't worry
that we are filling your memory with unneeded information when the
program loads; the part of the com file that gets typed is used for
the "small buffer" discussed in Chapter III.
Chapter I:INTRODUCTION Page 1
Documentation for CTRLALT
I.2 Files in the CTRLALT package and installing CTRLALT
CTRLALT consists of the following files:
-CTRLALT.COM executable program file
-CTRLALT.ASM source code
-CTRLALT.DOC this file
-CACMDSUM.DOC a short summary to print out and have handy
-RELEASE.COM a program by R. M. Wilson discussed in Chap VII
-RELEASE.ASM source code
-RELEASE.DOC documentation for RELEASE
The source code for CTRLALT is provided in part to allow you
to customize the program if you have access to the MICROSOFT or IBM
Macro Assembler. Directions for customizing CTRLALT are provided
in Chapter IX. For a small number of commands Chapter IX also
provides directions on using DEBUG to make the modifications. We
hope to include an installation program in a future release of
CTRLALT.
CTRLALT is a resident program which, once installed, will
remain in your computer's memory until you reboot (unless you use
RELEASE as described in its documentation). You install it by
typing
ctrlalt
at the DOS prompt or placing that line in your AUTOEXEC.BAT file.
Once you have the program installed, try depressing the CTRL and
ALT keys and then one of the letters A, H or T while you are
holding down CTRL and ALT. Hitting <Esc> will make the resulting
table disappear. While examining the table that appears in
response to <Ctrl-Alt-T>, try hitting a letter key and then a
function key. This will show you some of the features of CTRLALT.
If you happen to load CTRLALT a second time, it will load and
you will lose the memory it takes so it is probably best to load it
in your AUTOEXEC.BAT file. CTRLALT uses only two interrupts (one
of the keyboard interrupts and the clock interrupt) and it
is careful to pass any keystrokes not intended for it to any
programs loaded before it. It cooperates with other resident
programs but certain other resident programs may not cooperate with
it. For this reason, it is best to load it after any keyboard
macro program such as SUPERKEY or PROKEY. When NEWKEY is
installed, occasionally the first keystroke issued after exiting a
CTRLALT module will not get passed to your program. Since SMARTKEY
has trouble passing keystrokes to resident programs, CTRLALT does
not work well with SMARTKEY. If you have loaded KEYWORKS, you
cannot safely invoke CTRLALT when a KEYWORKS menu is displayed but
otherwise the two programs seems to work together. We know of no
other incompatibilities.
Chapter I:INTRODUCTION Page 2
Documentation for CTRLALT
I.3 Notation
Commands are passed to CTRLALT by depressing the Control and
Alternate keys at the same time as a third key. (By customizing,
you can replace this with any other pair of shifts.) You must
first depress the shift keys and then, keeping the shift keys
depressed, press the third key. We will indicate such a
combination as ^@<key> so that for example ^@C means to hold down
Control, Alt and then depress the <C> key. Various key names will
appear in brackets such as:
<Esc> the Escape key marked "Esc". This is the key to exit
most modules of CTRLALT.
<Enter> the "Enter" or "Return" key
<n0>,...,<n9> the number keys on the numeric keypad
0,1,2,3... refer to the number keys on the top row
(sometimes, we will refer to 0(zero) to distinguish it
from "oh"; while the distinction is clear on your
screen, it is not always clear on your printer)
<Grey +>, <Grey -> the plus and minus at the extreme right of
the keyboard
+,- refer to the +/= and _/- keys on the top row
<Arrows> the generic name for the the four arrow keys
<PrtSc>, <Ins>, <Del>, <Home>, <End>, <PgUp>, <PgDn> the keys
with these words marked on them
<F1>, etc., the function keys
Occasionally for emphasis, we will denote the key with !/1 on it by
<1>, the key with Q as <Q>, etc.
To help remember the large number of commands which CTRLALT
will take, the keys chosen have mnemonics associated with them and
we will often write out the mnemonic with the special key
capitalized. Thus ^@aNsi is a mnemonic for the command ^@N. In
particular, ^@Enter (the mnemonic for ^@E) should not be confused
with ^@<Enter>, the command issued by depressing Ctrl, Alt and
<Enter> at the same time.
Once a module of CTRLALT has been invoked with ^@<key>, there
may be single letter "subcommands" which we have tried to make
consistent across modules. In particular:
E Enters something into a buffer or your program
P sends something to your Printer
S Switches a marking cursor from one monitor to the other
<Esc> exits the module
As for ^@ commands, we use mnemonics for subcommands so that, for
example, cUt is a mnemonic for the subcommands issued by <U>.
CTRLALT sets aside two places to store keystrokes which you
can later enter. One accessible from "Marking Mode" (Chap V) will
store up to a full screen of data and is called "the large buffer"
and one accessible when the ASCII or Hex tables are displayed will
Chapter I:INTRODUCTION Page 3
Documentation for CTRLALT
take up to 64 strokes and is called "the small buffer". As
currently implemented these buffers can only contain ASCII codes
and not the extended ASCII codes associated with function or alt
keys.
I.4 Should you read the documentation?
Yes!
However, we are aware that the full documentation is long.
This is because of the many services that CTRLALT offers. We
suggest that you learn about one or two modules at a time and have
tried to write the documentation in a way that you can read
individual chapters. For many of the modules, it will be more
convenient to experiment in your word processor than in DOS. And
we apologize for warning you about the difference between ^@Enter
and ^@<Enter> more times than you will need, but we want to be sure
that you see it even if you skim the documentation.
I.5 A Bow and Two Disclaimers
This program was developed by Barry Simon and Richard Wilson.
It is POSTWARE: if you like it, send us a postcard addressed to us
at
253-37 Caltech
Pasadena, CA 91125
Of course, we're glad to hear comments, suggestions about
enhancements, and even about complaints, incompatibilities and bugs.
Simon has a Compuserve number [76505,2315] but he doesn't promise
to check his Compuserve mailbox very often! And if you like the
program please give it to your friends, place it on bulletin boards
and otherwise spread it around. While it is copyright by the two
of us, we explicitly allow any use of it but request that at a
minimum, the CTRLALT.COM and CTRLALT.DOC files be distributed
together.
While we have a connection with Caltech, we emphasize that
this program has no such connection.
And we make the usual disclaimer: this software is
distributed "as is" and is warranted for no purpose. Any risk
associated with its use including, but not limited to, loss of data
is borne by the user.
The following are trademarks or copyrighted names of the
companies indicated in parentheses: FANSI-CONSOLE (Hersey
Microcomputing), Proprinter & IBM (International Business
Machines), KEYWORKS (Alpha Software), MONOGRAFXS (Analytics
Chapter I:INTRODUCTION Page 4
Documentation for CTRLALT
international), NEWKEY (FAB software), PCED (Cove software),
PCWRITE (Quicksoft), PROKEY (Rosesoft), SIDEKICK, SUPERKEY & TURBO
PASCAL (Borland International), SMARTKEY (Software Research
Technologies), WORDSTAR (Micropro).
The original version was finalized during April, 1986.
I.6 Usage Notes
Many chapters will end with some "Usage Notes" which we hope
will help you use CTRLALT and will deal with some special
situations. We are painfully aware of the fact that there are only
six combinations of pairs of the four shift keys and that software
developers are fond of using them as "hotkeys" for resident
programs. Because CTRLALT has so many hotkeys, we felt that we had
to use three key combinations and it was natural to use two shifts
as the common callup. Besides, once we named the program
CTRLALT, we had no choice!
The customization procedure described in Section X.2,
explains how to change which pair of shifts combine with letter
keys to call up CTRLALT. Because a third key is involved you will
probably want the two shifts to be on the left side and the second
choice is clearly <Ctrl-LftShft>. It is even possible to replace
the <Ctrl-Alt> combinations by just <Alt> or just <Ctrl> although
this will likely cause problems with some of your application
programs that use Alt or Ctrl keys.
If you are a SIDEKICK user, you probably use ^@ to invoke
SIDEKICK. More recent versions of SIDEKICK allow you to change
this choice and we believe that is better than changing CTRLALT
but clearly you should follow your preference. We note that while
SIDEKICK allows you to choose two different combinations to invoke
it, you can choose to have only one: while running SKINST you need
only hit the same shift twice when asked for "Secondary command"
after making the "Activate commands" choice from the SKINST main
menu.
One final warning about the choice of ^@. We are careful not
to use ^@ with any of the numeric keypad or with <Grey +>/<Grey ->
to avoid any chance of accidentally pressing ^@<Del>. If you
customize, we suggest that you keep this convention although using
^@ with <n7>, <n8> or <n9> (or <PrtSc> on an AT style keyboard)
should be safe.
I.7 A Warning
Many of the modules in CTRLALT are quite powerful and should
Chapter I:INTRODUCTION Page 5
Documentation for CTRLALT
be used with care. We have in mind especially the emergency exit
feature invoked by ^@<F9>. PLEASE READ CHAPTER VII BEFORE
EXPERIMENTING WITH IT. We urge you to try it initially in a
situation where you would lose nothing but a little time if your
system underwent a hard crash (i.e. required you to turn the power
switch off and on). We don't wish to frighten you from using this
module since it can be useful but we urge some care.
You may need to experiment with the different modes of entry
of material previously cut in the marking module discussed in
chapter V. Some programs don't accept keystrokes in quite the way
that you might expect. The same caution applies to the entry of
graphics characters as described in Chapter VI. Not all programs
will accept ASCII characters with codes between 129 and 256 or will
act in the way you would like. Problems associated with these
issues are not likely to cause any serious foulups and can usually
by corrected by a little deletion and retyping.
Chapter I:INTRODUCTION Page 6
Chapter II: TWO MONITOR SUPPORT
COMMANDS: ^@Copy, ^@Kill, ^@Switch, ^@Other
II.1 Main Commands
^@C for Copy will copy the current monitor to your second monitor
if you have a two monitor system. ^@K for Kill will blank your
inactive monitor. It is NOT necessary to blank your inactive
monitor before copying to it a second time; ^@K is provided so you
needn't look at the material on your second monitor when you no
longer need it. ^@S for Switch will copy the present screen to the
inactive screen and transfer control to the inactive screen. ^@O
for Other will place ASCII tables in Hex and decimal on your
inactive monitor; they will not erase the whole inactive monitor
but will cover up a large portion of it. ^@K will erase them and
the rest of the inactive screen.
II.2 Usage Notes
You will use ^@C the most. You will discover that your
inactive monitor makes a great scratch pad and that you no longer
need to make little notes which get lost on your desk. Indeed, we
believe that if you use your computer a lot and have a single
monitor system, it may be worth investing in a second one (a
monochrome card and monitor can be purchased for as little as $250)
just to use ^@C!
Unfortunately, ^@K does not kill the cursor on the inactive
monitor. However, it will not produce a cursor if none is there
and ^@S takes the cursor with it. Thus, the sequence of commands
^@S,^@S,^@K
will erase the inactive screen and remove the cursor on it. It
will not change any colors on the original monitor.
For the technically minded, we note that a screen ^@Copied to
a monochrome monitor has all attributes set to 07 (white, green or
amber on black) and a screen ^@Copied to the color monitor has
attributes set to 1EH (yellow on blue). ^@S copies the exact
attributes so that a double ^@S to remove your cursor doesn't lose
any attributes.
^@S will not be used very often. If used in a running
program, the results may be unpredictable if the program writes
directly to the screen; for example loading PCWRITE on a color
screen and using ^@S will thoroughly confuse PCWRITE. At the DOS
command line, it is preferable to use a command like "Mode mono" to
switch screens since that will reinitialize the cursor. There is a
strange interaction involving the cursor between CTRLALT and the
Chapter II:TWO MONITOR SUPPORT Page 7
Documentation for CTRLALT
DOS command editor PCED (and its public domain precursor CED) which
can cause ^@S to give you a cursor in a funny place; you can even
lose your cursor completely. However, this interaction does not
take place if you are only using ^@S twice to remove a cursor on
the inactive screen and you do not issue any commands between the
two ^@S commands.
If you have a dual monitor system, ^@C will not work before
both monitors are initialized. That is, if your boot up procedure
only uses one monitor, say the color monitor, ^@C will not work
until you have made the system recognize the other monitor by
issuing a "mode mono" command (followed by mode co80) or otherwise
"used" your second monitor. However, ^@S will work and a pair of
^@S's can be used to initialize the inactive monitor.
CTRLALT works in 80 column text mode. Thus, if you try to
copy a monochrome screen to a color screen which was initialized in
a 40 column text mode or last in graphics mode, the copy will not
be successful. However, ^@S, ^@S, ^@C from the monochrome screen
will place the color screen in the proper mode and copy the
monochrome screen to it.
The dual monitor commands if issued by accident on a single
monitor system will certainly not cause catastrophe. ^@C, ^@K and
^@O have absolutely no effect. ^@S will cause a problem but a
second ^@S followed by a "clear screen" should recover. But, if
you have a single monitor system and the Macro Assembler, you
should follow the directions in Section IX.3 for disabling the dual
monitor services or you can follow the directions in Section IX.9
for using DEBUG.
If your graphics monitor is in a graphics mode, issuing a
^@Copy will not have any adverse effect but it will produce junk on
your inactive screen. A ^@Switch will be more dramatic but issuing
an immediate "clear screen" will often allow you to recover.
Graphics monitors can use their extra memory in text mode to
show more than one page (4 pages on the CGA and up to 8 pages on
the EGA) and there is software (e.g. FANSI CONSOLE) that allows you
to shift pages. CTRLALT assumes that "page 1" is the page being
displayed on your color monitor and, for example, ^@C will copy that
page to the monochrome screen even if another page is currently
displayed. Similarly, the highlighting in print control and
marking modes (see Chapters IV and V) will not show on the color
screen if any page other than page one is displayed. The issues
discussed in this paragraph will be irrelevant to most users who
will not be on any page other than page 1. If you do wind up on
another page in memory a command that reinitializes the screen such
as "mode co80" will make page 1 the page displayed on the color
monitor.
Chapter II:TWO MONITOR SUPPORT Page 8
Chapter III: TABLES
COMMANDS: ^@Ascii, ^@Hex, ^@Other, ^@aTtributes, ^@aNsi,
^@Enter,^@Quit
^@A,^@H SUBCOMMANDS: <Arrows>, <Home>, <End>, <Esc>, Enter,
Print, Buffer
^@T SUBCOMMANDS: <anykey>, <Esc>
WARNING: Do not confuse ^@Enter (that is ^@E) with ^@<Enter> or the
subcommand Enter (the is E) with <Enter>
III.1 The Character Tables
CTRLALT allows you to pop up two different tables of ASCII
characters at any time. They are more compact and therefore
perhaps more useful than the ASCII tables provided by programs like
SIDEKICK. ^@A popsup a table which is 34 characters across and 14
down showing a decimal ASCII table. The characters are shown in
groups of ten with the groups labelled 000, 010, ... ,250. The
characters appearing as 256-259 are really repeats of 0-3. Please
remember that the groups start with xx0, that is, for example, the
third character in group 080 (the letter R) has ASCII code 082 not
083.
^@H shows a similar table 18 long by 22 wide with Hex ASCII
values. The rows are labelled with a hex digit followed by 0 and
the columns with the second hex digit. ^@O shows both tables at
once on your inactive monitor.
Pressing <Esc> when the tables produced by ^@Ascii or ^@Hex
are active clears the tables and restores the screen. You cannot
restore the inactive screen following ^@Other although you can clear it
with ^@Kill. You cannot show both tables on your active screen;
that is, ^@A has no effect after a ^@H and vice versa.
III.2 Entering Keystrokes from ASCII Tables
The tables produced by ^@A or ^@H have a highlighted cursor,
the first time at character 00 but at later times wherever you left
the cursor the last time that table was used. The four arrow keys
move the cursor in the obvious ways and <Home>/<End> moves the
cursor to positions 000 and 259 (00 and FF on the Hex table).
Once you have moved the cursor to the desired character, you
have a number of options:
E will Enter the highlighted character at the position your
cursor was when CTRLALT was invoked and the table will
disappear
P will send the character to your Printer. The table
remains on the screen so you can send several
Chapter III:TABLES Page 9
Documentation for CTRLALT
characters to your printer. The small buffer is not
affected.
B will send the character to the small Buffer. The table
remains on the screen so that several characters can be
sent to the buffer.
<Esc> will make the table disappear but the small buffer is
not cleared.
CTRLALT keeps a small buffer of up to 64 characters. When
the choice E is made, the highlighted character is added to the end
of the buffer and the entire buffer is inserted at the original
cursor position. Thus, if several B subcommands have been issued
followed by an E several characters will be entered. And if only a
single E with no B subcommands has been entered, then the buffer
will have one character in it. If you wish to put several
characters in the small buffer without entering any of them yet,
then use several B subcommands followed by an <Esc>. If no E or B
subcommands have been invoked, the small buffer will not be changed
and will remain what it was when you invoked the table. An E or B
command will clear the buffer of what it had in it before ^@A or
^@H was invoked but does not affect any additions to the buffer
made during the current invocation.
At any time you can strike ^@E to Enter the contents of the
small buffer at the current cursor position. ^@Entering does not
empty the buffer so that you can repeatedly reissue the buffer.
For example if you need to enter a string of ^I's to your program,
you need only call up ^@Ascii highlight position 009, press E (or B
and <Esc>) and then ^@Enter as often as necessary. If you strike
^@E a second time while CTRLALT is still sending characters from
the buffer due to a first ^@E, the first insertion is aborted and a
second insertion begins at the head of the buffer, probably not
what you want. You can halt the playback of the contents of the
small buffer with ^@Q. After using ^@Q to Quit, you are back in
your application program. A ^@E will reinsert the small buffer
from its beginning while another ^@Q will continue the playback of
the buffer at the point you quit with the first ^@Q.
PLEASE DON'T CONFUSE ^@Enter AND ^@<Enter>!!!
See the Usage Notes to this chapter for a discussion of
exactly how characters are sent to your program, for a warning
about sending characters to your printer and for a discussion of
alternates to using the small buffer.
III.3 The aTtribute and aNsi Tables
^@T will pop up a table of colors which is 22 wide by 11
down. This table has rows labelled with a hex digit and 0 and
Chapter III:TABLES Page 10
Documentation for CTRLALT
columns labelled with a single digit. The color combination in row
60 and column F has what is called color attribute (hence T for
aTtributes) 6FH (The H stands for Hex; in this case 6F is white on
brown). Some programs require you to pick colors by giving these
attributes which is why this table can be useful. For example, you
can change the colors that CTRLALT uses for its tables by modifying
the source code; you will need to insert attributes in appropriate
places as will be described in Section IX.4. The table only shows
attributes 00H through 7FH but attributes run up to FFH. Row 8x is
the same as row 0x, row 9x is the same as row 1x,... row Fx is the
same as row 7x except that the character is blinking. We decided
to spare you the blinking! If you have a monitor which is two
color ("monochrome") but with many shades such as the COMPAQ
monitor, the attribute table can be very useful in showing you what
attribute choices correspond to what shadings.
Unfortunately, the color codes used by the ANSI.SYS device
driver are different from the color attributes. ^@N for aNsi will
pop up a table showing the ANSI conventions. The rows are marked
4x because ANSI uses that for background colors. The columns are
marked 0;3x or 1;3x because that is the ANSI convention for
foreground colors. In the Usage Notes to this chapter, we explain
how to use the table to set colors in DOS via the PROMPT command.
The colors in the ANSI table are not set using the ANSI.SYS
device driver but by writing the color combinations directly into
memory. Thus colors will show even if you do not not have an ANSI
device driver loaded. A non-standard replacement for ANSI.SYS
which attempts to correct the ANSI codes on a monochrome screen
(for example, FANSI-CONSOLE) may show attributes set by ANSI
commands differently from indicated in the aNsi table. However, on
a color monitor, the attributes shown by the aNsi table should
correctly correspond to those set by any ANSI.SYS compatible device
driver.
III.4 ASCII codes and Scan codes
Each letter has an ASCII code and each key of the keyboard
has a so-called scan code. Certain programs require you to give
scan codes, some in decimal form and some in hexadecimal form.
When the aTtribute table is active, pushing any key or simple key
combination will cause the scan codes of the key in hex and decimal
to be displayed at the top of the table and the ASCII code in hex
and decimal to be displayed at the bottom of the table. By
convention, a key and its shifted version have the same scan codes
but some of the alt and ctrl shifted keys have special "scan codes"
different from the ordinary keys. For such keys, the ASCII code
will be listed as 00 and the "scan code" as the appropriate code.
The scan code in this case is often called "extended ASCII code" or
Chapter III:TABLES Page 11
Documentation for CTRLALT
"second ASCII code". In the Usage Notes, we will explain how these
codes are used in ANSI keyboard redefinition. For example, in
decimal form <F1> has second ASCII codes 59, 84, 94 and 104 in its
unshifted, shifted, ctrl-shifted and alt-shifted states. Try
hitting ^@T followed by <F1>, <Shft F1>, <Ctrl F1>, <Alt F1> to see
this in action. You won't need to reach for your BASIC manual any
more to look up these numbers with CTRLALT there to help you!
Since <Esc> exits from the aTtribute table, you can't use
CTRLALT to get the codes for <Esc>. You'll just have to remember
them. The scan code is real hard: it's 01 decimal and 01H. The
ASCII codes are 27 decimal and 1B in Hex.
Two warnings about using CTRLALT to generate scan codes which
we'll expand upon in the Usage Notes: if you have a keyboard macro
program installed and you redefined <Alt 1> to mean "hello",
pressing <Alt 1> will not display the codes (78H scan and 00 ASCII)
for alt-1 but will display the codes (18H scan and 6FH ASCII) for
"o", the last letter in hello. That is, your keyboard macro
program will get to translate the keystrokes before passing them to
CTRLALT. Similarly, if you want the scan code for <Alt-End> (94H),
you must be sure you are in the ^@0(zero) mode discussed in Chap
VI. By default, CTRLALT translates <Alt n1> to the box line
character, └, ASCII code C0H and that is what will appear in
aTtribute mode if you strike <Alt End> (which is the same as <Alt
n1>) without shifting to ^@0 mode. Thus the box drawing module of
CTRLALT translates the keystrokes before passing them to the
aTtribute module.
III.5 Usage Notes
When the Ascii or Hex tables are displayed, the cursor can be
moved off the tables and the characters on the screen Entered,
Printed or put in the Buffer. However, if you wish to get
characters off the screen, it is probably preferable to use marking
mode described in Chapter V. When in these tables, hitting any key
but the arrow keys, <Home>, <End>, <Esc>, <E>, <P> or <B> has no
effect.
If the small buffer fills and you press <B>, the table will
disappear and you will be placed back at the cursor position. If
you don't get your finger off the key soon enough, some extra <B>'s
may be issued to your program. The buffer can be entered with ^@E.
Characters sent to many printers are often not printed until
line feed (ASCII code 0AH) is sent. Thus, your use of the Printer
option when the tables are active may seem to have no effect; if
you want to see the effect, you can send the necessary 0AH or 10
decimal ASCII code. You can send control codes to the printer from
the ASCII table but it is easier to use the printer control mode
Chapter III:TABLES Page 12
Documentation for CTRLALT
described in the next chapter.
When you strike a key like <a> on your keyboard, the ASCII
code (61H in this case) and scan code (1EH in this case) are stored
in DOS's keyboard buffer until input is requested by a calling
program. You can also enter an "a" using the numeric keypad and
the decimal ASCII code (97 in this case): just hold down the <Alt>
key, press <n9>, then <n7> and then let go of the <Alt> key. The
ASCII code is still entered in the buffer as 61H but the scan code
is 00. To see this, call up ^@T, and depress <n9>, <n7> while
holding down both the <Alt> and <LftShft> keys. The point of this
is that CTRLALT enters characters from the small buffer and tables
(or from the large buffer for that matter) as if they were being
entered from the numeric keypad, that is with a scan code of 00.
This may affect how your keyboard macro program processes something
like a "+" if you have defined a macro for <+> but not for <Grey
+>; generally, it will act like the more usual key but that depends
on the keyboard macro program. This issue, especially as regards
KEYWORKS, is discussed further in Section V.4.
It is also important to realize that the keystrokes entered
by CTRLALT from the tables or buffers will be processed by your
application programs or keyboard macro/application program
combination. Thus placing the cursor on 18H in the Hex table (Ctrl
X) and pressing E will move the cursor down in WORDSTAR just as
hitting <Ctrl-X> would do and it will not enter a Ctrl-X in your
file.
If you want to enter a long string of graphics characters
such as ════════════, you could place the corresponding ASCII
character in the small buffer (C4H in this case) and use ^@E many
times but you should be aware that CTRLALT's box drawing mode
described in Chapter VI is probably easier to use.
ANSI color codes are useful for setting screen colors in DOS.
The syntax is <esc>[3x;4y(;1)m where x and y can be read off the
^@N table and the ;1 is optional. Thus the command
prompt $e[33;44;1m$p$g
at the DOS command line would set colors to yellow on blue and
display your current drive and directory ($p for path) and a ">"
($g) as your visible prompt assuming you had included a line
device=ansi.sys
in your CONFIG.SYS file. Or the command
prompt $e[33;44;0m$p$g$e[32;44;1m
will display the path and ">" in brown on blue and what you type in
green on blue. The "1" and "0" codes are toggles so that if both
colors were intense, it would not be necessary to place the "1" in
each escape sequence.
The reason that ANSI codes and color attributes are not the
Chapter III:TABLES Page 13
Documentation for CTRLALT
same is that if the hex digit is written in binary as 0xyz, then x
is Red, y is Green and z is Blue in color attributes and in ANSI
the roles are in the reverse order. Thus cyan, which corresponds to
green and blue on, is 011 (=3H) in attributes and 110 (=6H) in ANSI.
For the technical among you, CTRLALT intercepts interrupt 09H
when looking for its commands but waits for interrupt 16H to act
before reading its subcommands and/or scan codes. This is why
keyboard macro programs will process input before CTRLALT reads the
scan codes. CTRLALT does see the original keystroke through int 09
but passes it up the chain where the macro program processes it
before the ^@T module reads the scan codes via int 16.
Extended scan codes are useful for ANSI keyboard
redefinition. For example, to redefine <F1> to be "dir" followed
by <Enter> you need to send
<esc>[0;59;"dir";13p
to the screen. The <esc>[ and "p" are the ANSI codes indicating
key redefinition while 13 is the decimal ASCII code for <Enter> and
59 the extended ASCII code for <F1>. That is, if you call up ^@T,
and press <Enter>, you'll see a decimal ASCII code of 013 while
pressing <F1> will return an ASCII code of 00 and a decimal "scan"
code of 59.
Chapter III:TABLES Page 14
Chapter IV: PRINT CONTROL MODE
COMMANDS: ^@P
SUBCOMMANDS: <Up Arrow>, <Down Arrow>, <PgUp>, <PgDn>, <Home>, <End>
Switch, Print=<Enter>, All, <Esc>
Bold, Emphasized, Doublestrike, Compressed, double Wide
Tiny, near letter Quality, pIca, 8 lines/in, Underline
Form feed, New page top
character set 2, 1 direction, sKip perforations,
Reset, Off
IV.1 Line Marking
^@P calls up a line marking mode which can be used to send
lines to the Printer and where it is possible to send control codes
to an IBM Graphics compatible printer. A whole line mark appears
at the position of your current cursor. This line can be expanded
to a multi-line band. <PgUp> and <PgDn> move the band up and down
without changing its width. The <Down Arrow> key makes the band
wider by moving the bottom edge down one line without moving the
top edge. This key has no effect if the bottom edge is on the
bottom of the screen. The <Up Arrow>key makes the band narrower
by moving the bottom edge up by one line without changing the top
edge. If the band is one line wide, <Up Arrow> has no effect.
<Home> moves the band to the top of the screen and <End> to the
bottom without changing the width. If you have a dual monitor
system, S for Switch will switch the band to your inactive monitor
and a second S will switch it back. The band can be adjusted while
it is on either monitor. At any time <Esc> exits this mode with no
further action.
IV.2 Printing the Marked Lines
After you have marked some lines, you have two options for
printing on the system printer LPT1:
P Prints the marked lines on the printer
A Prints all lines on the screen with the marking
Thus, A acts like <Shft PrtSc> if you haven't Switched the marking
to the other screen while ^@P,S,A will print what's on your
inactive screen. At any time <Esc> exits this mode with no
further action. <Enter> means the same thing as P, i.e. it prints
the marked lines on your printer.
IV.3 Sending Control Codes to Your Printer
Did you ever wish that you could send commands to your
printer while inside a running program? CTRLALT lets you do that
while in its ^@P mode. Hitting the letters or numbers in the first
column sends the commands indicated; for the technically inclined
Chapter IV:PRINT CONTROL MODE Page 15
Documentation for CTRLALT
the last column gives the actually decimal ASCII codes sent to the
printer. THESE CODES ONLY DO THE OPERATIONS LISTED FOR PRINTERS
COMPATIBLE WITH THE IBM GRAPHICS/EPSON MX 80 including the IBM
Proprinter and Epson FX 80. Three are special to the PROPRINTER.
┌────┬───────────────────────────────────┬───────────────┐
│ │ PRINTER FUNCTION │ ASCII CODES │
╞════╪═══════════════════════════════════╪═══════════════╡
│ B │ Bold=Emphasized+Doublestrike │ 27,69,27,71 │
│ E │ Emphasized print │ 27,69 │
│ D │ Doublestrike │ 27,71 │
│ C │ Compressed print │ 15 │
│ W │ double Wide │ 27,87,1 │
│ T │ Tiny = Superscript, 1.5 mm │ 27,83,1,27,65,│
│ │ line spacing, compressed │ 5,27,50,15 │
│ Q │ near letter Quality (PROPRINTER) │ 27,73,2 │
│ I │ pIca=12 cpi (PROPRINTER ONLY) │ 27,58 │
│ 8 │ 8 lines per inch spacing │ 27,48 │
│ U │ Underline on │ 27,45,1 │
│ F │ Form feed │ 12 │
│ N │ New page top(PROPRINTER ONLY) │ 27,52 │
│ 2 │ character set 2 │ 27,54 │
│ 1 │ 1 directional printing │ 27,85,1 │
│ K │ sKip perforations │ 27,78,8 │
│ R │ Reset │ INT 17H │
│ O │ Off │ 27,70,27,72,18│
│ │ │ 27,87,0,27,84│
│ │ │ 27,79,27,55, │
│ │ │ 27,45,0,27,65│
│ │ │ 12,27,50,27, │
│ │ │ 73,0,13 │
└────┴───────────────────────────────────┴───────────────┘
The box characters in the above table were entered with the CTRLALT
box drawing mode (Chapter VI).
Rather than have separate commands to turn printer features
on and off, you can only turn them on with single commands. The
Off command turns off all special printing features; it should have
the same effect as turning your printer off and on except that it
will not reset the meaning of top of page. The RESET command,
which should work with any printer uses a BIOS routine and, when it
works, has the same effect as turning the printer off and on
including resetting the top of page. It appears not to work when
one of several different print spooling programs is installed.
IV.4 Usage Notes
Until you get used to print control mode, you will probably
call up ^@P and then hit the <Up Arrow> and be surprised that
nothing happens. Note that the <Up Arrow> moves up only the bottom
Chapter IV:PRINT CONTROL MODE Page 16
Documentation for CTRLALT
edge of the marked region and has no effect when the region is one
line wide. Use <PgUp> to move the marked region up.
In print control mode, all letter subcommands except P, A, S
send codes to the printer.
Characters sent to the printer using this module are
filtered to avoid control characters being sent inadvertently.
That is characters 00H through 1FH and 80H through 9FH (0-31 and
128-159 decimal) are replaced with spaces before the characters are
sent to the printer. Such filtering is not done in printing from
the ASCII and hex tables nor in marking mode (discussed in the next
chapter). To see the difference, call up the ASCII table with ^@A,
then call up ^@P and highlight the first row followed with <P>.
Only spaces will be printed. Now call up ^@<Enter>, move the
cursor to ASCII code 007 (Ctrl G) and hit P. This single character
will be sent unfiltered to your printer and you will hear a beep.
Except for the issue of filtering, you may find it more
convenient to use marking mode to send characters to the printer.
In the default "character set 1", the printer interprets codes
in the 80H through 9FH range as the corresponding code 80H smaller
so that, for example, 9B is the same as 1B (<Esc>). Character set
2 which can be turned on with the <2> subcommand prints out various
foreign alphabet characters for these codes corresponding to what
you will see on your screen if you popup an ASCII table. Since
CTRLALT cannot know which character set your printer is using,
filtering in printer control mode is always on. Thus the <2>
command is only useful for printing out files with DOS's copy
command, in some application programs, or printing from a CTRLALT
table.
Turning on Emphasized or Doublestrike print slows down your
printer by a factor of about 2 and turning on both by a factor of
4. Nevertheless, output in this "Bold" mode looks so good that we
have included a separate command (B) to turn it on. Thus B is
equivalent to striking <D> and <E>. If you have a Proprinter you
might look at the NLQ (invoked with Q) or <Q> and <D> together.
Tiny print is a combination of superscript mode, compressed
print and a reduced number of lines per inch; it has an interesting
affect somewhat akin to the EGA's 43 line screen mode. The eight
lines per inch mode invoked with <8> does not change the size of
characters but removes white space between lines. It is useful for
saving paper in printing out things like program listings with the
"copy ... prn" command. Unidirectional printing, invoked with <1>,
slows the printer down but is useful if you want columns to come
out especially straight. You may want to use it when printing out
the graph drawing characters.
Chapter IV:PRINT CONTROL MODE Page 17
Documentation for CTRLALT
The underlining turned on by <U> is continuous; even blank
lines are underlined.
The sKip perforation command sets the printer to print out 58
lines and then skip 8. If you want to use it, you should set the
top of page to about four lines below the perforation and then use
the <R> or <N>(on a Proprinter) command or turn your printer off
and on.
The IBM Graphics printer does not allow you to turn on all
possible combinations of special print features. Only one of
Compressed and Emphasized can be turned on and only one of the
following three: Double strike, subscript and superscript. The
rules for the IBM Proprinter are somewhat different, see page 4-35
of the Proprinter Guide to Operations.
There is no problem invoking ^@P while your screen is in a
graphics mode. You cannot use the mode to print part of the screen
in a useful way (although you could Switch to your monochrome
monitor and Print part of it), but you can successfully send
control codes to your printer. When ^@P is invoked from a graphics
screen, a certain amount of garbage will appear on the screen but
that will disappear and your screen will be successfully restored
when you <Esc> from the print control mode.
Currently, the printer marking works perfectly on lines 1-25
even when the EGA is in its 43 line mode. However, you cannot mark
more than one line below line 25 and you can only mark a line above
the one you start on. Moreover, the <A> command will only print
the first 25 lines of the screen even if you have a line after the
25th marked, but then again, Shift PrtSc also only prints the first
25 lines displayed. We hope to remove these limitations in a future
version of CTRLALT.
If you don't have your printer turned on and you invoke ^@P,
if no printer is attached to your system or if you have a
printer turned on but you have switched it off line by pushing an
"Online" button and you invoke ^@P, CTRLALT will beep at you and
refuse to come up. If you have a print spooler resident, CTRLALT
thinks that you have a printer attached and it will act normally
passing characters to the spooler.
If you have a two monitor system and set colors via ANSI.SYS
in your prompt, the band in print control mode may appear invisible
on your monochrome monitor. The ^@Vanilla command should resolve
this problem. It is discussed in Section V.4.
Chapter IV:PRINT CONTROL MODE Page 18
Chapter V: MARKING MODE
Commands:^@<Enter>, ^@Vanilla, ^@Insert, ^@Quit
Insertion Control Options: ^@Backspace,^@carriage Return, ^@Zilch
Insertion Speed Controls: ^@+, ^@-
^@<Enter> Subcommands: <Enter>, <Ins>, Switch, <Esc>, <Arrows>,
<PgUp>, <PgDn>, <Grey +>, <Grey ->,
cUt, Copy, Print, Enter
V.1 Marking a Rectangle
^@<Enter> brings up a solid block cursor at your present
cursor position. This cursor can be moved in the following ways:
<Up Arrow> or <PgUp> moves it up
<Down Arrow> or <PgDn> moves it down
<Left Arrow> or <Grey -> moves it left
<Right Arrow> or <Grey +> moves it right
<Home> moves it to row 1, column 1
<End> moves it to row 25, column 80
In addition
S switches this block cursor to your other monitor
<Esc> exits the marking module with no action being taken
All the actions discussed in the next section can be taken
with the one character box formed by the block cursor. To get a
bigger box, you must "tack down" one corner. Pressing <Ins> or
<Enter> tacks down the upper left corner of the box. You can then
move the lower right hand corner with the arrow keys so long as the
box remains at least one row down and one column across. Thus the
arrow keys change the size of your box. You can also move the box
as a whole without changing its size: <PgUp> and <PgDn> move it up
and down while <Grey +> and <Grey -> move it right and left.
<Home> moves the upper left hand corner of your box to the upper
left hand corner of the screen and <End> does the same with the
lower right corners. And S will switch the box from one screen to
the other.
The box will appear on a color screen in distinctive colors
and on a monochrome screen in reverse video. However, there may be
a problem showing the box on your monochrome monitor if you set
colors with an ANSI.SYS prompt; as we will discuss in the Usage
Notes of this chapter, these problems may be resolved with the ^@V
command. You may also have problems with an invisible box on a
black and white monitor attached to a graphics card such as the
standard COMPAQ setup. This can be solved by customizing the
program according to the directions in Chapter IX.
V.2 What you can do with the Marked Box
Once you have a marked box on the screen, you can take the
following actions:
S Switch the box to your other screen
Chapter V:MARKING MODE Page 19
Documentation for CTRLALT
P Print it on your printer (no filtering of control
characters)
E Enter it at the position that your cursor had when
you called up ^@<Enter>
C Copy it to the same position on your other monitor
U cUt it to the large buffer
<Enter> has the same action as U
<Ins> has the same action as U
<Esc> exits marking mode with no action being taken
For any of these actions except <S>, the box disappears, your
screen is restored and you exit CTRLALT. You can copy from your
inactive to your active monitor but this will only affect what is
displayed on the screen and is not the same as having typed in the
characters.
Using the E option not only enters the characters at your
cursor position but also puts them in the large buffer. The way
the characters are entered is determined by the same options set in
the insert mode and discussed in the next section. That is, the
option <E> is the same as <U> followed immediately by ^@I.
The contents of the large buffer are only changed if you cUt
or Enter the box in which case the box replaces what was in the
buffer. Options <P>, <C> and <Esc> do not change the contents of
the large buffer. As in the case of the small buffer which is not
emptied in response to a ^@A or ^@H, the contents of the large
buffer are not changed by a ^@<Enter> but only in response to some
of its subcommands.
V.3 Inserting the Large Buffer
It wouldn't do much good to be able to put characters into
the large buffer if there wasn't a way to get them out. ^@I will
Insert (don't confuse ^@Insert with ^@<Ins>: the latter is NOT a
CTRLALT command to avoid an accidental ^@<Del>) the contents of the
large buffer as a series of keystrokes which are then acted upon by
your application program. The entire contents of the buffer will
be entered and you will then exit CTRLALT. The buffer is unchanged
so you can reenter it with a second ^@I. You can suspend the
playback of the contents of the large buffer with ^@Q. After using
^@Q to Quit, you are back in your application program. A ^@I will
reinsert the large buffer from its beginning while another ^@Q will
continue the playback of the buffer at the point you quit with the
first ^@Q.
The large buffer stores a box and therefore more than one
line of characters. Depending on the application, you may want
line ends to be treated in different way. CTRLALT will treat line
Chapter V:MARKING MODE Page 20
Documentation for CTRLALT
ends in one of three different ways. You choose the entry mode
with suitable ^@ commands:
^@R carriage Return mode, the mode in which CTRLALT starts
^@B Backspace mode
^@Z Zilch mode
You only need issue this command once and CTRLALT will remember it
until you issue another one of them. When ^@I is issued or the <E>
subcommand is chosen from marking mode, CTRLALT uses the mode
determined by the last of these three commands or it uses carriage
Return mode if none of these commands has been issued since
loading.
In carriage Return mode, CTRLALT sends a carriage return
(ASCII 013) at the end of each intermediate line in the buffer.
This is precisely the code sent by the <Enter> key as you can check
by using ^@T. This is the proper mode to use in certain word
processors.
In Backspace mode, CTRLALT looks at the length of the lines
in the buffer and sends a sequence of left arrow keystrokes
followed by a down arrow at the conclusion of each line. This will
tend to produce a rectangular box in most word processors but you
may have a problem if your word processor ignores down arrows
issued at the bottom of a file. This is also the slowest entry
method. Despite the name, it is <Left arrow>s and not <Backspace>s
that are issued in this mode.
In Zilch mode, as the name implies, CTRLALT sends no
keystrokes at the end of a line but continues to send the
characters on the next line. If you don't want to preserve the box
shape of what you put in the buffer and you are sending the
characters to a word processor with word wrap, Zilch is probably
for you.
Not all applications can take keystrokes at the rate that
CTRLALT supplies them. For that reason, you can issue a command to
CTRLALT to send keystrokes at a slower rate. It will then issue
keystrokes at that rate until its receives a command to use the
faster rate. The commands are:
^@- use slower speed
^@+ use faster rate
The + and - refer to the keys on the top row and not the <Grey +>
and <Grey -> which are too close to <Del>. By ^@+ we mean ^@ and
the <+/=> key; you should NOT also depress a shift key. By default
CTRLALT starts in the fast mode. PCWRITE in Backspace mode
requires the slower speed to operate properly.
While it is intended that you issue ^@+ and ^@- at a time
when CTRLALT is not inserting keystrokes in response to a ^@I,
there seems to be no problem issuing these commands while an
Chapter V:MARKING MODE Page 21
Documentation for CTRLALT
insertion is in progress. The results of issuing ^@R, ^@B or ^@Z
during an insertion are unpredictable.
V.4 Usage Notes
The attributes used to display the difference between a box
being made with CTRLALT and the ambient background are determined by
a method which will show a multiply colored box overlaying a
multiply colored screen. On an ordinary monochrome monitor with
the normal attributes for regular (07) and reverse video (70), the
box shows as reverse video where it overlays ordinary text and
ordinary video where it overlays reverse video. However, if you
have a two monitor system and set your prompt with ANSI.SYS, or if
you are looking at the output of a program intended to run in
color, the attributes on the monochrome screen may be non-standard.
That is the bytes stored in memory will not be the usual 07
although the screen will appear normal. Thus if you use ANSI to
set yellow on blue as the colors on your color screen while in DOS,
the attributes which ANSI.SYS sets up when you're active on your
monochrome screen will be 1E which appear as intense amber (or
green) on black. The algorithm used by CTRLALT will set the
attributes in a box on the monochrome monitor to 69 which also
appears as bright amber (or green) on black so the box is
invisible! For this situation, we have built in a special command
^@V which will change all the attributes on your monochrome screen
to the plain Vanilla 07. So if you are on the monochrome screen
and your marking box appears to be invisible, do the following:
<Esc> to exit marking mode
^@V to Vanillaize attributes
^@<Enter> to return to marking mode
The marking box will not longer be invisible. If you use ^@V
before or without <Esc>aping first, the results will not be the
desired ones and you should follow the above directions. These
comments apply also to print control mode. If you are using the
commercial program FANSI-CONSOLE, it uses a better algorithm for
setting attributes on the monochrome screen and you will probably
not have the same need for ^@V.
As explained in Section III.5, text entered by CTRLALT is
sent to your application as if it were entered via the alt-numeric
keypad, i.e. with a reported scan code of 00. This may affect
how it is treated by certain keyboard macro programs especially
those such as KEYWORKS that allow you to define macros on the alt-
numeric keypad. With such a program, it would be wise to restrict
the numbers of these macros to the range 128-175 to avoid
unexpected results when entering characters from the buffers or in
the box drawing mode.
The remarks made in Section IV.3 about the marking of lines
Chapter V:MARKING MODE Page 22
Documentation for CTRLALT
on the EGA running in 43 line mode when in print control mode also
apply to marking mode.
Chapter V:MARKING MODE Page 23
╒═══╕ ╓───────╖
Chapter VI: │BOX│ ║DRAWING║
╘═══╛ ╙───────╜
COMMANDS: ^@<0>,^@<1>,...,^@<9>
character type set with 0-6, cursor movement with 7,8,9
SUBCOMMANDS: @<n0>,...,@<n9>,@<Grey +>,@<Grey ->
VI.1 The Alt Numeric Keypad
When IBM decided to develop an extended ASCII code covering
the codes from 129 through 256, they included 40 box drawing
characters to allow single line boxes, double line boxes and mixed
boxes like those in the title of this chapter. These characters
display properly on the screen and on some printers (but the IBM
graphics printer prints all graphics characters as single line
characters, even the double line and mixed characters; the
Proprinter prints them out as they appear on the screen) and they
are much more elegant than what people try to put together with =,
- and |. Just compare
───────────────────── with -------------------
or ═════════════════════ with ===================
│ |
│ |
│ |
or │ with |
│ |
│ |
The problem is that there is not any simple way of embedding
graphics characters in your word processing files. There are full
featured monographics editing programs like MONOGRAFXS which are
quite nice but they don't solve the problem of occasional use or
the occasional user. CTRLALT provides access to these box drawing
characters in a simple and logical way. The keystrokes that we use
for this depend on exploiting a redundancy built into the standard
keyboard setup. One can always enter box characters by knowing
their ASCII codes and using the <Alt> shift and the numeric keypad.
For example, the corner └ has decimal ASCII code 192 so one can
enter it by holding down the <Alt> key and pressing <n1>, <n9>,
<n2> on the numeric keypad. When you lift your finger off the
<Alt> key, the └ should appear. Try it in DOS. The point is that
you can get the same result by pressing the <Alt>-<Lft Shft>
combination instead of the <Alt> key and this leaves the <Alt>
keypad for other uses. Of course, one can't get 40 characters out
of a ten key keypad, so we use ^@numbers to shift between different
templates for the keypad; one of the possibilities is ^@0(zero)
which returns the alt-keypad to its usual state so you can continue
to use it for entering ASCII codes or for use in your keyboard
macro program which has a key like <AltEND>. ^@1-4 will give
templates with the various box characters and ^@5-6 yield some other
Chapter VI:BOX DRAWING Page 24
Documentation for CTRLALT
useful extended ASCII characters. ^@7-9 will control the cursor
motion associated with the keys that send in the straight graphics
characters. Later in the chapter, tables will appear that should
be useful if viewed on the screen. Not all printers will print the
graphics characters.
VI.2 Box drawing characters
The shape of the numeric keypad is perfect for associating to
those graphics characters which are not straight. This is one
place where a picture is worth a thousand words so we show the
keypad and the characters one obtains with them in the default ^@1
mode:
7 8 9 ┌ ┬ ┐
4 5 6 ├ ┼ ┤
1 2 3 └ ┴ ┘
^@1
so that @<n3> will give ┘ and @<n5> will give ┼. There are two
other single line characters, the straight lines ─ and │ and these
are given by @<Grey -> and @<Grey +> respectively. Of course - is
a horizontal line and + has a vertical line.
Similarly, ^@2 gives the double line characters, ^@3 the
characters associated with double horizontal and single vertical
while ^@4 is the reverse. A mnemonic for remembering which is
which is to note that the number 3 has more horizontal lines than
vertical lines while 4 has more vertical than horizontal lines. In
pictures:
7 8 9 ╔ ╦ ╗ ╒ ╤ ╕ ╓ ╥ ╖
4 5 6 ╠ ╬ ╣ ╞ ╪ ╡ ╟ ╫ ╢
1 2 3 ╚ ╩ ╝ ╘ ╧ ╛ ╙ ╨ ╜
^@2 ^@3 ^@4
Thus, for example to insert ╧, first hit ^@3 and then @<n2>.
Until some other of ^@0-6 is struck, the @<n.> keys will then
yield the characters shown above ^@3.
In each case @<Grey+> and @<Grey -> give the vertical and
horizontal line characters for the associated set (so, for example
@<Grey -> gives ═ with ^@2 and ^@3 while @<Grey +> gives ║ with ^@2
and ^@4).
Chapter VI:BOX DRAWING Page 25
Documentation for CTRLALT
VI.3 Other graphics characters
^@5 and ^@6 give shading and Greek characters respectively as
shown in:
7 8 9 ▌ ▐ ▀ α ß τ
┌─┐ ┌─┐ ┌─┐
4 5 6 │-│ █ ■ ▄ │«│ δ ε Θ │Γ│
├─┤ ├─┤ ├─┤
1 2 3 │+│ ░ ▒ ▓ │»│ µ π σ │Σ│
└─┘ └─┘ └─┘
^@5 ^@6
The shading characters shown in positions 7 and 8 look the same but
occupy the left and right sides of a space so that @<n7>@<n8> is ▌▐
while @<n8>@<n7> is ▐▌. Similarly positions 9 and 6 are top and
bottom as in ▀▄ and ▄▀. The characters on the Grey +/-
make attractive patterns as in:
««««««««»»»»»»»
»»»»»»»»»»»»»»»
The way to remember the shading characters is that the
shading gets darker as one runs from @<n1> to @<n4>, the left hand
shading is to the left of the right hand shading (@<n7> and @<n8>)
while the top half shading is on top of the bottom half shading.
The Greek letters are in alphabetical order reading as if the
keypad were a page rather than in numeric order and the Grey +/-
have capital Greek letters. Σ, the mathematical symbol for sum is
associated to the plus key. There are three additional Greek
letters included in the IBM set: ASCII 232 Φ, 234 Ω and 237 φ not
to mention the Greek letters that IBM doesn't recognize!
VI.4 Cursor motion and <Grey +/->
The three commands ^@7, ^@8, ^@9 control the way that the
cursor moves when one issues an @<Grey +> or @<Grey -> keystroke.
In the default mode, to which one can return with ^@8, the
character is issued and the cursor moves right one position. In
the mode reached with ^@9, @<Grey -> works the same as in the
default mode but for @<Grey +> the cursor moves down one row rather
than right. Thus one can draw a line downward by depressing the
alt key and tapping the <Grey +> several times. In the mode
reached from ^@7, the cursor moves back one step after @<Grey ->
and up one after @<Grey +>.
These extra cursor modes are only operational when the
@numeric keypad is in a mode set by one of the commands ^@1-4;
Chapter VI:BOX DRAWING Page 26
Documentation for CTRLALT
there is no unusual cursor motion in the modes set by ^@0, ^@5 or
^@6. But CTRLALT does remember the cursor movement mode that was
set if you go, for example, from ^@1 to ^@6 and back to ^@1.
VI.5 Usage Notes
Notice that states of the Alt keypad numbers are set with ^@
-top row number commands. We want to be sure to keep your fingers
away from an accidental ^@<Del>.
The motion of the cursor when ^@7 or ^@9 is set is based on
the assumptions that entering a character moves the cursor right
one character and that arrow keys act in the conventional way.
Thus the action of @<Grey +> in ^@9 mode is accomplished by sending
the three keystrokes │ (ASCII 179), <Lft> (ASCII 00;75) and <Down>
(ASCII 00;80). If these assumptions are not met the results can be
unexpected.
In PCWRITE, there is a problem with the rapid entry of two
<Lft>'s: the cursor moves left, not two but three spaces. The
@<Grey -> does not work properly in ^@7 mode when you are running
PCWRITE.
Keyboard macro programs typically allow you to define
macros on keystrokes like <AltEND> if you hold down the <Alt> key
and tap <End>. These macros are still accessible to you if go into
^@0 mode. What happens if you try to define such a macro on ^@<n1>
if you are in a mode like ^@1 will depend on the particular macro
program. For example if you are using SUPERKEY, you will get the
message that you are defining a macro based on └. This means you
can define not one <AltEND> macro but 7 of them and move between
them with a choice from ^@0 to ^@6. In KEYWORKS, the effect will
be similar but instead of telling you that the macro is named "└",
it will give you the name {{192} (192 is the decimal ASCII code for
└).
Chapter VI:BOX DRAWING Page 27
Chapter VII: THE EMERGENCY EXIT
COMMAND: ^@<F9>
VII.1 A Powerful but Dangerous Command
CTRLALT provides a service which can be very useful but which
can cause crashes and loss of work if not used properly. We urge
you to experiment with it before using it "under fire" and to read
this ENTIRE chapter before doing any experimentation on your own.
We have made the keystroke invoking this service ^@<F9> which is
sufficiently awkward that it is unlikely you would issue it by
mistake. In particular, you can safely choose to ignore this
chapter and the service provided if our warnings make you nervous
(but we think that would be a mistake since the service can be
useful).
You have surely had the experience of your machine apparently
locking up for no apparent reason or because you bumped the wrong
key causing your application program to bomb. There is no real
excuse for applications programs to behave like that but some do
because some programmer neglected to put error checking in one
place or another. In that situation, you have had to reboot or
even turn the machine on and off. ^@<F9> will occasionally save
you when this happens. This solution is not ideal; what ^@<F9>
does is issue a call to DOS (service 4CH of interrupt 21H if you
really want to know) to terminate the currently running program.
Any work you did during the current session in that program and
which you or the program did not explicitly save will be lost. But
if the exit is successful, you will not have to wait while your
system boots up again nor will you lose the contents of your RAM
disk, or anything left unsaved in resident programs like SIDEKICK's
notepad.
^@<F9> is also useful for exiting certain game programs which
do not give you any way of exiting to DOS but expect you to reboot
the machine when you are finished playing.
If you want to see ^@<F9> in action, you can try the
following experiment. Use DEBUG to make a little two byte program
which will put your computer into an endless loop. Here is how the
debug session should look (WARNING: DO NOT THINK, "Oh I know how to
do that in BASIC; it won't matter if I don't follow directions and
use BASIC instead". YOU WILL BE SORRY IF YOU TRY EXPERIMENTS WITH
^@<F9> AND BASIC BEFORE READING THIS CHAPTER!!):
Chapter VII:THE EMERGENCY EXIT Page 28
Documentation for CTRLALT
>debug junk.com
File not found
-a
xxxx:0100 jmp 100
xxxx:0102
-rcx
CX 0000
:2
-w
Writing 0002 bytes
-q
Here, "xxxx" is an irrelevant string of four hex digits.
Merely making this program will not produce any effect but
running it will. So please be sure that CTRLALT has been installed
and type in "junk" at the DOS command line. The cursor will move
down and sit there but the machine will respond to no normal
keystrokes, even <Ctrl C> or <Ctrl Break>. Your resident programs
may still be accessible. For example, when we tried the
experiment, SIDEKICK could still be called up but SUPERKEY could
not unless SIDEKICK was called up first. When you've decided that
you can't think of any way out but rebooting, use ^@<F9>.
Impressed? If you hit various keys in your attempt to exit they
may now appear on the screen since they were put into the keyboard
buffer and released when DOS came back (if you invoked SIDEKICK,
it may have eaten the keys in the buffer so they may not appear).
VII.2 Fouled Interrupts
Generally, ^@<F9> will "work" at any time that the machine
would respond to ^@<Del>. If your machine is so dead that you must
turn it on and off, ^@<F9> will certainly have no effect but it
can't hurt to try. And if ^@<F9> doesn't work, certainly try
rebooting via ^@<Del> before giving up and powering off and on.
There are times that ^@<F9> will successfully exit the running
program and give you a DOS prompt but the machine will not respond
to the keyboard. This happens because while you successfully
terminated the running program, the crash involved more than a
logic loop in the program; a keyboard interrupt could be fouled or
some aspect of DOS could be sick. In that case, you'll have to
reboot via ^@<Del>. It should be possible to make a version of the
RELEASE program mentioned below a resident part of CTRLALT which
might probably save you in such situations and we may do that in a
future release of CTRLALT.
It is important that you understand in vague terms why this
problem occurs. When you strike a key on your keyboard, a signal
Chapter VII:THE EMERGENCY EXIT Page 29
Documentation for CTRLALT
is sent to your CPU telling it to invoke a special program. To
find that program it looks at the four bytes starting at memory
address 00024H (Interrupt 09H). These four bytes are interpreted
as a memory address and the computer looks to that memory address
to find the special program to run. Initially, the address is in
the ROM, that is the memory "hard wired" into your machine.
Keyboard macro programs work precisely by changing that address
when they load. The macro program puts the address of some of its
code in memory location 00024H and the CPU then invokes the macro
program whenever a key is struck. Typically, the macro program
will decide if the keystroke was "intended for it" and if not, it
will then invoke the routine at what used to be called from address
00024H. Suppose somehow that the four bytes at address 00024H get
changed in a random way. Then, striking a key will call up an
irrelevant program or even what the CPU would regard as pure
babble. Actually, if int 09H were fouled, ^@<F9> would not work
but keyboard input in DOS involves an additional interrupt (16H)
which could be fouled without affecting ^@<F9>.
The point of giving you this technical discussion is that
there are many interrupts besides 09H and 16H. If they become
fouled, you may not realize it since keystrokes will act normally
but some other action like reading a disk or loading a program may
cause your CPU to get babble. There is another possible problem
related to this. Suppose the application program you loaded
changed int 9H so that the application program directly processes
keystrokes (two programs notorious for doing this are XYWRITE and
SMARTCOM). While ^@<F9> has exited the program, it has not removed
the code for the program so that it could happen that the code for
the exited program will continue to successfully process
keystrokes. However, exiting the program has told DOS that the
memory can be used so that loading some other program overwrites
the code that was processing keystrokes. Since the address at int
9H still points to the overwritten address, you have babble this
way too. Thus, ^@<F9> may get you out of trouble but lead to an
unstable state.
Fortunately, errors in the interrupt table or DOS (produced
by an application program doing something stupid) are likely to so
foul the system that you won't be fooled into thinking all is well.
Thus the problem of merely apparent salvation will be associated
with using the emergency exit from certain programs. Which ones?
We wish that we could tell you. You will learn mainly by trial and
error but it appears that many programs are safe. Generally the
one with problems are those that clearly don't "play by the rules".
If your keyboard macro program doesn't work in an application, it
is likely that it will produce an unstable state after an emergency
exit. And BASIC changes a whole bunch of interrupts so using
^@<F9> inside BASIC will cause an unstable state. There may also
be problems with complied BASIC programs.
Chapter VII:THE EMERGENCY EXIT Page 30
Documentation for CTRLALT
VII.3 RELEASE: A Safety Valve
With some advanced planning and the program RELEASE.COM
(written by one of us - RMW - and in the public domain) which is
included with this package, you can give yourself an extra safety
valve to use when you have issued a ^@<F9> and are unsure of the
state of your interrupt table. RELEASE works in the following way:
at any time you have a DOS prompt, you can run the RELEASE program
by typing the command
release FILENAME
FILENAME can include an optional drive and directory name and must
include a valid filename with NO extension. If a drive and/or
directory path are not given, RELEASE will use the current values.
This command will create a file in the specified drive and
directory with the name FILENAME.com. If such a file previously
exists RELEASE will erase it and replace it with the file it
creates. Thus "release B:\foo\george" will create george.com in
the directory foo of drive B and any previous george.com in that
directory will be eliminated. If you later run the program
george.com (by issuing the command "george" from the proper
directory or having that directory in your DOS search path), the
program will remove any programs loaded subsequently to your having
run RELEASE and restore the interrupt table to its state at the
time george.com was created. In particular, it might pay to
include the line "release aeend" near the end of your autoexec.bat
file. If you invoke ^@<F9> and are concerned about the stability
of your system, just run aeend. We have tested this procedure
after exiting from BASIC with no later problems. Of course, you
may find RELEASE useful for memory management tasks other than just
saving you after ^@<F9>.
VII.4 Usage Notes
It can happen that exiting a resident program like SIDEKICK
especially when running an application program in graphics mode
will fail to restore the screen. This is a time when ^@<F9> will
at least save you from rebooting. However, you will lose any work
which was not previously saved so you should try other methods like
reinvoking the resident program or refreshing the screen in the
application program by <PgUp> and <PgDn> if appropriate.
Invoking ^@<F9> from a resident program like SIDEKICK is
perfectly possible (although SIDEKICK is unlikely to lead to a
situation where ^@<F9> is needed, we have known the system to lock
up with SIDEKICK active due to a conflict with another resident
program). However, ^@<F9> issues a command to DOS to return to the
DOS level so that ^@<F9> will not only terminate the resident
Chapter VII:THE EMERGENCY EXIT Page 31
Documentation for CTRLALT
program but also the application program that was running when the
resident program was invoked. It may also happen that you are no
longer able to call up the resident program with its hotkeys if you
have exited it with ^@<F9>. This will depend on the program and
the state it is in when you invoke ^@<F9>. For example, if you
call up CTRLALT via ^@A and then use ^@<F9>, you will disable all
the tables although the other features of CTRLALT will still be
accessible. This has to do with the internal structure of CTRLALT.
CTRLALT saves the part of the screen replaced by a table in a
special buffer in order to restore the screen upon exiting. To
save memory, only one buffer is kept which means that CTRLALT will
not let you call up one table when another is currently active. It
does this by setting an internal flag saying a table is currently
active. When this flag is set, the four table commands ^@A,H,N,T
have no effect. Exiting a table with <Esc> resets the flag but
exiting with ^@<F9> cannot reset the flag and thus the tables are
disabled. The point of this discussion is to explain why the
behavior of a resident program exited with ^@<F9> will depend on
the program and its current state.
DOS has special rules for how its special processes act in
response to ^@<F9>. If a batch file is running and ^@<F9> is
invoked, the batch file is not terminated. If you have called up
an application program with a batch file and you issue a ^@<F9>,
you will exit that application program but the batch file will
continue running (if you ever want to exit a running batch file,
Ctrl-C or Ctrl-Break works fine). If you are in a new shell of DOS
^@<F9> will return you to that shell and does not terminate the
shell, that is ^@<F9> does not terminate the program command.com.
The com files produced by RELEASE can be dangerous if run
during a different session where other programs are loaded. For
example, if you change your autoexec.bat file and later run an
aeend file produced in an earlier session, you are bound to have a
serious problem. This is why RELEASE erases any file with the same
name as the one you are trying to create. To add to you safety, we
recommend placing the com files made by RELEASE on a RAM disk if
you have one.
RELEASE does not know about Lotus/Intel/Microsoft EMS and
will not properly free any EMS memory filled up between when
RELEASE was run and when you run the com file RELEASE made. There
is a pair of public domain programs written by Turbo Power software
called MARK and RELEASE (different RELEASE; if you have both rename
one of them!) which serve a function similar to the RELEASE program
discussed here but which includes EMS support. However, you cannot
use the MARK/RELEASE combination as a safety valve as described
above. If run after BASIC, the other RELEASE program will cause a
dramatic hard crash. The difference seems to be that the Turbo
Power RELEASE, being a TURBO PASCAL program is large (about 13K)
Chapter VII:THE EMERGENCY EXIT Page 32
Documentation for CTRLALT
while the com file made by Wilson's RELEASE is small (555 bytes)
and so Turbo Power's RELEASE overwrites some code pointed to by an
interrupt. If you have both programs available and use EMS memory,
you can first run Turbo Power's MARK and then Wilson's RELEASE at
the end of your autoexec.bat file. Then when trying to recover
from a dangerous ^@<F9>, you first run the com file made by
Wilson's RELEASE and then the Turbo Power RELEASE program.
Chapter VII:THE EMERGENCY EXIT Page 33
Chapter VIII: COMMAND SUMMARY
Section numbers appear in parentheses
────────────────────────────────╥──────────────────────────────────
^@A ASCII table (III.1-2) ║ ^@U NOT USED
^@B Backspace mode (V.3) ║ ^@V Vanilla (V.4)
^@C Copy screen (II.1) ║ ^@W NOT USED
^@D NOT USED ║ ^@X NOT USED
^@E Enter small buffer (III.2)║ ^@Y NOT USED
^@F NOT USED ║ ^@Z Zilch mode (V.3)
^@G NOT USED ║ ^@<F9> Emergency Exit to DOS (VII)
^@H Hex table (III.1-2) ║ ^@<Enter> Marking Mode (V.1,2)
^@I Insert large buffer (V.3) ║ ^@<=/+> Fast Insert Mode (V.3)
^@J NOT USED ║ ^@<-/_> Slow Insert Mode (V.3)
^@K Kill other screen (II.1) ║ ^@1 └ ┴ ┘ ├ ┼ ┤ ┌ ┬ ┐ mode (VI.2)
^@L NOT USED ║ ^@2 ╚ ╩ ╝ ╠ ╬ ╣ ╔ ╦ ╗ mode(VI.2)
^@M NOT USED ║ ^@3 ╘ ╧ ╛ ╞ ╪ ╡ ╒ ╤ ╕ mode(VI.2)
^@N aNsi table (III.3) ║ ^@4 ╙ ╨ ╜ ╟ ╫ ╢ ╓ ╥ ╖ mode(VI.2)
^@O tbls on Other scrn (III.1)║ ^@5 ░ ▒ ▓ █ ■ ▄ ▌ ▐ ▀ mode(VI.3)
^@P Print control mode ║ ^@6 µ π σ δ ε Θ α ß τ mode(VI.3)
^@Q Quit buffer insert (V.3) ║ ^@7 - left; + up mode (VI.4)
^@R carriage Return mode (V.3)║ ^@8 normal alt <Grey +/-> (VI.4)
^@S Switch monitors ║ ^@9 - right; + down mode (VI.4)
^@T aTtribute table (III.3) ║ ^@0 @Keypad in standard mode
────────────────────────────────╨──────────────────────────────────
^@A,^@H subcommands: E(nter), P(rint), B(uffer), Arrows, <Esc>
^@P subcommands: <Up>,<Down>,<PgUp>,<PgDn>,S(witch),P(rint),
A(ll), various escape codes to printer
^@<Enter> subcommands: Arrows, <Enter> or <Ins> to tack down
Arrows, <PgUp>,<PgDn>,<Grey +>,<Grey ->
S(witch), C(opy), P(rint),
(c)U(t)=<Enter>=<Ins>
^@1-6: @numeric keypad, @<Grey +>, @<Grey ->
Chapter VIII:COMMAND SUMMARY Page 34
Chapter IX:CUSTOMIZING CTRLALT
IX.1 The Procedure
If you have access to the IBM or Microsoft Macro Assembler,
it is quite easy to customize CTRLALT. In the last section, we
will even give you directions for using DEBUG to change some of the
parameters if you do not have the Macro Assembler and you still
wish to change some of the more important parameters. If you wish
to customize CTRLALT and have the Macro Assembler, you should take
the source code file ctrlalt.asm and make a copy with a convenient
name, say mycalt.asm and do the following: first edit the file with
an ASCII file editor or word processor capable of producing pure
ASCII text. For example, PCWrite was used to edit the original
source file. Editing directions will be found in Sections 2-8 of
this chapter. After editing mycalt.asm you will need to issue the
sequence of commands:
masm mycalt;
link mycalt;
exe2bin mycalt mycalt.com
You might care to then erase mycalt.obj and mycalt.exe.
The source code begins with eight parts separated by a line
of dashes before the code itself which is separated from the
preliminaries by a line of #'s. Part 1 has the copyright and other
goodies. We will refer to places to change by the parts and lines
in the parts.
IX.2 Fundamental key combination
The last line of part 2 (line 23) says "call combo = 0CH".
This sets the Ctrl and Alt keys as the basic call up combination.
Change 0CH to xxH as indicated below for the key combination
indicated:
0CH Ctrl-Alt
06H Ctrl-LShift
0AH Alt-LShift
03H RShift-LShift
05H Ctrl-RShift
09H Alt-RShift
01H Right Shift alone
02H Left Shift alone
04H Ctrl alone
08H Alt alone
We believe that the first two possibilities are the preferred
one; you should save the Alt-LShift combination for the Alt-numeric
Chapter IX:CUSTOMIZING CTRLALT Page 35
Documentation for CTRLALT
keypad. Combination with the right shift are awkward. It is
possible to use only a single shift with letters to call up CTRLALT
but this will disable many key combinations needed by other
programs (but you could, if desperate dedicate one of your shifts
to CTRLALT but shouldn't unless you are a real hunt and peek
typist).
IX.3 Command Keys
The fourth section of the code begins:
;**** SCAN CODES FOR COMMAND KEYS FOLLOW:
commands db 1FH,2EH,25H,18H,1EH,19H,23H,43H
db 1CH,17H,10H,0CH,0DH,30H,12H
db 0BH,2,3,4,5,6,7
db 14H,13H,8,9,0AH
db 2FH,2CH,31H
These five line correspond to the basic command combinations:
^@S,^@C,^@K,^@O("oh"),^@A,^@P,^@H,^@<F9>
^@<Enter>,^@I,^@Q,^@<-/_>,^@<+/=>,^@B,^@E
^@0,^@1,^@2,^@3,^@4,^@5,^@6
^@T,^@R,^@7,^@8,^@9
^@V,^@Z,^@N
Suppose that you wish to change the callup for print control
mode from ^@P to ^@<PrtSc> which you might because you own a
program that already uses ^@P as its callup command. You search
for ^@P (the default in the second of the tables above) or
alternately get the scan code in HEX for <P> (using ^@T; the scan
code is 19) and search for it in the first table above. This tells
you that you need to change the sixth entry in line 1 of the
section "SCAN CODES FOR COMMAND KEYS FOLLOW:". You find the scan
code for <PrtSc/*> which is 37H and modify that entry in line one
in the source file mycalt.asm. It should now read:
commands db 1FH,2EH,25H,18H,1EH,37H,23H,43H
In making these changes keep the following in mind:
-You must use the hex scan codes; the basic manual lists scan
codes in hex but of course, it is easier to use ^@T
-Unless the scan code is less than 9, you must include an H
-Beware that the number key "n" has scan code "n+1"
IMPORTANT: If you want to disable a CTRLALT module, just change its
call up key code to 0FFH. (The 0 is important!). For example, if
you have a single monitor system, we recommend disabling the four
basic dual monitor commands so the first line should read:
Chapter IX:CUSTOMIZING CTRLALT Page 36
Documentation for CTRLALT
commands db 0FFH,0FFH,0FFH,0FFH,1EH,37H,23H,43H
There are also subcommands which can be changed. These occur in
sections 5-7 of the initial stuff. We leave it to the user to
puzzle out the meanings of the funny labels or to use the scan
codes except to note that with a singe monitor system you should
disable the <S> subcommands by changing the 1FH that appears on the
line in section 5 beginning "prtcoms" and the 1FH that appears on
the third line in section 6 to a 0FFH.
IX.4 Table Colors
If you don't like the color which we have picked for the
various tables, the first 7 lines in section 2 of the code deal
with those. The attributes for the borders of the table on the
color monitor (default of 19H=bright blue on blue) are called
"border", the attributes for the numbers and labels (default of
1FH=white on blue) are called "background" and the attributes for
the actual characters (default of 30H=black on cyan) are called
"mainattr". There are similar labels for the monochrome screen.
The scan code and aNsi labels have attributes (default 1B=bright
cyan on blue) have the name "attrlabel". We recommend the
following changes for the COMPAQ dual mode monitors:
mainattr = 0FH
attrlabel = 10H
IX.5 Table Locations
If you don't like the locations that we have chosen for the
tables, you can change them but not dynamically. That is you can
make a permanent change but if a table comes up in a bad place one
time there is nothing that you can do (at least for this version of
CTRLALT). The upper left hand corners of the tables are determined
by decimal numbers occurring in section 2 of the code with "begoff"
labels. These numbers MUST be even. If you want to locate the
corner in column y of row x this number should be 160x+2y with the
convention that rows are labelled 0-24 and columns 0-79. If you
make y too close to 79 the table will line wrap and look rather
funny. In addition, you need to be careful that positions of the
ASCII and Hex tables don't overlap or else ^@O will produce an
improper display.
IX.6 Copy Attributes
You can change the colors used when ^@C is invoked. The
comments in section 2 of the source code are clear on this account.
Chapter IX:CUSTOMIZING CTRLALT Page 37
Documentation for CTRLALT
IX.7 XOR Attributes
The cursor in the ASCII/Hex tables and in the ^@<Enter>/^@P
modes has colors set by "xoring" the present attributes with
attributes given in the source code. This is not the place to
explain that algorithm. We recommend the following changes for the
COMPAQ dual mode monitor:
colxor = 27H
ascolxor = 7FH
IX.8 Printer Escape Sequences
The eighth section of the source file lists the decimal ASCII
sequences sent to the printer by the various letter subcommands in
^@P. You can change these sequences if your printer does not use
IBM graphics control sequences. For example with the Epson LQ-1500
whose NLQ mode is called up with a distinct sequence to that used
by the Proprinter, you would replace the line
qual db 27,73,2,0FFH ;proprinter
with
qual db 27,126,1,0FFH ;LQ-1500
Please add "0FFH" to the end of the sequence listed in your
printer manual. That code is used for CTRLALT's internal purposes.
IX.9 Using DEBUG
The table below gives various addresses for using DEBUG to
change certain bytes in the com file:
Function ║ Byte(Hex; offset 100H) ║ Default(Hex)
───────────────────╫────────────────────────────╫─────────────────
CallUp ║ 2BE ║ 0C
^@S ║ 14F ║ 1F
^@C ║ 150 ║ 2E
^@K ║ 151 ║ 25
^@O ║ 152 ║ 18
^@P:Switch ║ 1B1 ║ 1F
^@<Enter>:S ║ 20D ║ 1F
Mainattr ║ 86D ║ 30
Attrlabel ║ 527,784,8DB,8F4 ║ 1B
Colxor ║ 36F ║ 2A
Ascolxor ║ 928 ║ 5F
The callup function is discussed in Section IX.2; the other
Chapter IX:CUSTOMIZING CTRLALT Page 38
Documentation for CTRLALT
functions involve things we recommend changing for the COMPAQ dual
mode monitor (disable the 6 monitor switches and follow the
recommendations in Sections IX.4 and IX.6 for attributes). Here is
a trial debug session modifying CTRLALT for the COMPAQ. It assumes
that you have copied ctrlalt.com to cacmq.com:
>debug cacmq.com
-e14f
xxxx:014F 1F.ff
-e150
xxxx:0150 2E.ff
-e151
xxxx:0151 25.ff
-e152
xxxx:0152 18.ff
-e1b1
xxxx:01B1 1F.ff
-e20d
xxxx:020D 1F.ff
-e86d
xxxx:086D 30.0f
-e527
xxxx:0527 1B.10
-e784
xxxx:0784 1B.10
-e8db
xxxx:08DB 1B.10
-e8f4
xxxx:08F4 1B.10
-e36f
xxxx:036F 2A.27
-e928
xxxx:0928 5F.7F
-w
Writing 0E36 bytes
-q
In the above, "xxxx" is an irrelevant four digit hex number.
The "e" command tells debug that you want a byte displayed and want
the option to change it. For example when you type in
"e928<Enter>" in response to the debug "-" prompt, debug responds
"xxxx:0928 5F."
telling you that 5F is currently there. You type in "7F<Enter>".
You could shorten things by just typing "e928 7F" in which case
debug would make the change and not report anything but we believe
the error checking of seeing the current byte displayed is useful.
Chapter IX:CUSTOMIZING CTRLALT Page 39