home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magazyn Amiga Shareware Floppies
/
prenum1.dms
/
prenum1.adf
/
KeyMapEd
/
KeyMapEd.doc
< prev
next >
Wrap
Text File
|
1992-09-29
|
12KB
|
263 lines
Key Map Editor
Tim Friest
March, 1989
version 1.0
***************************************************************************
* The KeyMapEditor is copyright © 1989 to Tim Friest *
* *
* this program is FREE, you may copy it or distribute it as long as there *
* is no charge for the program (small handling fees are allowed if this *
* program is distributed on a disk with other PD/FreeWare/ShareWare *
* programs or on a charge BBS), the executable is unaltered and this *
* file accompanies it. *
* *
* please send any and all comments and/or bug reports to: *
* *
* USMail: Tim Friest bitnet: AXTBF@ALASKA.BITNET *
* 3861 Steller Dr *
* Anchorage, AK 99504 bix: TFRIEST *
* *
* Voice: (907) 337-5108 *
* *
* Compiled with Lattice C 5.02 *
* *
* tested on: B2000 rev 4.3, ROMs v1.3, NTSC, 3Mb RAM, AmigaDOS v1.3 *
* *
***************************************************************************
Introduction:
KeyMapEd allows you to modify the KeyMaps destributed by Commodore-Amiga
with AmigaDOS. These KeyMaps may then be installed on your system with
the SetMap command.
Basically, any key may have 'key macros'. Each key may have a seperate
value for pressing the key alone, with shift, with alt, with shift & alt,
with control, with control & shift, with control & alt, and with shift, alt,
& control (the latter is refered to as vanilla). Thus, each key may have up
to 8 seperate values when pressed. Further, keys may be capsable (use the
shift value when the caps lock key is on) and/or repeatable (key repeats
when held down). Finally, pressing the combination of a dead key with a
key that is deadable (modified by a dead key) allows the addition of accents
to the key value (for instance an 'alt-g' then 'a' will produce an 'à' or an
'a' with an accent grav above it).
Any program which is written correctly and uses the default keymap will
fully support all these features and fully support any changes you make
to your keymap. Unfortunately there are many programs which are not written
correctly and/or do not use the default keymap (hint! hint! developers!!!).
I believe that with this utility, it will be much easier to write a program
which uses a special keymap, and still fully support the keymap capablities,
then to hardcode what each key does within the progam.
Note: SetMap adds the keymap to a list in memory and if you do
SetMap usa1
SetMap f
SetMap usa1
SetMap will only read usa1 once! Further, usa1 and f will both
remain in memory until you reboot.
This impacts KeyMapEd since modifying a keymap that you've already
done a SetMap on, then trying to SetMap it again, will not update
the keymap in memory (it will just use the version it had already
loaded into memory). You would have to save the keymap out under
a different name from KeyMapEd to get SetMap to use the new version.
The name is hardcoded in the file, so it is recommended you do not
rename the file. The reason for this is that SetMap compares the
name within the file to the keymap that is requested, and if it is
the same, the version already in memory is used. Supose you edited
the usa1 keymap, saved it as usa1 and then renamed it to foo. Then
you changed your Startup-Sequence to do a SetMap foo instead of
SetMap usa1 (which is normal for A500/A2000s). The system still
thinks that the keymap it has loaded is usa1 (not foo) since that was
the name coded in the file... For this reason, doing a SetMap usa1
will not load in usa1, but use the one in memory (which is really foo).
Also, SetMap foo will load another copy of foo into memory since
foo doesn't match usa1.
Description:
There are four basic types of keys definable within a keymap.
NOP
A NOP key does nothing, and has no value.
Normal (NoQual)
A normal key may contain up to 4 single character values (plus a special
value for vanilla keys). This format uses the least amount of space, so
you should use this if possible (as apposed to the next two).
The four values can correspond to any combination of the key alone with
up to two of the shift/alt/ctrl combinations. If you want the key to be
vanilla, the ctrl key modifies the value of certain alphabetic keys plus
some others (@ for example), giving you 5 values for that key. For example
the 't' key contains the values 't', 'T', alt-t '\xfe', alt-T '\xde', and
ctrl-t '\x14' (note the ctrl-t value isn't actually stored, it is calculated).
String
A string key may contain all 8 possible values, and each value may be up
to 32 (as of AmigaDOS v1.3) characters in length. A good example of string
keys are the function keys, the arrow keys, or the application keys. These
keys will send a string whenever the key is pressed. This is basically what
will give you that 'key macro' capability. Any key which is not dead or
deadable may be string and output up to 8 different 32 character values
when pressed. Therefore, if you want alt-f10 to issue a 'list dh0:" command
you could simply code that into the keymap.
Dead
Dead keys output up to a single character in one of three ways. A key that
is dead (when you press it it modifies the value of the next key pressed), a
key that is deadable (modified by a dead key), and a key that is uneffected
by a dead key. If a key is dead, it contains the value of the accent that
it will use (for instance alt-k will produce an umlat with deadable keys).
If a key is deadable, seperate values will be stored for each possible accent
available on that key (there are currently five: accent accute (´), accent
grav (`), caret (^), circumflex (~), and umlat (¨) (I produced these by
pressing alt-f space, alt-g space, alt-h space, alt-j space, alt-k space with
the USA1 keymap)). Finally, if the key can not be modified by a dead key,
then simply place the value in the keymap (for instance an alt-a is not
modified by a dead key).
Using KeyMapEd:
KeyMapEd will prompt for a keymap if you do not specify one. It auto-
matically assumes the keymap is located in devs:keymaps so you must specify
the full pathname if it is not located there (SetMap requires the keymap
be in devs:keymaps so you might as well put them there anyway).
The KeyMapEd window is very similar to KeyToy and should display the current
value for each key with the current combination of shift/alt/ctrl/capslock.
Simply press the shift/alt/ctrl/capslock gadgets to change the display. The
keyboard displayed is that of an Amiga 2000. The keymap for an Amiga 500 or
1000 is exactly the same! The A2000 keyboard has a few additional keys
that the A1000 did not, and some of the keys have migrated, but other then
that, the keymap for ALL keys on the A1000 keyboard is exactly the same as
that for an A2000, there are just fewer values on the A2000 keyboard listed
as unused (i.e. there are still spaces left so an A3000 might very well have
even more keys then the A2000 and still be fully compatible with the A1000
(at least keymap wise)).
Clicking on a key gadget other then the shift, alt, ctrl, or capslock will
display the key editor window for that key.
The top row of gadgets define what type of key this is (NOP, Normal, String,
or Dead). The second row shows which of the shift/alt/ctrl keys effect this
key. The third row displays whether the key is capsable and/or repeatable.
Finally the rest of the window shows the values for each of the shift/alt/ctrl
combinations available for this key. The rest of the window will be different
depending on whether the key is NOP, Normal, String, or Dead.
Values for a key will be displayed in standard C string format. This means
that if the value is normally printable, the value should appear, otherwise
the hex value for the key will be displayed in the format '\x##'. A few
notable exceptions to this rule are certain of the common control codes have
special values '\r' for return, '\n' for newline, '\f' for formfeed, etc.
Finally, since the '\' is used as an introducer for the control sequences,
you must use '\\' to specify a single backslash.
Since up to 4 characters may be used to specify a single character value,
the string gadgets for a single value may hold up to 4 characters. Please
note that Normal keys and dead keys may contain 1 and only 1 value, and if
you place more characters in the string gadget then what will equate to
a single character, the string will be truncated to 1 character. Likewise,
String keys may only contain 32 characters, I have made the string gadget
size 127 to hold many control sequences. Again, the resultant string will
be truncated to 32 characters.
Switching back and forth betwean the types of keys (NOP, Normal, String, and
Dead) will produce strange results as strings are truncated to fit within
certain limits or altered as dead or deadable keys.
Selecting either the Use or Cancel gadgets will end the key edit mode and
either update the keymap or not depending.
Saving the KeyMap:
Once you have gotten the keymap as you like, you will want to save it.
Selecting the Save option from the Project Menu will give you a file requester
which you may use to save the keymap either to the same filename as read or
a new filename. Again the default directory is devs:keymaps, and you must
specify otherwise if you desire it to be elsewhere.
Note: The Key Map Editor uses the filename as the node name of the keymap,
thus if you save a keymap as USA1 the system will not differenciate
betwean the real (system) USA1 and your modified version, but if you
save it as NEWUSA1, the system will always see it as NEWUSA1 even if
you rename the file to USA1. This is important to remember because
of the way SetMap works (see note at top).
---------------------------------------------------------------------------
Changes to v0.99 since v0.91:
Fixed bug with interpretation of Vanilla keys for normal type
Added options in options menus
---------------------------------------------------------------------------
Changes to v1.0 since v0.99:
Center text within gadgets on keyboard display
Fixed return key (used Masked Boolean gadget so all of key
highlights when selected)
Modified CTRL and CapsLock keys so rapidly and repeatly clicking
them would not continually refresh the screen (this already worked
on Shift and Akt keys)
Fixed problem with key labels for NOP keys which causes GURUs
Fixed a problem with deadable keys which were not Vanilla
Fixed title/version number
---------------------------------------------------------------------------
Changes to v1.01 since v1.0:
Fixed a major bug when converting from one type of key to another
(for instance editing a normal key and changing it to a string
key caused a GURU)
Fixed a problem with the key label centering code (didn't update
properly).
---------------------------------------------------------------------------
Changes to v1.02 since v1.01:
Fixed the Return key to not overright the ] when edited
---------------------------------------------------------------------------
Known Bugs/Features: v1.02 March 9, 1989
String gadgets don't erase the last character when scrolled to the
right. Seems to be a bug with intuition???
Return key gadget erases part of ] key on refresh
----------------------------------------------------------------------------
Planned Inhancements: v1.02
see known bugs/features