I hate keyboard templates. They catch on your sleeve, they clutter the
typing area, you can never find them unless you Scotch-tape them to the
keyboard, and then it's a pain in the lobotomy to swap the right one in
place when you need it. Nuts.
Unfortunately, for mere mortal nerds like myself they are necessary.
I remember about six function keys (out of the forty possible ones using
SHIFT, ALT and CTRL) for each of the programs I use regularly. That is
equally true for tools where I'm stuck with the key choices (like CodeView)
and for editors that allow me to remap the keyboard (like MicroEMACS).
I spend a lot of time in CodeView, so that's the template permanently
affixed to my keyboard. MicroEMACS has help screens available, so I can
get along without a template there.
WordPerfect, however, drives me bonkers. As a document preparation
system, its power and flexibility are essential... but they use every
damned one of those 40 function key combinations, and I can't for the
life of me remember which is which at 3 in the morning.
A couple of nights ago, I got fed up with hitting F3 F3, and hacked
together ShoFKeys. It's a pretty simple-minded program, but it works for
me. Here's what it does:
1) When run from the prompt, ShoFKeys intercepts the "keypress"
interrupt (INT 9), redirects it through a "hotkey" test and
a test for change in shift status (i.e., is CTRL or SHIFT or
ALT pressed?), determines what kind of video adapter the
system is using, and terminates leaving the meat of itself
in memory, but dormant.
2) When the user hits the "hotkey" combination CTRL-LEFTSHIFT-F,
ShoFKeys toggles itself into the ACTIVE state. Another
CTRL-LEFTSHIFT-F will toggle it INACTIVE again.
3) When ACTIVE, the routine tests the shift state at every keypress
or keyrelease. If that shift state has CHANGED since the last
time ShoFKeys displayed a set of function keys, it saves the new
shift state and selects one of four 160-byte blocks of data.
Each of these blocks contains 80 words of screen data (in
character-plus-video attribute format), or a full 80-character
row. ShoFKeys determines the last row on the display (always
#24 on a monochrome or CGA system, might be #24, #42 or some
other value on an EGA) and copies the 160-byte block directly
into the video memory.
When ShoFKeys is activated, the bottom line of the display shows 10
sets of function key mnemonics, each 8 characters wide. The first character
of each eight is highlighted, the other seven are not. (On my screen, the
first -- highlighted -- character is a digit 1, 2, 3... 0 to indicate the
function key number, and the other seven characters contain the name of
the function distilled into a clever 7-letter abbrvtn.) (The colors I use
on my EGA -- bright blue highlight, grey normal -- happen to work nicely
on a monochrome monitor. The "highlight" is high-intensity underlined,
the rest is low-intensity. However, if you prefer reverse video, blinking,
or strange color combos, you need only change two equates and re-assemble
Press any of the "shift" keys -- SHIFT, CTRL or ALT -- and the list
of "normal" function key mnemonics is replaced instantly with the appropriate
CTRL, SHIFT or ALT fkey list. Release ALT or whatever, and the unshifted
key mnemonics immediately re-appear.
Because ShoFKeys determines the number of rows on-screen at KEYPRESS
time rather than at LOAD time, you can change an EGA's characteristics and
the function keys will still appear at the bottom of the screen. This is real
handy if you like to edit in 43-line mode to see more of a document at one
ShoFKeys works real well with WordPerfect (and some other editors I
use like MicroEMACS) because you can specify the number of on-screen rows
that WordPerfect uses. Run WP/S and set the screen characteristics.
Normally, you would tell WordPerfect that you have a 25-line screen. Say
instead that your screen is 24 lines long. WordPerfect configures itself
to put your document on rows 0-22, places its status line on row 23, and
leaves row 24 free for your function-key mnemonics. I edit with a "42-line"
WordPerfect screen, using 0-41 for WordPerfect and leaving row 42 free for
my function keys.
Like I said, ShoFKeys is dumb. It does NOT preserve the previous
contents of the last row on-screen, and it is not smart enough to stay out
of the way of programs that use that last row. In particular, if you drop
back to DOS and forget to de-activate it (via CTRL-LEFTSHIFT-F), you'll
see copies of the function key lists rolling up-screen as your prompt
reaches the last row.
However, it's easy enough to turn the thing off when you're not using
it, it only takes up about 1100 bytes of RAM, doesn't add any noticeable
overhead to typing speed, and it's saved me a few trips to the manual shelf.
Some ideas for enhancements that I might tackle someday, if someone
doesn't beat me to it (hint, hint...) --
-- prevent multiple copies of ShoFKeys from being loaded.
-- load a text for function key list from a command-line filename
(should REPLACE previously resident text in the FIRST
copy of ShoFKeys in RAM)
-- Display mnemonics as a pop-up block, rather than a single
line at the bottom. This would both allow fuller mnemonic
texts and not require specially-configured software that
doesn't use the last row. It would require watching the
keystrokes more closely than the present program does, though,
to know when to save and restore "real" screen contents.
ShoFKeys is written in a "structured assembly language". The following files
are included in this archive:
read.me -- you're doing it
strux.exe -- preprocessor for "structured" assembly language.
STRUX SHOFKEYS generates SHOFKEYS.ASM (MASM compatible)
from the structured source SHOFKEYS.A
shofkeys. -- MAKE file for SHOFKEYS. I use NDMAKE, an excellent
shofkeys.a -- source code for SHOFKEYS. see STRUX above.
shofkeys.com -- runnable form.
fkeytext.c -- generates the appropriate DB statements for inclusion
in SHOFKEYS.A for a set of 4 text lines, such as
fkeytext.lst -- text (4 text lines) for WordPerfect function keys
-- Two useful programs NOT included in this archive (because they're not mine)
are NDMAKE and EXE2COM. They are not absolutely necessary --
you can assemble and link "by hand" and use EXE2BIN instead --
but they're real convenient and recommended. You'll probably
find them on the same BBS you got this from, or one nearby.
If you like the program, have fun with it.
If you feel like modifying it, go ahead. It's in the public domain.
If you don't like it at all, I don't promise to be crushed by your criticism.
4610 SW Lander
Seattle, WA 98116