home *** CD-ROM | disk | FTP | other *** search
-
- #include <exec/types.h>
- #include <libraries/commodities.h>
- #include <proto/keymap.h>
- #include <string.h>
-
- #include "code.h"
- #include "yak.h"
- #include "handlers.h"
- #include "gui.h"
- #include "keydef.h"
- #include "Keydef_window.h"
-
-
- UBYTE ParentWindowID; /* Identifier of the parent window to switch back */
-
-
- #define QUALIFIERS_NUMBER 13
- static const struct QualifierArrayType QualifierArray[] =
- {
- {IEQUALIFIER_CONTROL, "Control"},
- {IEQUALIFIER_LSHIFT, "LShift"},
- {IEQUALIFIER_RSHIFT, "RShift"},
- {IEQUALIFIER_CAPSLOCK, "CapsLock"},
- {IEQUALIFIER_LALT, "LAlt"},
- {IEQUALIFIER_RALT, "RAlt"},
- {IEQUALIFIER_LCOMMAND, "LCommand"},
- {IEQUALIFIER_RCOMMAND, "RCommand"},
- {IEQUALIFIER_LEFTBUTTON, "LeftButton"},
- {IEQUALIFIER_MIDBUTTON, "MidButton"},
- {IEQUALIFIER_RBUTTON, "RButton"},
- {IEQUALIFIER_REPEAT, "Repeat"},
- {IEQUALIFIER_NUMERICPAD, "NumericPad"}
- };
-
-
- #define SAMEQUALIFIERS_NUMBER 3
- static const struct QualifierArrayType SameQualifierArray[] =
- {
- {IXSYM_SHIFTMASK, "Shift"},
- {IXSYM_CAPSMASK, "Caps"},
- {IXSYM_ALTMASK, "Alt"}
- };
-
-
- #define QUALIFIERSPAD_NUMBER 9
- static const struct QualifierPadArrayType QualifierPadArray[] =
- {
- {0x60, IEQUALIFIER_LSHIFT},
- {0x61, IEQUALIFIER_RSHIFT},
- {0x62, IEQUALIFIER_CAPSLOCK}, /* CapsLock down */
- {0xe2, IEQUALIFIER_CAPSLOCK}, /* CapsLock up */
- {0x63, IEQUALIFIER_CONTROL},
- {0x64, IEQUALIFIER_LALT},
- {0x65, IEQUALIFIER_RALT},
- {0x66, IEQUALIFIER_LCOMMAND},
- {0x67, IEQUALIFIER_RCOMMAND}
- };
-
-
- #define CODES_NUMBER 31
- static const struct CodeArrayType CodeArray[] =
- {
- {0x38, "Comma"},
- {0x40, "Space"},
- {0x41, "BackSpace"},
- {0x42, "Tab"},
- {0x43, "Enter"},
- {0x44, "Return"},
- {0x45, "Esc"},
- {0x46, "Del"},
- {0x47, "Insert"},
- {0x48, "Page_Up"},
- {0x49, "Page_Down"},
- {0x4C, "Up"},
- {0x4D, "Down"},
- {0x4E, "Right"},
- {0x4F, "Left"},
- {0x50, "F1"},
- {0x51, "F2"},
- {0x52, "F3"},
- {0x53, "F4"},
- {0x54, "F5"},
- {0x55, "F6"},
- {0x56, "F7"},
- {0x57, "F8"},
- {0x58, "F9"},
- {0x59, "F10"},
- {0x5F, "Help"},
- {0x68, "Mouse_LeftPress"},
- {0x69, "Mouse_RightPress"},
- {0x6A, "Mouse_MiddlePress"},
- {0x70, "Home"},
- {0x71, "End"}
- };
-
-
- const STRPTR ClassArray[] =
- {
- "RawKey",
- "RawMouse",
- "DiskInserted",
- "DiskRemoved"
- };
-
-
- const STRPTR StrokeArray[] =
- {
- "",
- " upstroke",
- " -upstroke"
- };
-
-
-
-
- static __regargs void
- ConvertQualifiers(UWORD qual, UWORD iqual, UWORD squal, char *qualstr)
- {
- UWORD i;
-
- *qualstr = '\0';
-
- for (i=0; i<SAMEQUALIFIERS_NUMBER; i++)
- {
- if ((qual & squal & SameQualifierArray[i].qat_ID) == SameQualifierArray[i].qat_ID)
- {
- *qualstr++ = ' ';
- qualstr = stpcpy(qualstr, SameQualifierArray[i].qat_Str);
- }
- if ((iqual & squal & SameQualifierArray[i].qat_ID) == SameQualifierArray[i].qat_ID)
- {
- *qualstr++ = ' ';
- *qualstr++ = '-';
- qualstr = stpcpy(qualstr, SameQualifierArray[i].qat_Str);
- }
-
- }
-
- qual &= ~squal;
- iqual &= ~squal;
- for (i=0; i<QUALIFIERS_NUMBER; i++)
- {
- if (qual & QualifierArray[i].qat_ID)
- {
- *qualstr++ = ' ';
- qualstr = stpcpy(qualstr, QualifierArray[i].qat_Str);
- }
- if (iqual & QualifierArray[i].qat_ID)
- {
- *qualstr++ = ' ';
- *qualstr++ = '-';
- qualstr = stpcpy(qualstr, QualifierArray[i].qat_Str);
- }
- }
- }
-
-
- static __regargs BOOL
- ConvertCode(UWORD code, char *codestr)
- {
- *codestr = '\0';
-
- if (code != NO_IECODE)
- {
- struct InputEvent ievent;
- UWORD i;
-
- for (i=0; i<CODES_NUMBER; i++)
- {
- if (code == CodeArray[i].cat_Code)
- {
- codestr[0] = ' ';
- strcpy(codestr+1, CodeArray[i].cat_Str);
- return TRUE;
- }
-
- }
-
- ievent.ie_Class = IECLASS_RAWKEY;
- ievent.ie_Code = code;
- ievent.ie_Qualifier = NO_IEQUALIFIER;
- ievent.ie_Prev1DownCode = ievent.ie_Prev1DownQual = NO_IEQUALIFIER;
- ievent.ie_Prev2DownCode = ievent.ie_Prev2DownQual = NO_IEQUALIFIER;
-
- if((MapRawKey(&ievent, codestr+1, 1, NULL) == 1) &&
- (codestr[1] != '-')) /* forbidden */
- {
- codestr[0] = ' ';
- codestr[2] = '\0';
- return TRUE;
- }
- }
-
- return FALSE;
- }
-
-
-
-
-
-
- __regargs BOOL
- BuildKeyDef(YakKeyDef *ykd, STRPTR desc)
- {
- BOOL ret;
- UBYTE codestr[20], qualstr[110];
-
- ConvertQualifiers(ykd->ykd_Qual, ykd->ykd_IQual, ykd->ykd_SQual, qualstr);
-
- switch (ykd->ykd_Class)
- {
- case HKCLASS_RAWKEY:
- case HKCLASS_RAWMOUSE:
- ret = ConvertCode(ykd->ykd_Code, codestr);
- break;
-
- case HKCLASS_DISKINSERTED:
- case HKCLASS_DISKREMOVED:
- codestr[0]='\0';
- ret = TRUE;
- break;
- }
-
- stpcpy(desc, ClassArray[ykd->ykd_Class]);
- strcat(desc, qualstr);
- strcat(desc, StrokeArray[ykd->ykd_Stroke]);
- strcat(desc, codestr);
-
- return ret;
-
- }
-
-
-
- __regargs LONG
- ParseKeyDef(STRPTR desc, YakKeyDef *ykd)
- {
- IX ix;
- LONG ret;
-
-
- if (!(ret=CompatibleParseIX(desc, &ix)))
- {
- /* Class ? */
- if (ParentWindowID != MCYCLING_WINDOW)
- {
- switch(ix.ix_Class)
- {
- case IECLASS_RAWKEY:
- ykd->ykd_Class = HKCLASS_RAWKEY;
- break;
- case IECLASS_RAWMOUSE:
- ykd->ykd_Class = HKCLASS_RAWMOUSE;
- break;
- case IECLASS_DISKINSERTED:
- ykd->ykd_Class = HKCLASS_DISKINSERTED;
- break;
- case IECLASS_DISKREMOVED:
- ykd->ykd_Class = HKCLASS_DISKREMOVED;
- break;
- default:
- return -1;
- }
- }
- else
- {
- if (ix.ix_Class == IECLASS_RAWMOUSE)
- ykd->ykd_Class = HKCLASS_RAWMOUSE;
- else
- return -1;
- }
-
- /* Qualifier ? */
- ykd->ykd_Qual = ix.ix_Qualifier;
- ykd->ykd_IQual = ~ix.ix_QualMask;
-
- ykd->ykd_SQual = NO_IEQUALIFIER;
- if (ix.ix_QualSame & IXSYM_SHIFT) ykd->ykd_SQual |= IXSYM_SHIFTMASK;
- if (ix.ix_QualSame & IXSYM_CAPS) ykd->ykd_SQual |= IXSYM_CAPSMASK;
- if (ix.ix_QualSame & IXSYM_ALT) ykd->ykd_SQual |= IXSYM_ALTMASK;
-
- /* Stroke ? */
- if (ix.ix_Code & IECODE_UP_PREFIX)
- {
- ykd->ykd_Stroke = HKSTROKE_UP;
- }
- else
- {
- if (~ix.ix_CodeMask & IECODE_UP_PREFIX)
- {
- ykd->ykd_Stroke = HKSTROKE_DOWN_UP;
- }
- else
- {
- ykd->ykd_Stroke = HKSTROKE_DOWN;
- }
- }
-
- /* Code ? */
- if (!ix.ix_Code && (ix.ix_Class == IECLASS_RAWMOUSE))
- {
- ykd->ykd_Code = NO_IECODE;
- }
- else
- {
- ykd->ykd_Code = ix.ix_Code & ~IECODE_UP_PREFIX;
- }
- }
- else
- {
- if (ret == -2) /* NULL description */
- {
- if (ParentWindowID == MCYCLING_WINDOW)
- {
- ykd->ykd_Class = HKCLASS_RAWMOUSE;
- ykd->ykd_Qual = ykd->ykd_IQual = ykd->ykd_SQual = NO_IEQUALIFIER;
- ykd->ykd_Stroke = HKSTROKE_DOWN;
- ykd->ykd_Code = NO_IECODE;
- }
- else
- {
- ykd->ykd_Class = HKCLASS_RAWKEY;
- ykd->ykd_Qual = ykd->ykd_IQual = ykd->ykd_SQual = NO_IEQUALIFIER;
- ykd->ykd_Stroke = HKSTROKE_DOWN;
- ykd->ykd_Code = NO_IECODE;
- }
- }
- }
-
- return ret;
- }
-
- __regargs UWORD
- IsQualifierPad(UWORD code)
- {
- UWORD i;
-
- for (i=0; i<QUALIFIERSPAD_NUMBER; i++)
- if (QualifierPadArray[i].qpat_Code == code)
- return QualifierPadArray[i].qpat_Qualifier;
-
- return NO_IEQUALIFIER;
- }
-