keymap.doc
AskKeyMapDefault()
MapANSI()
MapRawKey()
SetKeyMapDefault()
keymap.library/AskKeyMapDefault
NAME
AskKeyMapDefault -- Ask for a pointer to the current default
keymap. (V36)
SYNOPSIS
keyMap = AskKeyMapDefault()
struct KeyMap *AskKeyMapDefault( VOID );
FUNCTION
Return a pointer to the keymap used by the keymap library for
MapRawKey and MapANSI when a keymap is not specified.
RESULTS
keyMap - a pointer to a keyMap structure. This key map is
guaranteed to be permanently allocated: it will remain in
memory till the machine is reset.
BUGS
The keymap.h include file should be in the libraries/ or perhaps
resources/ directory, but is in the devices/ directory for
compatibility reasons.
SEE ALSO
devices/keymap.h, keymap.library/SetKeyMapDefault(),
console.device ...KEYMAP functions
keymap.library/MapANSI
NAME
MapANSI -- Encode an ANSI string into keycodes. (V36)
SYNOPSIS
actual = MapANSI( string, count, buffer, length, keyMap )
D0 A0 D0 A1 D1 A2
LONG MapANSI( STRPTR, LONG, STRPTR, LONG, struct KeyMap * );
FUNCTION
This console function converts an ANSI byte string to the
code/qualifier pairs of type IECLASS_RAWKEY that would
generate the string and places those pairs in a buffer.
A code/qualifier pair is a pair of bytes suitable for
putting in the ie_Code and low byte of ie_Qualifier,
and for subsequent events, shifted to the ie_Prev1DownCode/
ie_Prev1DownQual then ie_Prev2DownCode/ie_Prev2DownQual
pairs for any dead or double dead key mapping.
INPUTS
string - the ANSI string to convert.
count - the number of characters in the string.
buffer - a byte buffer large enough to hold all anticipated
code/qualifier pairs generated by this conversion.
length - maximum anticipation, i.e. the buffer size in bytes
divided by two (the size of the code/qualifier pair).
keyMap - a KeyMap structure pointer, or null if the default
key map is to be used.
RESULT
actual - the number of code/qualifier pairs in the buffer,
or negative to describe an error (see below).
EXAMPLE
...
#include
#define STIMSIZE 3 /* two dead keys, one key */
unsigned char rBuffer[STIMSIZE*2];
...
KeymapBase = (struct Library *) OpenLibrary("keymap.library", 0);
...
event.ie_NextEvent = 0;
event.ie_Class = IECLASS_RAWKEY;
event.ie_SubClass = 0;
/* prove keymap code completeness and MapANSI reversibility */
for (code = 0; code < 256; code++) {
buffer[0] = code;
actual = MapANSI(buffer, 1, rBuffer, STIMSIZE, 0);
r = rBuffer;
event.ie_Prev2DownCode = 0;
event.ie_Prev2DownQual = 0;
event.ie_Prev1DownCode = 0;
event.ie_Prev1DownQual = 0;
switch (actual) {
case -2:
printf("MapANSI internal error");
goto reportChar;
case -1:
printf("MapANSI overflow error");
goto reportChar;
case 0:
printf("MapANSI ungeneratable code");
goto reportChar;
case 3:
event.ie_Prev2DownCode = *r++;
event.ie_Prev2DownQual = *r++;
case 2:
event.ie_Prev1DownCode = *r++;
event.ie_Prev1DownQual = *r++;
case 1:
event.ie_Code = *r++;
event.ie_Qualifier = *r;
actual = MapRawKey(&event, buffer, BUFFERLEN, 0);
if ((actual != 1) || (buffer[0] != code)) {
printf("MapANSI not reversible");
for (i = 0; i < actual; i++)
ReportChar(buffer[i]);
printf(" from");
reportChar:
ReportChar(code);
printf("\n");
}
}
}
...
ERRORS
if actual is 0, a character in the string was not generatable
from the keyMap.
if actual is -1, a buffer overflow condition was detected.
if actual is -2, an internal error occurred (e.g. no memory)
SEE ALSO
devices/inputevent.h, devices/keymap.h
keymap.library/MapRawKey
NAME
MapRawKey -- Decode single raw key input event to an ANSI
string. (V36)
SYNOPSIS
actual = MapRawKey(event, buffer, length, keyMap)
D0 A0 A1 D1 A2
WORD MapRawKey( struct InputEvent *, STRPTR, WORD,
struct Keymap * );
FUNCTION
This console function converts input events of type
IECLASS_RAWKEY to ANSI bytes, based on the keyMap, and
places the result into the buffer.
INPUTS
event - an InputEvent structure pointer. The event list is
not traversed.
buffer - a byte buffer large enough to hold all anticipated
characters generated by this conversion.
length - maximum anticipation, i.e. the buffer size in bytes.
keyMap - a KeyMap structure pointer, or null if the default
key map is to be used.
RESULT
actual - the number of characters in the buffer, or -1 if
a buffer overflow was about to occur.
EXAMPLE
...
#define BUFFERLEN 80 /* length of longest expected mapping /*
char buffer[BUFFERLEN];
struct InputEvent ie;
...
KeymapBase = OpenLibrary("keymap.library", 0);
...
ie.ie_Class = IECLASS_RAWKEY;
ie.ie_SubClass = 0;
for (;;) {
WaitPort(window->UserPort);
while (im = (struct IntuiMessage *) GetMsg(window->UserPort)) {
switch (im->Class) {
case RAWKEY:
ie.ie_Code = im->Code;
ie.ie_Qualifier = im->Qualifier;
/* recover dead key codes & qualifiers */
ie.ie_EventAddress = (APTR *) *((ULONG *)im->IAddress);
actual = MapRawKey(&ie, buffer, BUFFERLEN, 0);
for (i = 0; i < actual; i++)
ReportChar(buffer[i]);
break;
...
}
...
}
}
ERRORS
if actual is -1, a buffer overflow condition was detected.
Not all of the characters in the buffer are valid.
SEE ALSO
devices/inputevent.h, devices/keymap.h
keymap.library/SetKeyMapDefault
NAME
SetKeyMapDefault -- Set the current default keymap. (V36)
SYNOPSIS
SetKeyMapDefault(keyMap)
void SetKeyMapDefault( struct KeyMap * );
FUNCTION
A pointer to key map specified is cached by the keymap library
for use by MapRawKey and MapANSI when a keymap is not specified.
INPUTS
keyMap - a pointer to a keyMap structure. This key map must be
permanently allocated: it must remain in memory till the
machine is reset. It is appropriate that this keyMap be a
node on the keymap.resource list.
BUGS
The keymap.h include file should be in the libraries/ or perhaps
resources/ directory, but is in the devices/ directory for
compatability reasons.
SEE ALSO
devices/keymap.h, keymap.library/AskKeyMapDefault(),
console.device ...KEYMAP functions
Converted on 22 Apr 2000 with RexxDoesAmigaGuide2HTML 2.1 by Michael Ranner.