TABLE OF CONTENTS keymap.library/AskKeyMapDefault keymap.library/MapANSI keymap.library/MapRawKey keymap.library/SetKeyMapDefault keymap.library/AskKeyMapDefault 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 compatability reasons. SEE ALSO devices/keymap.h, keymap.library/SetKeyMapDefault(), console.device ...KEYMAP functions keymap.library/MapANSI 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 <devices/inputevent.h> #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 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 *) *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 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
[Back to Amiga Developer Docs]