home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
100-199
/
ff193.lzh
/
KeyMapEd
/
Source
/
KME_ProcKeyReq.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-03-13
|
75KB
|
2,156 lines
/*
* Key Map Editor ver 1.0
* Process Key Requester
*
* parameter: KeyCode - Key Code of key to edit
* returns: Success - TRUE if key was changed, FALSE if not
*
* by: Tim Friest
* on: January 8, 1989
*/
#include "KME_Includes.h"
#include <ctype.h>
#include "KME_Protos.h"
#include "KME_Defs.h"
#include "KME_KeyReq.h"
#include "KME_Globals.h"
struct KeyNode {
UBYTE Type;
int Capsable, Repeatable;
UBYTE AloneOpt;
UBYTE AloneLen;
char Alone[33];
UBYTE ShiftOpt;
UBYTE ShiftLen;
char Shift[33];
UBYTE AltOpt;
UBYTE AltLen;
char Alt[33];
UBYTE ShiftAltOpt;
UBYTE ShiftAltLen;
char ShiftAlt[33];
UBYTE CtrlOpt;
UBYTE CtrlLen;
char Ctrl[33];
UBYTE CtrlShiftOpt;
UBYTE CtrlShiftLen;
char CtrlShift[33];
UBYTE CtrlAltOpt;
UBYTE CtrlAltLen;
char CtrlAlt[33];
UBYTE VanillaOpt;
UBYTE VanillaLen;
char Vanilla[33];
};
extern void InitKeyReq(struct KeyNode *);
extern struct KeyNode *MakeKeyNode(USHORT);
extern int ChangeKeyReq(struct KeyNode *, UBYTE);
extern void ExcludeAccGads(struct Gadget *, struct Gadget *);
extern void UpdateKey(struct KeyNode *);
extern void UpdateKeyMap(struct KeyNode *, USHORT);
extern int ExpandCtrl(unsigned char *, unsigned char *, int);
extern int CollapseCtrl(char *, char *, int);
int ProcKeyReq(KeyCode)
USHORT KeyCode;
{
struct KeyNode *Key;
ULONG KeyWind_sf = 0;
static SHORT KeyReqWindx = KRWLEFTEDGE;
static SHORT KeyReqWindy = KRWTOPEDGE;
struct IntuiMessage *Message;
ULONG Class;
USHORT Code;
struct Gadget *Gad;
int Done = FALSE;
int Use = FALSE;
if ((Key = MakeKeyNode(KeyCode)) == NULL) {
CloseWindow(KeyReqWindow);
return(FALSE);
}
InitKeyReq(Key);
NewKeyReqWindow.LeftEdge = KeyReqWindx;
NewKeyReqWindow.TopEdge = KeyReqWindy;
if ((KeyReqWindow = OpenWindow(&NewKeyReqWindow)) == NULL)
return(FALSE);
KeyWind_sf = (1<<KeyReqWindow->UserPort->mp_SigBit);
if (CheckResource(RF_Font))
SetFont(KeyReqWindow->RPort, TopazFont);
Done = !Request(&KRRequester, KeyReqWindow);
while (!Done) {
while (Wait(KeyWind_sf|Wind_sf) == Wind_sf) {
while ((Message = (struct IntuiMessage *)GetMsg(KeyMapEdWindow->UserPort)) != NULL)
ReplyMsg((struct Message *)Message);
DisplayBeep(KeyReqWindow->WScreen);
} /* while */
while ((!Done) && ((Message = (struct IntuiMessage *)GetMsg(KeyReqWindow->UserPort)) != NULL)) {
Class = Message->Class;
Code = Message->Code;
Gad = (struct Gadget *)Message->IAddress;
ReplyMsg((struct Message *)Message);
switch (Class) {
case REQSET:
break;
case GADGETUP:
switch (Gad->GadgetID) {
case 0xFF: /* Use changes */
EndRequest(&KRRequester, KeyReqWindow);
Done = TRUE;
Use = TRUE;
break;
case 0xFE: /* Cancel any changes */
EndRequest(&KRRequester, KeyReqWindow);
Done = TRUE;
break;
case 0x00: /* switch type to NOP */
if (Gad->Flags & SELECTED)
Done = !ChangeKeyReq(Key, KCF_NOP);
else {
Gad->Flags |= SELECTED;
RefreshGList(Gad, KeyReqWindow, &KRRequester, 1);
}
break;
case 0x01: /* switch type to NoQual */
if (Gad->Flags & SELECTED)
Done = !ChangeKeyReq(Key, KC_NOQUAL);
else {
Gad->Flags |= SELECTED;
RefreshGList(Gad, KeyReqWindow, &KRRequester, 1);
}
break;
case 0x02: /* switch type to String */
if (Gad->Flags & SELECTED)
Done = !ChangeKeyReq(Key, KCF_STRING);
else {
Gad->Flags |= SELECTED;
RefreshGList(Gad, KeyReqWindow, &KRRequester, 1);
}
break;
case 0x03: /* switch type to Dead */
if (Gad->Flags & SELECTED)
Done = !ChangeKeyReq(Key, KCF_DEAD);
else {
Gad->Flags |= SELECTED;
RefreshGList(Gad, KeyReqWindow, &KRRequester, 1);
}
break;
case 0x10: /* toggle Shift type */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->Type |= KCF_SHIFT;
else
Key->Type &= ~KCF_SHIFT;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x11: /* toggle Alt type */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->Type |= KCF_ALT;
else
Key->Type &= ~KCF_ALT;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x12: /* toggle Ctrl type */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->Type |= KCF_CONTROL;
else
Key->Type &= ~KCF_CONTROL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x13: /* toggle Capsable */
if (Gad->Flags & SELECTED)
Key->Capsable = TRUE;
else
Key->Capsable = FALSE;
break;
case 0x14: /* toggle Repeatable */
if (Gad->Flags & SELECTED)
Key->Repeatable = TRUE;
else
Key->Repeatable = FALSE;
break;
case 0x40: /* Alone Mod gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->AloneOpt = DPF_MOD;
else
Key->AloneOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x41: /* Alone Dead gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->AloneOpt = DPF_DEAD;
else
Key->AloneOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x49: /* Alone Acc1 Gadget */
case 0x4A: /* Alone Acc2 Gadget */
case 0x4B: /* Alone Acc3 Gadget */
case 0x4C: /* Alone Acc4 Gadget */
case 0x4D: /* Alone Acc5 Gadget */
ExcludeAccGads(&KRDAloneAcc1Gadget, Gad);
break;
case 0x50: /* Shift Mod gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->ShiftOpt = DPF_MOD;
else
Key->ShiftOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x51: /* Shift Dead gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->ShiftOpt = DPF_DEAD;
else
Key->ShiftOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x59: /* Shift Acc1 Gadget */
case 0x5A: /* Shift Acc2 Gadget */
case 0x5B: /* Shift Acc3 Gadget */
case 0x5C: /* Shift Acc4 Gadget */
case 0x5D: /* Shift Acc5 Gadget */
ExcludeAccGads(&KRDShiftAcc1Gadget, Gad);
break;
case 0x60: /* Alt Mod gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->AltOpt = DPF_MOD;
else
Key->AltOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x61: /* Alt Dead gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->AltOpt = DPF_DEAD;
else
Key->AltOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x69: /* Alt Acc1 Gadget */
case 0x6A: /* Alt Acc2 Gadget */
case 0x6B: /* Alt Acc3 Gadget */
case 0x6C: /* Alt Acc4 Gadget */
case 0x6D: /* Alt Acc5 Gadget */
ExcludeAccGads(&KRDAltAcc1Gadget, Gad);
break;
case 0x70: /* ShiftAlt Mod gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->ShiftAltOpt = DPF_MOD;
else
Key->ShiftAltOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x71: /* ShiftAlt Dead gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->ShiftAltOpt = DPF_DEAD;
else
Key->ShiftAltOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x79: /* ShiftAlt Acc1 Gadget */
case 0x7A: /* ShiftAlt Acc2 Gadget */
case 0x7B: /* ShiftAlt Acc3 Gadget */
case 0x7C: /* ShiftAlt Acc4 Gadget */
case 0x7D: /* ShiftAlt Acc5 Gadget */
ExcludeAccGads(&KRDShiftAltAcc1Gadget, Gad);
break;
case 0x80: /* Ctrl Mod gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->CtrlOpt = DPF_MOD;
else
Key->CtrlOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x81: /* Ctrl Dead gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->CtrlOpt = DPF_DEAD;
else
Key->CtrlOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x89: /* Ctrl Acc1 Gadget */
case 0x8A: /* Ctrl Acc2 Gadget */
case 0x8B: /* Ctrl Acc3 Gadget */
case 0x8C: /* Ctrl Acc4 Gadget */
case 0x8D: /* Ctrl Acc5 Gadget */
ExcludeAccGads(&KRDCtrlAcc1Gadget, Gad);
break;
case 0x90: /* CtrlShift Mod gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->CtrlShiftOpt = DPF_MOD;
else
Key->CtrlShiftOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x91: /* CtrlShift Dead gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->CtrlShiftOpt = DPF_DEAD;
else
Key->CtrlShiftOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0x99: /* CtrlShift Acc1 Gadget */
case 0x9A: /* CtrlShift Acc2 Gadget */
case 0x9B: /* CtrlShift Acc3 Gadget */
case 0x9C: /* CtrlShift Acc4 Gadget */
case 0x9D: /* CtrlShift Acc5 Gadget */
ExcludeAccGads(&KRDCtrlShiftAcc1Gadget, Gad);
break;
case 0xA0: /* CtrlAlt Mod gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->CtrlAltOpt = DPF_MOD;
else
Key->CtrlAltOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0xA1: /* CtrlAlt Dead gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->CtrlAltOpt = DPF_DEAD;
else
Key->CtrlAltOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0xA9: /* CtrlAlt Acc1 Gadget */
case 0xAA: /* CtrlAlt Acc2 Gadget */
case 0xAB: /* CtrlAlt Acc3 Gadget */
case 0xAC: /* CtrlAlt Acc4 Gadget */
case 0xAD: /* CtrlAlt Acc5 Gadget */
ExcludeAccGads(&KRDCtrlAltAcc1Gadget, Gad);
break;
case 0xB0: /* Vanilla Mod gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->VanillaOpt = DPF_MOD;
else
Key->VanillaOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0xB1: /* Vanilla Dead gadget */
UpdateKey(Key);
if (Gad->Flags & SELECTED)
Key->VanillaOpt = DPF_DEAD;
else
Key->VanillaOpt = KC_NOQUAL;
InitKeyReq(Key);
Done = !Request(&KRRequester, KeyReqWindow);
break;
case 0xB9: /* Vanilla Acc1 Gadget */
case 0xBA: /* Vanilla Acc2 Gadget */
case 0xBB: /* Vanilla Acc3 Gadget */
case 0xBC: /* Vanilla Acc4 Gadget */
case 0xBD: /* Vanilla Acc5 Gadget */
ExcludeAccGads(&KRDVanillaAcc1Gadget, Gad);
break;
} /* switch */
} /* switch */
} /* while */
} /* while */
KeyReqWindx = KeyReqWindow->LeftEdge;
KeyReqWindy = KeyReqWindow->TopEdge;
CloseWindow(KeyReqWindow);
if (Use) {
UpdateKey(Key);
UpdateKeyMap(Key, KeyCode);
SetFlag(SF_Modified);
}
FreeMem(Key, sizeof(struct KeyNode));
return(Use);
}
/*
* Change Key Requester
*/
int ChangeKeyReq(Key, Type)
struct KeyNode *Key;
UBYTE Type;
{
EndRequest(&KRRequester, KeyReqWindow);
UpdateKey(Key);
Key->Type &= ~(KCF_STRING|KCF_DEAD|KCF_NOP);
Key->Type |= Type;
InitKeyReq(Key);
return(Request(&KRRequester, KeyReqWindow));
}
/*
* Exclude Accent Gadgets
*/
void ExcludeAccGads(AccentList, AccGad)
struct Gadget *AccentList;
struct Gadget *AccGad;
{
int pos, count;
struct Gadget *tempgad;
pos = RemoveGList(KeyReqWindow, AccentList, 5);
if (AccGad->Flags & SELECTED)
for (tempgad = AccentList, count = 0; (count < 5) && (tempgad != NULL); tempgad = tempgad->NextGadget, count++)
tempgad->Flags &= ~SELECTED;
AccGad->Flags |= SELECTED;
AddGList(KeyReqWindow, AccentList, pos, 5, &KRRequester);
RefreshGList(AccentList, KeyReqWindow, &KRRequester, 5);
}
/*
* Make the Key Node
*/
struct KeyNode *MakeKeyNode(KeyCode)
USHORT KeyCode;
{
struct KeyNode *Key;
struct HalfKeyMap *HalfKeyMap;
UBYTE *KeyMapVal;
UBYTE *KeyMapPtr;
if ((Key = (struct KeyNode *)AllocMem(sizeof(struct KeyNode), MEMF_CLEAR)) == NULL)
return(Key);
if (KeyCode < 0x40)
HalfKeyMap = (struct HalfKeyMap *)&KeyMapNode->kn_KeyMap;
else {
HalfKeyMap = (struct HalfKeyMap *)&KeyMapNode->kn_KeyMap.km_HiKeyMapTypes;
KeyCode -= 0x40;
}
Key->Type = HalfKeyMap->KeyMapTypes[KeyCode];
Key->Capsable = (HalfKeyMap->Capsable[KeyCode/8] & (1<<(KeyCode % 8)));
Key->Repeatable = (HalfKeyMap->Repeatable[KeyCode/8] & (1<<(KeyCode % 8)));
KeyMapVal = (UBYTE *)&HalfKeyMap->KeyMap[KeyCode];
KeyMapPtr = (UBYTE *)HalfKeyMap->KeyMap[KeyCode];
switch (Key->Type & (KCF_STRING|KCF_DEAD|KCF_NOP)) {
case KC_NOQUAL:
switch (Key->Type & KC_VANILLA) {
case KC_NOQUAL:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapVal[3];
break;
case KCF_SHIFT:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapVal[3];
Key->ShiftLen = 1;
Key->Shift[0] = KeyMapVal[2];
break;
case KCF_ALT:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapVal[3];
Key->AltLen = 1;
Key->Alt[0] = KeyMapVal[2];
break;
case KCF_SHIFT|KCF_ALT:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapVal[3];
Key->ShiftLen = 1;
Key->Shift[0] = KeyMapVal[2];
Key->AltLen = 1;
Key->Alt[0] = KeyMapVal[1];
Key->ShiftAltLen = 1;
Key->ShiftAlt[0] = KeyMapVal[0];;
break;
case KCF_CONTROL:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapVal[3];
Key->CtrlLen = 1;
Key->Ctrl[0] = KeyMapVal[2];
break;
case KCF_CONTROL|KCF_SHIFT:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapVal[3];
Key->ShiftLen = 1;
Key->Shift[0] = KeyMapVal[2];
Key->CtrlLen = 1;
Key->Ctrl[0] = KeyMapVal[1];
Key->CtrlShiftLen = 1;
Key->CtrlShift[0] = KeyMapVal[0];
break;
case KCF_CONTROL|KCF_ALT:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapVal[3];
Key->AltLen = 1;
Key->Alt[0] = KeyMapVal[2];
Key->CtrlLen = 1;
Key->Ctrl[0] = KeyMapVal[1];
Key->CtrlAltLen = 1;
Key->CtrlAlt[0] = KeyMapVal[0];
break;
case KC_VANILLA:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapVal[3];
Key->ShiftLen = 1;
Key->Shift[0] = KeyMapVal[2];
Key->AltLen = 1;
Key->Alt[0] = KeyMapVal[1];
Key->ShiftAltLen = 1;
Key->ShiftAlt[0] = KeyMapVal[0];
} /* switch */
break;
case KCF_STRING:
switch (Key->Type & KC_VANILLA) {
case KC_NOQUAL:
Key->AloneLen = KeyMapPtr[0];
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), Key->AloneLen);
break;
case KCF_SHIFT:
Key->AloneLen = KeyMapPtr[0];
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), Key->AloneLen);
Key->ShiftLen = KeyMapPtr[2];
memcpy(Key->Shift, (KeyMapPtr+KeyMapPtr[3]), Key->ShiftLen);
break;
case KCF_ALT:
Key->AloneLen = KeyMapPtr[0];
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), Key->AloneLen);
Key->AltLen = KeyMapPtr[2];
memcpy(Key->Alt, (KeyMapPtr+KeyMapPtr[3]), Key->AltLen);
break;
case KCF_SHIFT|KCF_ALT:
Key->AloneLen = KeyMapPtr[0];
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), Key->AloneLen);
Key->ShiftLen = KeyMapPtr[2];
memcpy(Key->Shift, (KeyMapPtr+KeyMapPtr[3]), Key->ShiftLen);
Key->AltLen = KeyMapPtr[4];
memcpy(Key->Alt, (KeyMapPtr+KeyMapPtr[5]), Key->AltLen);
Key->ShiftAltLen = KeyMapPtr[6];
memcpy(Key->ShiftAlt, (KeyMapPtr+KeyMapPtr[7]), Key->ShiftAltLen);
break;
case KCF_CONTROL:
Key->AloneLen = KeyMapPtr[0];
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), Key->AloneLen);
Key->CtrlLen = KeyMapPtr[2];
memcpy(Key->Ctrl, (KeyMapPtr+KeyMapPtr[3]), Key->CtrlLen);
break;
case KCF_CONTROL|KCF_SHIFT:
Key->AloneLen = KeyMapPtr[0];
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), Key->AloneLen);
Key->ShiftLen = KeyMapPtr[2];
memcpy(Key->Shift, (KeyMapPtr+KeyMapPtr[3]), Key->ShiftLen);
Key->CtrlLen = KeyMapPtr[4];
memcpy(Key->Ctrl, (KeyMapPtr+KeyMapPtr[5]), Key->CtrlLen);
Key->CtrlShiftLen = KeyMapPtr[6];
memcpy(Key->CtrlShift, (KeyMapPtr+KeyMapPtr[7]), Key->CtrlShiftLen);
break;
case KCF_CONTROL|KCF_ALT:
Key->AloneLen = KeyMapPtr[0];
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), Key->AloneLen);
Key->AltLen = KeyMapPtr[2];
memcpy(Key->Alt, (KeyMapPtr+KeyMapPtr[3]), Key->AltLen);
Key->CtrlLen = KeyMapPtr[4];
memcpy(Key->Ctrl, (KeyMapPtr+KeyMapPtr[5]), Key->CtrlLen);
Key->CtrlAltLen = KeyMapPtr[6];
memcpy(Key->CtrlAlt, (KeyMapPtr+KeyMapPtr[7]), Key->CtrlAltLen);
break;
case KC_VANILLA:
Key->AloneLen = KeyMapPtr[0];
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), Key->AloneLen);
Key->ShiftLen = KeyMapPtr[2];
memcpy(Key->Shift, (KeyMapPtr+KeyMapPtr[3]), Key->ShiftLen);
Key->AltLen = KeyMapPtr[4];
memcpy(Key->Alt, (KeyMapPtr+KeyMapPtr[5]), Key->AltLen);
Key->ShiftAltLen = KeyMapPtr[6];
memcpy(Key->ShiftAlt, (KeyMapPtr+KeyMapPtr[7]), Key->ShiftAltLen);
Key->CtrlLen = KeyMapPtr[8];
memcpy(Key->Ctrl, (KeyMapPtr+KeyMapPtr[9]), Key->CtrlLen);
Key->CtrlShiftLen = KeyMapPtr[10];
memcpy(Key->CtrlShift, (KeyMapPtr+KeyMapPtr[11]), Key->CtrlShiftLen);
Key->CtrlAltLen = KeyMapPtr[12];
memcpy(Key->CtrlAlt, (KeyMapPtr+KeyMapPtr[13]), Key->CtrlAltLen);
Key->VanillaLen = KeyMapPtr[14];
memcpy(Key->Vanilla, (KeyMapPtr+KeyMapPtr[15]), Key->VanillaLen);
} /* switch */
break;
case KCF_DEAD:
switch (Key->Type & KC_VANILLA) {
case KC_NOQUAL:
Key->AloneOpt = KeyMapPtr[0];
switch (Key->AloneOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapPtr[1];
break;
case DPF_MOD:
Key->AloneLen = 6;
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), 6);
} /* switch */
break;
case KCF_SHIFT:
Key->AloneOpt = KeyMapPtr[0];
switch (Key->AloneOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapPtr[1];
break;
case DPF_MOD:
Key->AloneLen = 6;
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), 6);
} /* switch */
Key->ShiftOpt = KeyMapPtr[2];
switch (Key->ShiftOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->ShiftLen = 1;
Key->Shift[0] = KeyMapPtr[3];
break;
case DPF_MOD:
Key->ShiftLen = 6;
memcpy(Key->Shift, (KeyMapPtr+KeyMapPtr[3]), 6);
} /* switch */
break;
case KCF_ALT:
Key->AloneOpt = KeyMapPtr[0];
switch (Key->AloneOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapPtr[1];
break;
case DPF_MOD:
Key->AloneLen = 6;
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), 6);
} /* switch */
Key->AltOpt = KeyMapPtr[2];
switch (Key->AltOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AltLen = 1;
Key->Alt[0] = KeyMapPtr[3];
break;
case DPF_MOD:
Key->AltLen = 6;
memcpy(Key->Alt, (KeyMapPtr+KeyMapPtr[3]), 6);
} /* switch */
break;
case KCF_SHIFT|KCF_ALT:
Key->AloneOpt = KeyMapPtr[0];
switch (Key->AloneOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapPtr[1];
break;
case DPF_MOD:
Key->AloneLen = 6;
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), 6);
} /* switch */
Key->ShiftOpt = KeyMapPtr[2];
switch (Key->ShiftOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->ShiftLen = 1;
Key->Shift[0] = KeyMapPtr[3];
break;
case DPF_MOD:
Key->ShiftLen = 6;
memcpy(Key->Shift, (KeyMapPtr+KeyMapPtr[3]), 6);
} /* switch */
Key->AltOpt = KeyMapPtr[4];
switch (Key->AltOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AltLen = 1;
Key->Alt[0] = KeyMapPtr[5];
break;
case DPF_MOD:
Key->AltLen = 6;
memcpy(Key->Alt, (KeyMapPtr+KeyMapPtr[5]), 6);
} /* switch */
Key->ShiftAltOpt = KeyMapPtr[6];
switch (Key->ShiftAltOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->ShiftAltLen = 1;
Key->ShiftAlt[0] = KeyMapPtr[7];
break;
case DPF_MOD:
Key->ShiftAltLen = 6;
memcpy(Key->ShiftAlt, (KeyMapPtr+KeyMapPtr[7]), 6);
} /* switch */
break;
case KCF_CONTROL:
Key->AloneOpt = KeyMapPtr[0];
switch (Key->AloneOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapPtr[1];
break;
case DPF_MOD:
Key->AloneLen = 6;
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), 6);
} /* switch */
Key->CtrlOpt = KeyMapPtr[2];
switch (Key->CtrlOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->CtrlLen = 1;
Key->Ctrl[0] = KeyMapPtr[3];
break;
case DPF_MOD:
Key->CtrlLen = 6;
memcpy(Key->Ctrl, (KeyMapPtr+KeyMapPtr[3]), 6);
} /* switch */
break;
case KCF_CONTROL|KCF_SHIFT:
Key->AloneOpt = KeyMapPtr[0];
switch (Key->AloneOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapPtr[1];
break;
case DPF_MOD:
Key->AloneLen = 6;
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), 6);
} /* switch */
Key->ShiftOpt = KeyMapPtr[2];
switch (Key->ShiftOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->ShiftLen = 1;
Key->Shift[0] = KeyMapPtr[3];
break;
case DPF_MOD:
Key->ShiftLen = 6;
memcpy(Key->Shift, (KeyMapPtr+KeyMapPtr[3]), 6);
} /* switch */
Key->CtrlOpt = KeyMapPtr[4];
switch (Key->CtrlOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->CtrlLen = 1;
Key->Ctrl[0] = KeyMapPtr[5];
break;
case DPF_MOD:
Key->CtrlLen = 6;
memcpy(Key->Ctrl, (KeyMapPtr+KeyMapPtr[5]), 6);
} /* switch */
Key->CtrlShiftOpt = KeyMapPtr[6];
switch (Key->CtrlShiftOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->CtrlShiftLen = 1;
Key->CtrlShift[0] = KeyMapPtr[7];
break;
case DPF_MOD:
Key->CtrlShiftLen = 6;
memcpy(Key->CtrlShift, (KeyMapPtr+KeyMapPtr[7]), 6);
} /* switch */
break;
case KCF_CONTROL|KCF_ALT:
Key->AloneOpt = KeyMapPtr[0];
switch (Key->AloneOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapPtr[1];
break;
case DPF_MOD:
Key->AloneLen = 6;
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), 6);
} /* switch */
Key->AltOpt = KeyMapPtr[2];
switch (Key->AltOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AltLen = 1;
Key->Alt[0] = KeyMapPtr[3];
break;
case DPF_MOD:
Key->AltLen = 6;
memcpy(Key->Alt, (KeyMapPtr+KeyMapPtr[3]), 6);
} /* switch */
Key->CtrlOpt = KeyMapPtr[4];
switch (Key->CtrlOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->CtrlLen = 1;
Key->Ctrl[0] = KeyMapPtr[5];
break;
case DPF_MOD:
Key->CtrlLen = 6;
memcpy(Key->Ctrl, (KeyMapPtr+KeyMapPtr[5]), 6);
} /* switch */
Key->CtrlAltOpt = KeyMapPtr[6];
switch (Key->CtrlAltOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->CtrlAltLen = 1;
Key->CtrlAlt[0] = KeyMapPtr[7];
break;
case DPF_MOD:
Key->CtrlAltLen = 6;
memcpy(Key->CtrlAlt, (KeyMapPtr+KeyMapPtr[7]), 6);
} /* switch */
break;
case KC_VANILLA:
Key->AloneOpt = KeyMapPtr[0];
switch (Key->AloneOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AloneLen = 1;
Key->Alone[0] = KeyMapPtr[1];
break;
case DPF_MOD:
Key->AloneLen = 6;
memcpy(Key->Alone, (KeyMapPtr+KeyMapPtr[1]), 6);
} /* switch */
Key->ShiftOpt = KeyMapPtr[2];
switch (Key->ShiftOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->ShiftLen = 1;
Key->Shift[0] = KeyMapPtr[3];
break;
case DPF_MOD:
Key->ShiftLen = 6;
memcpy(Key->Shift, (KeyMapPtr+KeyMapPtr[3]), 6);
} /* switch */
Key->AltOpt = KeyMapPtr[4];
switch (Key->AltOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->AltLen = 1;
Key->Alt[0] = KeyMapPtr[5];
break;
case DPF_MOD:
Key->AltLen = 6;
memcpy(Key->Alt, (KeyMapPtr+KeyMapPtr[5]), 6);
} /* switch */
Key->ShiftAltOpt = KeyMapPtr[6];
switch (Key->ShiftAltOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->ShiftAltLen = 1;
Key->ShiftAlt[0] = KeyMapPtr[7];
break;
case DPF_MOD:
Key->ShiftAltLen = 6;
memcpy(Key->ShiftAlt, (KeyMapPtr+KeyMapPtr[7]), 6);
} /* switch */
Key->CtrlOpt = KeyMapPtr[8];
switch (Key->CtrlOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->CtrlLen = 1;
Key->Ctrl[0] = KeyMapPtr[9];
break;
case DPF_MOD:
Key->CtrlLen = 6;
memcpy(Key->Ctrl, (KeyMapPtr+KeyMapPtr[9]), 6);
} /* switch */
Key->CtrlShiftOpt = KeyMapPtr[10];
switch (Key->CtrlShiftOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->CtrlShiftLen = 1;
Key->CtrlShift[0] = KeyMapPtr[11];
break;
case DPF_MOD:
Key->CtrlShiftLen = 6;
memcpy(Key->CtrlShift, (KeyMapPtr+KeyMapPtr[11]), 6);
} /* switch */
Key->CtrlAltOpt = KeyMapPtr[12];
switch (Key->CtrlAltOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->CtrlAltLen = 1;
Key->CtrlAlt[0] = KeyMapPtr[13];
break;
case DPF_MOD:
Key->CtrlAltLen = 6;
memcpy(Key->CtrlAlt, (KeyMapPtr+KeyMapPtr[13]), 6);
} /* switch */
Key->VanillaOpt = KeyMapPtr[14];
switch (Key->VanillaOpt) {
case KC_NOQUAL:
case DPF_DEAD:
Key->VanillaLen = 1;
Key->Vanilla[0] = KeyMapPtr[15];
break;
case DPF_MOD:
Key->VanillaLen = 6;
memcpy(Key->Vanilla, (KeyMapPtr+KeyMapPtr[15]), 6);
} /* switch */
} /* switch */
break;
case KCF_NOP:
break;
} /* switch */
return(Key);
}
/*
* Initialize requester for type of key
*/
void InitKeyReq(Key)
struct KeyNode *Key;
{
switch(Key->Type & (KCF_STRING|KCF_DEAD|KCF_NOP)) {
case KC_NOQUAL:
KRNOPGadget.Flags &= ~SELECTED;
KRNoQualGadget.Flags |= SELECTED;
KRStringGadget.Flags &= ~SELECTED;
KRDeadGadget.Flags &= ~SELECTED;
KRRepeatableGadget.NextGadget = KRNormalGadgetList;
KRRequester.ReqText = KRNormalITextList;
KRNAloneStrGadSInfo.BufferPos = ExpandCtrl(KRNAloneStrGadSIBuff, Key->Alone, 1);
if (Key->Type & KCF_SHIFT) {
KRNormalIText1.IText = KRShiftString;
KRNOpt1StrGadget.Flags &= ~GADGDISABLED;
KRNOpt1StrGadSInfo.BufferPos = ExpandCtrl(KRNOpt1StrGadSIBuff, Key->Shift, 1);
}
else if (Key->Type & KCF_ALT) {
KRNormalIText1.IText = KRAltString;
KRNOpt1StrGadget.Flags &= ~GADGDISABLED;
KRNOpt1StrGadSInfo.BufferPos = ExpandCtrl(KRNOpt1StrGadSIBuff, Key->Alt, 1);
}
else if (Key->Type & KCF_CONTROL) {
KRNormalIText1.IText = KRCtrlString;
KRNOpt1StrGadget.Flags &= ~GADGDISABLED;
KRNOpt1StrGadSInfo.BufferPos = ExpandCtrl(KRNOpt1StrGadSIBuff, Key->Ctrl, 1);
}
else {
KRNormalIText1.IText = NULL;
KRNOpt1StrGadget.Flags |= GADGDISABLED;
KRNOpt1StrGadSIBuff[0] = '\x00';
KRNOpt1StrGadSInfo.BufferPos = 0;
}
if ((Key->Type & KCF_ALT) && (Key->Type & KCF_SHIFT)) {
KRNormalIText2.IText = KRAltString;
KRNOpt2StrGadget.Flags &= ~GADGDISABLED;
KRNOpt2StrGadSInfo.BufferPos = ExpandCtrl(KRNOpt2StrGadSIBuff, Key->Alt, 1);
}
else if ((Key->Type & KCF_CONTROL) && (Key->Type & (KCF_SHIFT|KCF_ALT))) {
KRNormalIText2.IText = KRCtrlString;
KRNOpt2StrGadget.Flags &= ~GADGDISABLED;
KRNOpt2StrGadSInfo.BufferPos = ExpandCtrl(KRNOpt2StrGadSIBuff, Key->Ctrl, 1);
}
else {
KRNormalIText2.IText = NULL;
KRNOpt2StrGadget.Flags |= GADGDISABLED;
KRNOpt2StrGadSIBuff[0] = '\x00';
KRNOpt2StrGadSInfo.BufferPos = 0;
}
if ((Key->Type & (KCF_SHIFT|KCF_ALT)) == (KCF_SHIFT|KCF_ALT)) {
KRNormalIText3.IText = KRShiftAltString;
KRNOpt3StrGadget.Flags &= ~GADGDISABLED;
KRNOpt3StrGadSInfo.BufferPos = ExpandCtrl(KRNOpt3StrGadSIBuff, Key->ShiftAlt, 1);
}
else if ((Key->Type & (KCF_CONTROL|KCF_SHIFT)) == (KCF_CONTROL|KCF_SHIFT)) {
KRNormalIText3.IText = KRCtrlShiftString;
KRNOpt3StrGadget.Flags &= ~GADGDISABLED;
KRNOpt3StrGadSInfo.BufferPos = ExpandCtrl(KRNOpt3StrGadSIBuff, Key->CtrlShift, 1);
}
else if ((Key->Type & (KCF_CONTROL|KCF_ALT)) == (KCF_CONTROL|KCF_ALT)) {
KRNormalIText3.IText = KRCtrlAltString;
KRNOpt3StrGadget.Flags &= ~GADGDISABLED;
KRNOpt3StrGadSInfo.BufferPos = ExpandCtrl(KRNOpt3StrGadSIBuff, Key->CtrlAlt, 1);
}
else {
KRNormalIText3.IText = NULL;
KRNOpt3StrGadget.Flags |= GADGDISABLED;
KRNOpt3StrGadSIBuff[0] = '\x00';
KRNOpt3StrGadSInfo.BufferPos = 0;
}
break;
case KCF_STRING:
KRNOPGadget.Flags &= ~SELECTED;
KRNoQualGadget.Flags &= ~SELECTED;
KRStringGadget.Flags |= SELECTED;
KRDeadGadget.Flags &= ~SELECTED;
KRRepeatableGadget.NextGadget = KRStringGadgetList;
KRRequester.ReqText = KRStringITextList;
KRSAloneStrGadSInfo.BufferPos = ExpandCtrl(KRSAloneStrGadSIBuff, Key->Alone, Key->AloneLen);
if (Key->Type & KCF_SHIFT) {
KRSShiftStrGadget.Flags &= ~GADGDISABLED;
KRSShiftStrGadSInfo.BufferPos = ExpandCtrl(KRSShiftStrGadSIBuff, Key->Shift, Key->ShiftLen);
}
else {
KRSShiftStrGadget.Flags |= GADGDISABLED;
KRSShiftStrGadSIBuff[0] = '\x00';
KRSShiftStrGadSInfo.BufferPos = 0;
}
if (Key->Type & KCF_ALT) {
KRSAltStrGadget.Flags &= ~GADGDISABLED;
KRSAltStrGadSInfo.BufferPos = ExpandCtrl(KRSAltStrGadSIBuff, Key->Alt, Key->AltLen);
}
else {
KRSAltStrGadget.Flags |= GADGDISABLED;
KRSAltStrGadSIBuff[0] = '\x00';
KRSAltStrGadSInfo.BufferPos = 0;
}
if ((Key->Type & (KCF_SHIFT|KCF_ALT)) == (KCF_SHIFT|KCF_ALT)) {
KRSShiftAltStrGadget.Flags &= ~GADGDISABLED;
KRSShiftAltStrGadSInfo.BufferPos = ExpandCtrl(KRSShiftAltStrGadSIBuff, Key->ShiftAlt, Key->ShiftAltLen);
}
else {
KRSShiftAltStrGadget.Flags |= GADGDISABLED;
KRSShiftAltStrGadSIBuff[0] = '\x00';
KRSShiftAltStrGadSInfo.BufferPos = 0;
}
if (Key->Type & KCF_CONTROL) {
KRSCtrlStrGadget.Flags &= ~GADGDISABLED;
KRSCtrlStrGadSInfo.BufferPos = ExpandCtrl(KRSCtrlStrGadSIBuff, Key->Ctrl, Key->CtrlLen);
}
else {
KRSCtrlStrGadget.Flags |= GADGDISABLED;
KRSCtrlStrGadSIBuff[0] = '\x00';
KRSCtrlStrGadSInfo.BufferPos = 0;
}
if ((Key->Type & (KCF_CONTROL|KCF_SHIFT)) == (KCF_CONTROL|KCF_SHIFT)) {
KRSCtrlShiftStrGadget.Flags &= ~GADGDISABLED;
KRSCtrlShiftStrGadSInfo.BufferPos = ExpandCtrl(KRSCtrlShiftStrGadSIBuff, Key->CtrlShift, Key->CtrlShiftLen);
}
else {
KRSCtrlShiftStrGadget.Flags |= GADGDISABLED;
KRSCtrlShiftStrGadSIBuff[0] = '\x00';
KRSCtrlShiftStrGadSInfo.BufferPos = 0;
}
if ((Key->Type & (KCF_CONTROL|KCF_ALT)) == (KCF_CONTROL|KCF_ALT)) {
KRSCtrlAltStrGadget.Flags &= ~GADGDISABLED;
KRSCtrlAltStrGadSInfo.BufferPos = ExpandCtrl(KRSCtrlAltStrGadSIBuff, Key->CtrlAlt, Key->CtrlAltLen);
}
else {
KRSCtrlAltStrGadget.Flags |= GADGDISABLED;
KRSCtrlAltStrGadSIBuff[0] = '\x00';
KRSCtrlAltStrGadSInfo.BufferPos = 0;
}
if ((Key->Type & KC_VANILLA) == KC_VANILLA) {
KRSVanillaStrGadget.Flags &= ~GADGDISABLED;
KRSVanillaStrGadSInfo.BufferPos = ExpandCtrl(KRSVanillaStrGadSIBuff, Key->Vanilla, Key->VanillaLen);
}
else {
KRSVanillaStrGadget.Flags |= GADGDISABLED;
KRSVanillaStrGadSIBuff[0] = '\x00';
KRSVanillaStrGadSInfo.BufferPos = 0;
}
break;
case KCF_DEAD:
KRNOPGadget.Flags &= ~SELECTED;
KRNoQualGadget.Flags &= ~SELECTED;
KRStringGadget.Flags &= ~SELECTED;
KRDeadGadget.Flags |= SELECTED;
KRRepeatableGadget.NextGadget = KRDeadGadgetList;
KRRequester.ReqText = KRDeadITextList;
KRDAloneModGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRDAloneDeadGadget.Flags &= ~(SELECTED|GADGDISABLED);
switch (Key->AloneOpt) {
case KC_NOQUAL:
KRDAloneDeadGadget.NextGadget = &KRDAloneNormalStrGadget;
KRDAloneNormalStrGadSInfo.BufferPos = ExpandCtrl(KRDAloneNormalStrGadSIBuff, Key->Alone, 1);
break;
case DPF_MOD:
KRDAloneModGadget.Flags |= SELECTED;
KRDAloneDeadGadget.NextGadget = &KRDAloneMod0StrGadget;
KRDAloneMod0StrGadSInfo.BufferPos = ExpandCtrl(KRDAloneMod0StrGadSIBuff, &Key->Alone[0], 1);
KRDAloneMod0StrGadSInfo.DispPos = KRDAloneMod0StrGadSInfo.BufferPos - 1;
KRDAloneMod1StrGadSInfo.BufferPos = ExpandCtrl(KRDAloneMod1StrGadSIBuff, &Key->Alone[1], 1);
KRDAloneMod1StrGadSInfo.DispPos = KRDAloneMod1StrGadSInfo.BufferPos - 1;
KRDAloneMod2StrGadSInfo.BufferPos = ExpandCtrl(KRDAloneMod2StrGadSIBuff, &Key->Alone[2], 1);
KRDAloneMod2StrGadSInfo.DispPos = KRDAloneMod2StrGadSInfo.BufferPos - 1;
KRDAloneMod3StrGadSInfo.BufferPos = ExpandCtrl(KRDAloneMod3StrGadSIBuff, &Key->Alone[3], 1);
KRDAloneMod3StrGadSInfo.DispPos = KRDAloneMod3StrGadSInfo.BufferPos - 1;
KRDAloneMod4StrGadSInfo.BufferPos = ExpandCtrl(KRDAloneMod4StrGadSIBuff, &Key->Alone[4], 1);
KRDAloneMod4StrGadSInfo.DispPos = KRDAloneMod4StrGadSInfo.BufferPos - 1;
KRDAloneMod5StrGadSInfo.BufferPos = ExpandCtrl(KRDAloneMod5StrGadSIBuff, &Key->Alone[5], 1);
KRDAloneMod5StrGadSInfo.DispPos = KRDAloneMod5StrGadSInfo.BufferPos - 1;
break;
case DPF_DEAD:
KRDAloneDeadGadget.Flags |= SELECTED;
KRDAloneDeadGadget.NextGadget = &KRDAloneAcc1Gadget;
KRDAloneAcc1Gadget.Flags &= ~SELECTED;
KRDAloneAcc2Gadget.Flags &= ~SELECTED;
KRDAloneAcc3Gadget.Flags &= ~SELECTED;
KRDAloneAcc4Gadget.Flags &= ~SELECTED;
KRDAloneAcc5Gadget.Flags &= ~SELECTED;
switch (Key->Alone[0]) {
case 01:
KRDAloneAcc1Gadget.Flags |= SELECTED;
break;
case 02:
KRDAloneAcc2Gadget.Flags |= SELECTED;
break;
case 03:
KRDAloneAcc3Gadget.Flags |= SELECTED;
break;
case 04:
KRDAloneAcc4Gadget.Flags |= SELECTED;
break;
case 05:
KRDAloneAcc5Gadget.Flags |= SELECTED;
} /* switch */
} /* switch */
KRDShiftModGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRDShiftDeadGadget.Flags &= ~(SELECTED|GADGDISABLED);
if (Key->Type & KCF_SHIFT)
switch (Key->ShiftOpt) {
case KC_NOQUAL:
KRDShiftDeadGadget.NextGadget = &KRDShiftNormalStrGadget;
KRDShiftNormalStrGadSInfo.BufferPos = ExpandCtrl(KRDShiftNormalStrGadSIBuff, Key->Shift, 1);
break;
case DPF_MOD:
KRDShiftModGadget.Flags |= SELECTED;
KRDShiftDeadGadget.NextGadget = &KRDShiftMod0StrGadget;
KRDShiftMod0StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftMod0StrGadSIBuff, &Key->Shift[0], 1);
KRDShiftMod0StrGadSInfo.DispPos = KRDShiftMod0StrGadSInfo.BufferPos - 1;
KRDShiftMod1StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftMod1StrGadSIBuff, &Key->Shift[1], 1);
KRDShiftMod1StrGadSInfo.DispPos = KRDShiftMod1StrGadSInfo.BufferPos - 1;
KRDShiftMod2StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftMod2StrGadSIBuff, &Key->Shift[2], 1);
KRDShiftMod2StrGadSInfo.DispPos = KRDShiftMod2StrGadSInfo.BufferPos - 1;
KRDShiftMod3StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftMod3StrGadSIBuff, &Key->Shift[3], 1);
KRDShiftMod3StrGadSInfo.DispPos = KRDShiftMod3StrGadSInfo.BufferPos - 1;
KRDShiftMod4StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftMod4StrGadSIBuff, &Key->Shift[4], 1);
KRDShiftMod4StrGadSInfo.DispPos = KRDShiftMod4StrGadSInfo.BufferPos - 1;
KRDShiftMod5StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftMod5StrGadSIBuff, &Key->Shift[5], 1);
KRDShiftMod5StrGadSInfo.DispPos = KRDShiftMod5StrGadSInfo.BufferPos - 1;
break;
case DPF_DEAD:
KRDShiftDeadGadget.Flags |= SELECTED;
KRDShiftDeadGadget.NextGadget = &KRDShiftAcc1Gadget;
KRDShiftAcc1Gadget.Flags &= ~SELECTED;
KRDShiftAcc2Gadget.Flags &= ~SELECTED;
KRDShiftAcc3Gadget.Flags &= ~SELECTED;
KRDShiftAcc4Gadget.Flags &= ~SELECTED;
KRDShiftAcc5Gadget.Flags &= ~SELECTED;
switch (Key->Shift[0]) {
case 01:
KRDShiftAcc1Gadget.Flags |= SELECTED;
break;
case 02:
KRDShiftAcc2Gadget.Flags |= SELECTED;
break;
case 03:
KRDShiftAcc3Gadget.Flags |= SELECTED;
break;
case 04:
KRDShiftAcc4Gadget.Flags |= SELECTED;
break;
case 05:
KRDShiftAcc5Gadget.Flags |= SELECTED;
} /* switch */
} /* switch */
else {
KRDShiftModGadget.Flags |= GADGDISABLED;
KRDShiftDeadGadget.Flags |= GADGDISABLED;
KRDShiftDeadGadget.NextGadget = &KRDAltModGadget;
}
KRDAltModGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRDAltDeadGadget.Flags &= ~(SELECTED|GADGDISABLED);
if (Key->Type & KCF_ALT)
switch (Key->AltOpt) {
case KC_NOQUAL:
KRDAltDeadGadget.NextGadget = &KRDAltNormalStrGadget;
KRDAltNormalStrGadSInfo.BufferPos = ExpandCtrl(KRDAltNormalStrGadSIBuff, Key->Alt, 1);
break;
case DPF_MOD:
KRDAltModGadget.Flags |= SELECTED;
KRDAltDeadGadget.NextGadget = &KRDAltMod0StrGadget;
KRDAltMod0StrGadSInfo.BufferPos = ExpandCtrl(KRDAltMod0StrGadSIBuff, &Key->Alt[0], 1);
KRDAltMod0StrGadSInfo.DispPos = KRDAltMod0StrGadSInfo.BufferPos - 1;
KRDAltMod1StrGadSInfo.BufferPos = ExpandCtrl(KRDAltMod1StrGadSIBuff, &Key->Alt[1], 1);
KRDAltMod1StrGadSInfo.DispPos = KRDAltMod1StrGadSInfo.BufferPos - 1;
KRDAltMod2StrGadSInfo.BufferPos = ExpandCtrl(KRDAltMod2StrGadSIBuff, &Key->Alt[2], 1);
KRDAltMod2StrGadSInfo.DispPos = KRDAltMod2StrGadSInfo.BufferPos - 1;
KRDAltMod3StrGadSInfo.BufferPos = ExpandCtrl(KRDAltMod3StrGadSIBuff, &Key->Alt[3], 1);
KRDAltMod3StrGadSInfo.DispPos = KRDAltMod3StrGadSInfo.BufferPos - 1;
KRDAltMod4StrGadSInfo.BufferPos = ExpandCtrl(KRDAltMod4StrGadSIBuff, &Key->Alt[4], 1);
KRDAltMod4StrGadSInfo.DispPos = KRDAltMod4StrGadSInfo.BufferPos - 1;
KRDAltMod5StrGadSInfo.BufferPos = ExpandCtrl(KRDAltMod5StrGadSIBuff, &Key->Alt[5], 1);
KRDAltMod5StrGadSInfo.DispPos = KRDAltMod5StrGadSInfo.BufferPos - 1;
break;
case DPF_DEAD:
KRDAltDeadGadget.Flags |= SELECTED;
KRDAltDeadGadget.NextGadget = &KRDAltAcc1Gadget;
KRDAltAcc1Gadget.Flags &= ~SELECTED;
KRDAltAcc2Gadget.Flags &= ~SELECTED;
KRDAltAcc3Gadget.Flags &= ~SELECTED;
KRDAltAcc4Gadget.Flags &= ~SELECTED;
KRDAltAcc5Gadget.Flags &= ~SELECTED;
switch (Key->Alt[0]) {
case 01:
KRDAltAcc1Gadget.Flags |= SELECTED;
break;
case 02:
KRDAltAcc2Gadget.Flags |= SELECTED;
break;
case 03:
KRDAltAcc3Gadget.Flags |= SELECTED;
break;
case 04:
KRDAltAcc4Gadget.Flags |= SELECTED;
break;
case 05:
KRDAltAcc5Gadget.Flags |= SELECTED;
} /* switch */
} /* switch */
else {
KRDAltModGadget.Flags |= GADGDISABLED;
KRDAltDeadGadget.Flags |= GADGDISABLED;
KRDAltDeadGadget.NextGadget = &KRDShiftAltModGadget;
}
KRDShiftAltModGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRDShiftAltDeadGadget.Flags &= ~(SELECTED|GADGDISABLED);
if ((Key->Type & (KCF_SHIFT|KCF_ALT)) == (KCF_SHIFT|KCF_ALT))
switch (Key->ShiftAltOpt) {
case KC_NOQUAL:
KRDShiftAltDeadGadget.NextGadget = &KRDShiftAltNormalStrGadget;
KRDShiftAltNormalStrGadSInfo.BufferPos = ExpandCtrl(KRDShiftAltNormalStrGadSIBuff, Key->ShiftAlt, 1);
break;
case DPF_MOD:
KRDShiftAltModGadget.Flags |= SELECTED;
KRDShiftAltDeadGadget.NextGadget = &KRDShiftAltMod0StrGadget;
KRDShiftAltMod0StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftAltMod0StrGadSIBuff, &Key->ShiftAlt[0], 1);
KRDShiftAltMod0StrGadSInfo.DispPos = KRDShiftAltMod0StrGadSInfo.BufferPos - 1;
KRDShiftAltMod1StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftAltMod1StrGadSIBuff, &Key->ShiftAlt[1], 1);
KRDShiftAltMod1StrGadSInfo.DispPos = KRDShiftAltMod1StrGadSInfo.BufferPos - 1;
KRDShiftAltMod2StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftAltMod2StrGadSIBuff, &Key->ShiftAlt[2], 1);
KRDShiftAltMod2StrGadSInfo.DispPos = KRDShiftAltMod2StrGadSInfo.BufferPos - 1;
KRDShiftAltMod3StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftAltMod3StrGadSIBuff, &Key->ShiftAlt[3], 1);
KRDShiftAltMod3StrGadSInfo.DispPos = KRDShiftAltMod3StrGadSInfo.BufferPos - 1;
KRDShiftAltMod4StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftAltMod4StrGadSIBuff, &Key->ShiftAlt[4], 1);
KRDShiftAltMod4StrGadSInfo.DispPos = KRDShiftAltMod4StrGadSInfo.BufferPos - 1;
KRDShiftAltMod5StrGadSInfo.BufferPos = ExpandCtrl(KRDShiftAltMod5StrGadSIBuff, &Key->ShiftAlt[5], 1);
KRDShiftAltMod5StrGadSInfo.DispPos = KRDShiftAltMod5StrGadSInfo.BufferPos - 1;
case DPF_DEAD:
KRDShiftAltDeadGadget.Flags |= SELECTED;
KRDShiftAltDeadGadget.NextGadget = &KRDShiftAltAcc1Gadget;
KRDShiftAltAcc1Gadget.Flags &= ~SELECTED;
KRDShiftAltAcc2Gadget.Flags &= ~SELECTED;
KRDShiftAltAcc3Gadget.Flags &= ~SELECTED;
KRDShiftAltAcc4Gadget.Flags &= ~SELECTED;
KRDShiftAltAcc5Gadget.Flags &= ~SELECTED;
switch (Key->ShiftAlt[0]) {
case 01:
KRDShiftAltAcc1Gadget.Flags |= SELECTED;
break;
case 02:
KRDShiftAltAcc2Gadget.Flags |= SELECTED;
break;
case 03:
KRDShiftAltAcc3Gadget.Flags |= SELECTED;
break;
case 04:
KRDShiftAltAcc4Gadget.Flags |= SELECTED;
break;
case 05:
KRDShiftAltAcc5Gadget.Flags |= SELECTED;
} /* switch */
} /* switch */
else {
KRDShiftAltModGadget.Flags |= GADGDISABLED;
KRDShiftAltDeadGadget.Flags |= GADGDISABLED;
KRDShiftAltDeadGadget.NextGadget = &KRDCtrlModGadget;
}
KRDCtrlModGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRDCtrlDeadGadget.Flags &= ~(SELECTED|GADGDISABLED);
if (Key->Type & KCF_CONTROL)
switch (Key->CtrlOpt) {
case KC_NOQUAL:
KRDCtrlDeadGadget.NextGadget = &KRDCtrlNormalStrGadget;
KRDCtrlNormalStrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlNormalStrGadSIBuff, Key->Ctrl, 1);
break;
case DPF_MOD:
KRDCtrlModGadget.Flags |= SELECTED;
KRDCtrlDeadGadget.NextGadget = &KRDCtrlMod0StrGadget;
KRDCtrlMod0StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlMod0StrGadSIBuff, &Key->Ctrl[0], 1);
KRDCtrlMod0StrGadSInfo.DispPos = KRDCtrlMod0StrGadSInfo.BufferPos - 1;
KRDCtrlMod1StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlMod1StrGadSIBuff, &Key->Ctrl[1], 1);
KRDCtrlMod1StrGadSInfo.DispPos = KRDCtrlMod1StrGadSInfo.BufferPos - 1;
KRDCtrlMod2StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlMod2StrGadSIBuff, &Key->Ctrl[2], 1);
KRDCtrlMod2StrGadSInfo.DispPos = KRDCtrlMod2StrGadSInfo.BufferPos - 1;
KRDCtrlMod3StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlMod3StrGadSIBuff, &Key->Ctrl[3], 1);
KRDCtrlMod3StrGadSInfo.DispPos = KRDCtrlMod3StrGadSInfo.BufferPos - 1;
KRDCtrlMod4StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlMod4StrGadSIBuff, &Key->Ctrl[4], 1);
KRDCtrlMod4StrGadSInfo.DispPos = KRDCtrlMod4StrGadSInfo.BufferPos - 1;
KRDCtrlMod5StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlMod5StrGadSIBuff, &Key->Ctrl[5], 1);
KRDCtrlMod5StrGadSInfo.DispPos = KRDCtrlMod5StrGadSInfo.BufferPos - 1;
break;
case DPF_DEAD:
KRDCtrlDeadGadget.Flags |= SELECTED;
KRDCtrlDeadGadget.NextGadget = &KRDCtrlAcc1Gadget;
KRDCtrlAcc1Gadget.Flags &= ~SELECTED;
KRDCtrlAcc2Gadget.Flags &= ~SELECTED;
KRDCtrlAcc3Gadget.Flags &= ~SELECTED;
KRDCtrlAcc4Gadget.Flags &= ~SELECTED;
KRDCtrlAcc5Gadget.Flags &= ~SELECTED;
switch (Key->Ctrl[0]) {
case 01:
KRDCtrlAcc1Gadget.Flags |= SELECTED;
break;
case 02:
KRDCtrlAcc2Gadget.Flags |= SELECTED;
break;
case 03:
KRDCtrlAcc3Gadget.Flags |= SELECTED;
break;
case 04:
KRDCtrlAcc4Gadget.Flags |= SELECTED;
break;
case 05:
KRDCtrlAcc5Gadget.Flags |= SELECTED;
} /* switch */
} /* switch */
else {
KRDCtrlModGadget.Flags |= GADGDISABLED;
KRDCtrlDeadGadget.Flags |= GADGDISABLED;
KRDCtrlDeadGadget.NextGadget = &KRDCtrlShiftModGadget;
}
KRDCtrlShiftModGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRDCtrlShiftDeadGadget.Flags &= ~(SELECTED|GADGDISABLED);
if ((Key->Type & (KCF_CONTROL|KCF_SHIFT)) == (KCF_CONTROL|KCF_SHIFT))
switch (Key->CtrlShiftOpt) {
case KC_NOQUAL:
KRDCtrlShiftDeadGadget.NextGadget = &KRDCtrlShiftNormalStrGadget;
KRDCtrlShiftNormalStrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlShiftNormalStrGadSIBuff, Key->CtrlShift, 1);
break;
case DPF_MOD:
KRDCtrlShiftModGadget.Flags |= SELECTED;
KRDCtrlShiftDeadGadget.NextGadget = &KRDCtrlShiftMod0StrGadget;
KRDCtrlShiftMod0StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlShiftMod0StrGadSIBuff, &Key->CtrlShift[0], 1);
KRDCtrlShiftMod0StrGadSInfo.DispPos = KRDCtrlShiftMod0StrGadSInfo.BufferPos - 1;
KRDCtrlShiftMod1StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlShiftMod1StrGadSIBuff, &Key->CtrlShift[1], 1);
KRDCtrlShiftMod1StrGadSInfo.DispPos = KRDCtrlShiftMod1StrGadSInfo.BufferPos - 1;
KRDCtrlShiftMod2StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlShiftMod2StrGadSIBuff, &Key->CtrlShift[2], 1);
KRDCtrlShiftMod2StrGadSInfo.DispPos = KRDCtrlShiftMod2StrGadSInfo.BufferPos - 1;
KRDCtrlShiftMod3StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlShiftMod3StrGadSIBuff, &Key->CtrlShift[3], 1);
KRDCtrlShiftMod3StrGadSInfo.DispPos = KRDCtrlShiftMod3StrGadSInfo.BufferPos - 1;
KRDCtrlShiftMod4StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlShiftMod4StrGadSIBuff, &Key->CtrlShift[4], 1);
KRDCtrlShiftMod4StrGadSInfo.DispPos = KRDCtrlShiftMod4StrGadSInfo.BufferPos - 1;
KRDCtrlShiftMod5StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlShiftMod5StrGadSIBuff, &Key->CtrlShift[5], 1);
KRDCtrlShiftMod5StrGadSInfo.DispPos = KRDCtrlShiftMod5StrGadSInfo.BufferPos - 1;
break;
case DPF_DEAD:
KRDCtrlShiftDeadGadget.Flags |= SELECTED;
KRDCtrlShiftDeadGadget.NextGadget = &KRDCtrlShiftAcc1Gadget;
KRDCtrlShiftAcc1Gadget.Flags &= ~SELECTED;
KRDCtrlShiftAcc2Gadget.Flags &= ~SELECTED;
KRDCtrlShiftAcc3Gadget.Flags &= ~SELECTED;
KRDCtrlShiftAcc4Gadget.Flags &= ~SELECTED;
KRDCtrlShiftAcc5Gadget.Flags &= ~SELECTED;
switch (Key->CtrlShift[0]) {
case 01:
KRDCtrlShiftAcc1Gadget.Flags |= SELECTED;
break;
case 02:
KRDCtrlShiftAcc2Gadget.Flags |= SELECTED;
break;
case 03:
KRDCtrlShiftAcc3Gadget.Flags |= SELECTED;
break;
case 04:
KRDCtrlShiftAcc4Gadget.Flags |= SELECTED;
break;
case 05:
KRDCtrlShiftAcc5Gadget.Flags |= SELECTED;
} /* switch */
} /* switch */
else {
KRDCtrlShiftModGadget.Flags |= GADGDISABLED;
KRDCtrlShiftDeadGadget.Flags |= GADGDISABLED;
KRDCtrlShiftDeadGadget.NextGadget = &KRDCtrlAltModGadget;
}
KRDCtrlAltModGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRDCtrlAltDeadGadget.Flags &= ~(SELECTED|GADGDISABLED);
if ((Key->Type & (KCF_CONTROL|KCF_ALT)) == (KCF_CONTROL|KCF_ALT))
switch (Key->CtrlAltOpt) {
case KC_NOQUAL:
KRDCtrlAltDeadGadget.NextGadget = &KRDCtrlAltNormalStrGadget;
KRDCtrlAltNormalStrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlAltNormalStrGadSIBuff, Key->CtrlAlt, 1);
break;
case DPF_MOD:
KRDCtrlAltModGadget.Flags |= SELECTED;
KRDCtrlAltDeadGadget.NextGadget = &KRDCtrlAltMod0StrGadget;
KRDCtrlAltMod0StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlAltMod0StrGadSIBuff, &Key->CtrlAlt[0], 1);
KRDCtrlAltMod0StrGadSInfo.DispPos = KRDCtrlAltMod0StrGadSInfo.BufferPos - 1;
KRDCtrlAltMod1StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlAltMod1StrGadSIBuff, &Key->CtrlAlt[1], 1);
KRDCtrlAltMod1StrGadSInfo.DispPos = KRDCtrlAltMod1StrGadSInfo.BufferPos - 1;
KRDCtrlAltMod2StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlAltMod2StrGadSIBuff, &Key->CtrlAlt[2], 1);
KRDCtrlAltMod2StrGadSInfo.DispPos = KRDCtrlAltMod2StrGadSInfo.BufferPos - 1;
KRDCtrlAltMod3StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlAltMod3StrGadSIBuff, &Key->CtrlAlt[3], 1);
KRDCtrlAltMod3StrGadSInfo.DispPos = KRDCtrlAltMod3StrGadSInfo.BufferPos - 1;
KRDCtrlAltMod4StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlAltMod4StrGadSIBuff, &Key->CtrlAlt[4], 1);
KRDCtrlAltMod4StrGadSInfo.DispPos = KRDCtrlAltMod4StrGadSInfo.BufferPos - 1;
KRDCtrlAltMod5StrGadSInfo.BufferPos = ExpandCtrl(KRDCtrlAltMod5StrGadSIBuff, &Key->CtrlAlt[5], 1);
KRDCtrlAltMod5StrGadSInfo.DispPos = KRDCtrlAltMod5StrGadSInfo.BufferPos - 1;
break;
case DPF_DEAD:
KRDCtrlAltDeadGadget.Flags |= SELECTED;
KRDCtrlAltDeadGadget.NextGadget = &KRDCtrlAltAcc1Gadget;
KRDCtrlAltAcc1Gadget.Flags &= ~SELECTED;
KRDCtrlAltAcc2Gadget.Flags &= ~SELECTED;
KRDCtrlAltAcc3Gadget.Flags &= ~SELECTED;
KRDCtrlAltAcc4Gadget.Flags &= ~SELECTED;
KRDCtrlAltAcc5Gadget.Flags &= ~SELECTED;
switch (Key->CtrlAlt[0]) {
case 01:
KRDCtrlAltAcc1Gadget.Flags |= SELECTED;
break;
case 02:
KRDCtrlAltAcc2Gadget.Flags |= SELECTED;
break;
case 03:
KRDCtrlAltAcc3Gadget.Flags |= SELECTED;
break;
case 04:
KRDCtrlAltAcc4Gadget.Flags |= SELECTED;
break;
case 05:
KRDCtrlAltAcc5Gadget.Flags |= SELECTED;
} /* switch */
} /* switch */
else {
KRDCtrlAltModGadget.Flags |= GADGDISABLED;
KRDCtrlAltDeadGadget.Flags |= GADGDISABLED;
KRDCtrlAltDeadGadget.NextGadget = &KRDVanillaModGadget;
}
KRDVanillaModGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRDVanillaDeadGadget.Flags &= ~(SELECTED|GADGDISABLED);
if ((Key->Type & KC_VANILLA) == KC_VANILLA)
switch (Key->VanillaOpt) {
case KC_NOQUAL:
KRDVanillaDeadGadget.NextGadget = &KRDVanillaNormalStrGadget;
KRDVanillaNormalStrGadSInfo.BufferPos = ExpandCtrl(KRDVanillaNormalStrGadSIBuff, Key->Vanilla, 1);
break;
case DPF_MOD:
KRDVanillaModGadget.Flags |= SELECTED;
KRDVanillaDeadGadget.NextGadget = &KRDVanillaMod0StrGadget;
KRDVanillaMod0StrGadSInfo.BufferPos = ExpandCtrl(KRDVanillaMod0StrGadSIBuff, &Key->Vanilla[0], 1);
KRDVanillaMod0StrGadSInfo.DispPos = KRDVanillaMod0StrGadSInfo.BufferPos - 1;
KRDVanillaMod1StrGadSInfo.BufferPos = ExpandCtrl(KRDVanillaMod1StrGadSIBuff, &Key->Vanilla[1], 1);
KRDVanillaMod1StrGadSInfo.DispPos = KRDVanillaMod1StrGadSInfo.BufferPos - 1;
KRDVanillaMod2StrGadSInfo.BufferPos = ExpandCtrl(KRDVanillaMod2StrGadSIBuff, &Key->Vanilla[2], 1);
KRDVanillaMod2StrGadSInfo.DispPos = KRDVanillaMod2StrGadSInfo.BufferPos - 1;
KRDVanillaMod3StrGadSInfo.BufferPos = ExpandCtrl(KRDVanillaMod3StrGadSIBuff, &Key->Vanilla[3], 1);
KRDVanillaMod3StrGadSInfo.DispPos = KRDVanillaMod3StrGadSInfo.BufferPos - 1;
KRDVanillaMod4StrGadSInfo.BufferPos = ExpandCtrl(KRDVanillaMod4StrGadSIBuff, &Key->Vanilla[4], 1);
KRDVanillaMod4StrGadSInfo.DispPos = KRDVanillaMod4StrGadSInfo.BufferPos - 1;
KRDVanillaMod5StrGadSInfo.BufferPos = ExpandCtrl(KRDVanillaMod5StrGadSIBuff, &Key->Vanilla[5], 1);
KRDVanillaMod5StrGadSInfo.DispPos = KRDVanillaMod5StrGadSInfo.BufferPos - 1;
break;
case DPF_DEAD:
KRDVanillaDeadGadget.Flags |= SELECTED;
KRDVanillaDeadGadget.NextGadget = &KRDVanillaAcc1Gadget;
KRDVanillaAcc1Gadget.Flags &= ~SELECTED;
KRDVanillaAcc2Gadget.Flags &= ~SELECTED;
KRDVanillaAcc3Gadget.Flags &= ~SELECTED;
KRDVanillaAcc4Gadget.Flags &= ~SELECTED;
KRDVanillaAcc5Gadget.Flags &= ~SELECTED;
switch (Key->Vanilla[0]) {
case 01:
KRDVanillaAcc1Gadget.Flags |= SELECTED;
break;
case 02:
KRDVanillaAcc2Gadget.Flags |= SELECTED;
break;
case 03:
KRDVanillaAcc3Gadget.Flags |= SELECTED;
break;
case 04:
KRDVanillaAcc4Gadget.Flags |= SELECTED;
break;
case 05:
KRDVanillaAcc5Gadget.Flags |= SELECTED;
} /* switch */
} /* switch */
else {
KRDVanillaModGadget.Flags |= GADGDISABLED;
KRDVanillaDeadGadget.Flags |= GADGDISABLED;
KRDVanillaDeadGadget.NextGadget = &KRUseGadget;
}
break;
case KCF_NOP:
KRNOPGadget.Flags |= SELECTED;
KRNoQualGadget.Flags &= ~SELECTED;
KRStringGadget.Flags &= ~SELECTED;
KRDeadGadget.Flags &= ~SELECTED;
KRRepeatableGadget.NextGadget = KRNOPGadgetList;
KRRequester.ReqText = NULL;
break;
} /* switch */
KRShiftGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRAltGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRCtrlGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRCapsableGadget.Flags &= ~(SELECTED|GADGDISABLED);
KRRepeatableGadget.Flags &= ~(SELECTED|GADGDISABLED);
if (!(Key->Type & KCF_NOP)) {
if (Key->Type & KCF_SHIFT)
KRShiftGadget.Flags |= SELECTED;
if (Key->Type & KCF_ALT)
KRAltGadget.Flags |= SELECTED;
if (Key->Type & KCF_CONTROL)
KRCtrlGadget.Flags |= SELECTED;
if (Key->Capsable)
KRCapsableGadget.Flags |= SELECTED;
if (Key->Repeatable)
KRRepeatableGadget.Flags |= SELECTED;
}
else {
KRShiftGadget.Flags |= GADGDISABLED;
KRAltGadget.Flags |= GADGDISABLED;
KRCtrlGadget.Flags |= GADGDISABLED;
KRCapsableGadget.Flags |= GADGDISABLED;
KRRepeatableGadget.Flags |= GADGDISABLED;
}
}
/*
* Update Key
*/
void UpdateKey(Key)
struct KeyNode *Key;
{
switch(Key->Type & (KCF_STRING|KCF_DEAD|KCF_NOP)) {
case KC_NOQUAL:
Key->AloneLen = CollapseCtrl(Key->Alone, KRNAloneStrGadSIBuff, 1);
if (Key->Type & KCF_SHIFT)
Key->ShiftLen = CollapseCtrl(Key->Shift, KRNOpt1StrGadSIBuff, 1);
else if (Key->Type & KCF_ALT)
Key->AltLen = CollapseCtrl(Key->Alt, KRNOpt1StrGadSIBuff, 1);
else if (Key->Type & KCF_CONTROL)
Key->CtrlLen = CollapseCtrl(Key->Ctrl, KRNOpt1StrGadSIBuff, 1);
if ((Key->Type & KCF_ALT) && (Key->Type & KCF_SHIFT))
Key->AltLen = CollapseCtrl(Key->Alt, KRNOpt2StrGadSIBuff, 1);
else if ((Key->Type & KCF_CONTROL) && (Key->Type & (KCF_SHIFT|KCF_ALT)))
Key->CtrlLen = CollapseCtrl(Key->Ctrl, KRNOpt2StrGadSIBuff, 1);
if ((Key->Type & (KCF_SHIFT|KCF_ALT)) == (KCF_SHIFT|KCF_ALT))
Key->ShiftAltLen = CollapseCtrl(Key->ShiftAlt, KRNOpt3StrGadSIBuff, 1);
else if ((Key->Type & (KCF_CONTROL|KCF_SHIFT)) == (KCF_CONTROL|KCF_SHIFT))
Key->CtrlShiftLen = CollapseCtrl(Key->CtrlShift, KRNOpt3StrGadSIBuff, 1);
else if ((Key->Type & (KCF_CONTROL|KCF_ALT)) == (KCF_CONTROL|KCF_ALT))
Key->CtrlAltLen = CollapseCtrl(Key->CtrlAlt, KRNOpt3StrGadSIBuff, 1);
break;
case KCF_STRING:
Key->AloneLen = CollapseCtrl(Key->Alone, KRSAloneStrGadSIBuff, 32);
Key->ShiftLen = CollapseCtrl(Key->Shift, KRSShiftStrGadSIBuff, 32);
Key->AltLen = CollapseCtrl(Key->Alt, KRSAltStrGadSIBuff, 32);
Key->ShiftAltLen = CollapseCtrl(Key->ShiftAlt, KRSShiftAltStrGadSIBuff, 32);
Key->CtrlLen = CollapseCtrl(Key->Ctrl, KRSCtrlStrGadSIBuff, 32);
Key->CtrlShiftLen = CollapseCtrl(Key->CtrlShift, KRSCtrlShiftStrGadSIBuff, 32);
Key->CtrlAltLen = CollapseCtrl(Key->CtrlAlt, KRSCtrlAltStrGadSIBuff, 32);
Key->VanillaLen = CollapseCtrl(Key->Vanilla, KRSVanillaStrGadSIBuff, 32);
break;
case KCF_DEAD:
switch (Key->AloneOpt) {
case KC_NOQUAL:
Key->AloneLen = CollapseCtrl(Key->Alone, KRDAloneNormalStrGadSIBuff, 1);
break;
case DPF_MOD:
Key->AloneLen = 6;
CollapseCtrl(&Key->Alone[0], KRDAloneMod0StrGadSIBuff, 1);
CollapseCtrl(&Key->Alone[1], KRDAloneMod1StrGadSIBuff, 1);
CollapseCtrl(&Key->Alone[2], KRDAloneMod2StrGadSIBuff, 1);
CollapseCtrl(&Key->Alone[3], KRDAloneMod3StrGadSIBuff, 1);
CollapseCtrl(&Key->Alone[4], KRDAloneMod4StrGadSIBuff, 1);
CollapseCtrl(&Key->Alone[5], KRDAloneMod5StrGadSIBuff, 1);
break;
case DPF_DEAD:
Key->AloneLen = 1;
if (KRDAloneAcc1Gadget.Flags & SELECTED)
Key->Alone[0] = 1;
else if (KRDAloneAcc2Gadget.Flags & SELECTED)
Key->Alone[0] = 2;
else if (KRDAloneAcc3Gadget.Flags & SELECTED)
Key->Alone[0] = 3;
else if (KRDAloneAcc4Gadget.Flags & SELECTED)
Key->Alone[0] = 4;
else
Key->Alone[0] = 5;
Key->Alone[1] = '\x00';
} /* switch */
switch (Key->ShiftOpt) {
case KC_NOQUAL:
Key->ShiftLen = CollapseCtrl(Key->Shift, KRDShiftNormalStrGadSIBuff, 1);
break;
case DPF_MOD:
Key->ShiftLen = 6;
CollapseCtrl(&Key->Shift[0], KRDShiftMod0StrGadSIBuff, 1);
CollapseCtrl(&Key->Shift[1], KRDShiftMod1StrGadSIBuff, 1);
CollapseCtrl(&Key->Shift[2], KRDShiftMod2StrGadSIBuff, 1);
CollapseCtrl(&Key->Shift[3], KRDShiftMod3StrGadSIBuff, 1);
CollapseCtrl(&Key->Shift[4], KRDShiftMod4StrGadSIBuff, 1);
CollapseCtrl(&Key->Shift[5], KRDShiftMod5StrGadSIBuff, 1);
break;
case DPF_DEAD:
Key->ShiftLen = 1;
if (KRDShiftAcc1Gadget.Flags & SELECTED)
Key->Shift[0] = 1;
else if (KRDShiftAcc2Gadget.Flags & SELECTED)
Key->Shift[0] = 2;
else if (KRDShiftAcc3Gadget.Flags & SELECTED)
Key->Shift[0] = 3;
else if (KRDShiftAcc4Gadget.Flags & SELECTED)
Key->Shift[0] = 4;
else
Key->Shift[0] = 5;
Key->Shift[1] = '\x00';
} /* switch */
switch (Key->AltOpt) {
case KC_NOQUAL:
Key->AltLen = CollapseCtrl(Key->Alt, KRDAltNormalStrGadSIBuff, 1);
break;
case DPF_MOD:
Key->AltLen = 6;
CollapseCtrl(&Key->Alt[0], KRDAltMod0StrGadSIBuff, 1);
CollapseCtrl(&Key->Alt[1], KRDAltMod1StrGadSIBuff, 1);
CollapseCtrl(&Key->Alt[2], KRDAltMod2StrGadSIBuff, 1);
CollapseCtrl(&Key->Alt[3], KRDAltMod3StrGadSIBuff, 1);
CollapseCtrl(&Key->Alt[4], KRDAltMod4StrGadSIBuff, 1);
CollapseCtrl(&Key->Alt[5], KRDAltMod5StrGadSIBuff, 1);
break;
case DPF_DEAD:
Key->AltLen = 1;
if (KRDAltAcc1Gadget.Flags & SELECTED)
Key->Alt[0] = 1;
else if (KRDAltAcc2Gadget.Flags & SELECTED)
Key->Alt[0] = 2;
else if (KRDAltAcc3Gadget.Flags & SELECTED)
Key->Alt[0] = 3;
else if (KRDAltAcc4Gadget.Flags & SELECTED)
Key->Alt[0] = 4;
else
Key->Alt[0] = 5;
Key->Alt[1] = '\x00';
} /* switch */
switch (Key->ShiftAltOpt) {
case KC_NOQUAL:
Key->ShiftAltLen = CollapseCtrl(Key->ShiftAlt, KRDShiftAltNormalStrGadSIBuff, 1);
break;
case DPF_MOD:
Key->ShiftAltLen = 6;
CollapseCtrl(&Key->ShiftAlt[0], KRDShiftAltMod0StrGadSIBuff, 1);
CollapseCtrl(&Key->ShiftAlt[1], KRDShiftAltMod1StrGadSIBuff, 1);
CollapseCtrl(&Key->ShiftAlt[2], KRDShiftAltMod2StrGadSIBuff, 1);
CollapseCtrl(&Key->ShiftAlt[3], KRDShiftAltMod3StrGadSIBuff, 1);
CollapseCtrl(&Key->ShiftAlt[4], KRDShiftAltMod4StrGadSIBuff, 1);
CollapseCtrl(&Key->ShiftAlt[5], KRDShiftAltMod5StrGadSIBuff, 1);
break;
case DPF_DEAD:
Key->ShiftAltLen = 1;
if (KRDShiftAltAcc1Gadget.Flags & SELECTED)
Key->ShiftAlt[0] = 1;
else if (KRDShiftAltAcc2Gadget.Flags & SELECTED)
Key->ShiftAlt[0] = 2;
else if (KRDShiftAltAcc3Gadget.Flags & SELECTED)
Key->ShiftAlt[0] = 3;
else if (KRDShiftAltAcc4Gadget.Flags & SELECTED)
Key->ShiftAlt[0] = 4;
else
Key->ShiftAlt[0] = 5;
Key->ShiftAlt[1] = '\x00';
} /* switch */
switch (Key->CtrlOpt) {
case KC_NOQUAL:
Key->CtrlLen = CollapseCtrl(Key->Ctrl, KRDCtrlNormalStrGadSIBuff, 1);
break;
case DPF_MOD:
Key->CtrlLen = 6;
CollapseCtrl(&Key->Ctrl[0], KRDCtrlMod0StrGadSIBuff, 1);
CollapseCtrl(&Key->Ctrl[1], KRDCtrlMod1StrGadSIBuff, 1);
CollapseCtrl(&Key->Ctrl[2], KRDCtrlMod2StrGadSIBuff, 1);
CollapseCtrl(&Key->Ctrl[3], KRDCtrlMod3StrGadSIBuff, 1);
CollapseCtrl(&Key->Ctrl[4], KRDCtrlMod4StrGadSIBuff, 1);
CollapseCtrl(&Key->Ctrl[5], KRDCtrlMod5StrGadSIBuff, 1);
break;
case DPF_DEAD:
Key->CtrlLen = 1;
if (KRDCtrlAcc1Gadget.Flags & SELECTED)
Key->Ctrl[0] = 1;
else if (KRDCtrlAcc2Gadget.Flags & SELECTED)
Key->Ctrl[0] = 2;
else if (KRDCtrlAcc3Gadget.Flags & SELECTED)
Key->Ctrl[0] = 3;
else if (KRDCtrlAcc4Gadget.Flags & SELECTED)
Key->Ctrl[0] = 4;
else
Key->Ctrl[0] = 5;
Key->Ctrl[1] = '\x00';
} /* switch */
switch (Key->CtrlShiftOpt) {
case KC_NOQUAL:
Key->CtrlShiftLen = CollapseCtrl(Key->CtrlShift, KRDCtrlShiftNormalStrGadSIBuff, 1);
break;
case DPF_MOD:
Key->CtrlShiftLen = 6;
CollapseCtrl(&Key->CtrlShift[0], KRDCtrlShiftMod0StrGadSIBuff, 1);
CollapseCtrl(&Key->CtrlShift[1], KRDCtrlShiftMod1StrGadSIBuff, 1);
CollapseCtrl(&Key->CtrlShift[2], KRDCtrlShiftMod2StrGadSIBuff, 1);
CollapseCtrl(&Key->CtrlShift[3], KRDCtrlShiftMod3StrGadSIBuff, 1);
CollapseCtrl(&Key->CtrlShift[4], KRDCtrlShiftMod4StrGadSIBuff, 1);
CollapseCtrl(&Key->CtrlShift[5], KRDCtrlShiftMod5StrGadSIBuff, 1);
break;
case DPF_DEAD:
Key->CtrlShiftLen = 1;
if (KRDCtrlShiftAcc1Gadget.Flags & SELECTED)
Key->CtrlShift[0] = 1;
else if (KRDCtrlShiftAcc2Gadget.Flags & SELECTED)
Key->CtrlShift[0] = 2;
else if (KRDCtrlShiftAcc3Gadget.Flags & SELECTED)
Key->CtrlShift[0] = 3;
else if (KRDCtrlShiftAcc4Gadget.Flags & SELECTED)
Key->CtrlShift[0] = 4;
else
Key->CtrlShift[0] = 5;
Key->CtrlShift[1] = '\x00';
} /* switch */
switch (Key->CtrlAltOpt) {
case KC_NOQUAL:
Key->CtrlAltLen = CollapseCtrl(Key->CtrlAlt, KRDCtrlAltNormalStrGadSIBuff, 1);
break;
case DPF_MOD:
Key->CtrlAltLen = 6;
CollapseCtrl(&Key->CtrlAlt[0], KRDCtrlAltMod0StrGadSIBuff, 1);
CollapseCtrl(&Key->CtrlAlt[1], KRDCtrlAltMod1StrGadSIBuff, 1);
CollapseCtrl(&Key->CtrlAlt[2], KRDCtrlAltMod2StrGadSIBuff, 1);
CollapseCtrl(&Key->CtrlAlt[3], KRDCtrlAltMod3StrGadSIBuff, 1);
CollapseCtrl(&Key->CtrlAlt[4], KRDCtrlAltMod4StrGadSIBuff, 1);
CollapseCtrl(&Key->CtrlAlt[5], KRDCtrlAltMod5StrGadSIBuff, 1);
break;
case DPF_DEAD:
Key->CtrlAltLen = 1;
if (KRDCtrlAltAcc1Gadget.Flags & SELECTED)
Key->CtrlAlt[0] = 1;
else if (KRDCtrlAltAcc2Gadget.Flags & SELECTED)
Key->CtrlAlt[0] = 2;
else if (KRDCtrlAltAcc3Gadget.Flags & SELECTED)
Key->CtrlAlt[0] = 3;
else if (KRDCtrlAltAcc4Gadget.Flags & SELECTED)
Key->CtrlAlt[0] = 4;
else
Key->CtrlAlt[0] = 5;
Key->CtrlAlt[1] = '\x00';
} /* switch */
switch (Key->VanillaOpt) {
case KC_NOQUAL:
Key->VanillaLen = CollapseCtrl(Key->Vanilla, KRDVanillaNormalStrGadSIBuff, 1);
break;
case DPF_MOD:
Key->VanillaLen = 6;
CollapseCtrl(&Key->Vanilla[0], KRDVanillaMod0StrGadSIBuff, 1);
CollapseCtrl(&Key->Vanilla[1], KRDVanillaMod1StrGadSIBuff, 1);
CollapseCtrl(&Key->Vanilla[2], KRDVanillaMod2StrGadSIBuff, 1);
CollapseCtrl(&Key->Vanilla[3], KRDVanillaMod3StrGadSIBuff, 1);
CollapseCtrl(&Key->Vanilla[4], KRDVanillaMod4StrGadSIBuff, 1);
CollapseCtrl(&Key->Vanilla[5], KRDVanillaMod5StrGadSIBuff, 1);
break;
case DPF_DEAD:
Key->VanillaLen = 1;
if (KRDVanillaAcc1Gadget.Flags & SELECTED)
Key->Vanilla[0] = 1;
else if (KRDVanillaAcc2Gadget.Flags & SELECTED)
Key->Vanilla[0] = 2;
else if (KRDVanillaAcc3Gadget.Flags & SELECTED)
Key->Vanilla[0] = 3;
else if (KRDVanillaAcc4Gadget.Flags & SELECTED)
Key->Vanilla[0] = 4;
else
Key->Vanilla[0] = 5;
Key->Vanilla[1] = '\x00';
} /* switch */
break;
case KCF_NOP:
break;
} /* switch */
}
/*
* Update Key Map
*/
void UpdateKeyMap(Key, KeyCode)
struct KeyNode *Key;
USHORT KeyCode;
{
struct HalfKeyMap *HalfKeyMap;
ULONG KeyMapVal;
UBYTE *KeyMapPtr;
UBYTE buff[256];
UBYTE len, offsets;
if (KeyCode < 0x40)
HalfKeyMap = (struct HalfKeyMap *)&KeyMapNode->kn_KeyMap;
else {
HalfKeyMap = (struct HalfKeyMap *)&KeyMapNode->kn_KeyMap.km_HiKeyMapTypes;
KeyCode -= 0x40;
}
switch (HalfKeyMap->KeyMapTypes[KeyCode] & (KCF_STRING|KCF_DEAD|KCF_NOP)) {
case KC_NOQUAL:
HalfKeyMap->KeyMapTypes[KeyCode] = KCF_NOP;
HalfKeyMap->KeyMap[KeyCode] = NULL;
break;
case KCF_STRING:
len = StringKeyLength(HalfKeyMap, KeyCode, &offsets);
FreeMem((char *)HalfKeyMap->KeyMap[KeyCode], len);
HalfKeyMap->KeyMapTypes[KeyCode] = KCF_NOP;
HalfKeyMap->KeyMap[KeyCode] = NULL;
break;
case KCF_DEAD:
len = DeadKeyLength(HalfKeyMap, KeyCode, &offsets);
FreeMem((char *)HalfKeyMap->KeyMap[KeyCode], len);
HalfKeyMap->KeyMapTypes[KeyCode] = KCF_NOP;
HalfKeyMap->KeyMap[KeyCode] = NULL;
break;
} /* switch */
switch (Key->Type & (KCF_STRING|KCF_DEAD|KCF_NOP)) {
case KC_NOQUAL:
KeyMapVal = Key->Alone[0];
if (Key->Type & KCF_SHIFT)
KeyMapVal |= Key->Shift[0]<<8;
else if (Key->Type & KCF_ALT)
KeyMapVal |= Key->Alt[0]<<8;
else if (Key->Type & KCF_CONTROL)
KeyMapVal |= Key->Ctrl[0]<<8;
if ((Key->Type & KCF_ALT) && (Key->Type & KCF_SHIFT))
KeyMapVal |= Key->Alt[0]<<16;
else if ((Key->Type & KCF_CONTROL) && (Key->Type & (KCF_SHIFT|KCF_ALT)))
KeyMapVal |= Key->Ctrl[0]<<16;
if ((Key->Type & (KCF_SHIFT|KCF_ALT)) == (KCF_SHIFT|KCF_ALT))
KeyMapVal |= Key->ShiftAlt[0]<<24;
else if ((Key->Type & (KCF_CONTROL|KCF_SHIFT)) == (KCF_CONTROL|KCF_SHIFT))
KeyMapVal |= Key->CtrlShift[0]<<24;
else if ((Key->Type & (KCF_CONTROL|KCF_ALT)) == (KCF_CONTROL|KCF_ALT))
KeyMapVal |= Key->CtrlAlt[0]<<24;
break;
case KCF_STRING:
buff[len = 0] = Key->AloneLen;
if (Key->Type & KCF_SHIFT)
buff[len += 2] = Key->ShiftLen;
if (Key->Type & KCF_ALT)
buff[len += 2] = Key->AltLen;
if ((Key->Type & (KCF_SHIFT|KCF_ALT)) == (KCF_SHIFT|KCF_ALT))
buff[len += 2] = Key->ShiftAltLen;
if (Key->Type & KCF_CONTROL)
buff[len += 2] = Key->CtrlLen;
if ((Key->Type & (KCF_CONTROL|KCF_SHIFT)) == (KCF_CONTROL|KCF_SHIFT))
buff[len += 2] = Key->CtrlShiftLen;
if ((Key->Type & (KCF_CONTROL|KCF_ALT)) == (KCF_CONTROL|KCF_ALT))
buff[len += 2] = Key->CtrlAltLen;
if ((Key->Type & KC_VANILLA) == KC_VANILLA)
buff[len += 2] = Key->VanillaLen;
memcpy(&buff[len += 2], Key->Alone, Key->AloneLen);
buff[offsets = 1] = len;
len += Key->AloneLen;
if (Key->Type & KCF_SHIFT) {
memcpy(&buff[len], Key->Shift, Key->ShiftLen);
buff[offsets += 2] = len;
len += Key->ShiftLen;
}
if (Key->Type & KCF_ALT) {
memcpy(&buff[len], Key->Alt, Key->AltLen);
buff[offsets += 2] = len;
len += Key->AltLen;
}
if ((Key->Type & (KCF_SHIFT|KCF_ALT)) == (KCF_SHIFT|KCF_ALT)) {
memcpy(&buff[len], Key->ShiftAlt, Key->ShiftAltLen);
buff[offsets += 2] = len;
len += Key->ShiftAltLen;
}
if (Key->Type & KCF_CONTROL) {
memcpy(&buff[len], Key->Ctrl, Key->CtrlLen);
buff[offsets += 2] = len;
len += Key->CtrlLen;
}
if ((Key->Type & (KCF_CONTROL|KCF_SHIFT)) == (KCF_CONTROL|KCF_SHIFT)) {
memcpy(&buff[len], Key->CtrlShift, Key->CtrlShiftLen);
buff[offsets += 2] = len;
len += Key->CtrlShiftLen;
}
if ((Key->Type & (KCF_CONTROL|KCF_ALT)) == (KCF_CONTROL|KCF_ALT)) {
memcpy(&buff[len], Key->CtrlAlt, Key->CtrlAltLen);
buff[offsets += 2] = len;
len += Key->CtrlAltLen;
}
if ((Key->Type & KC_VANILLA) == KC_VANILLA) {
memcpy(&buff[len], Key->Vanilla, Key->VanillaLen);
buff[offsets += 2] = len;
len += Key->VanillaLen;
}
break;
case KCF_DEAD:
buff[len = 0] = Key->AloneOpt;
if (Key->Type & KCF_SHIFT)
buff[len += 2] = Key->ShiftOpt;
if (Key->Type & KCF_ALT)
buff[len += 2] = Key->AltOpt;
if ((Key->Type & (KCF_SHIFT|KCF_ALT)) == (KCF_SHIFT|KCF_ALT))
buff[len += 2] = Key->ShiftAltOpt;
if (Key->Type & KCF_CONTROL)
buff[len += 2] = Key->CtrlOpt;
if ((Key->Type & (KCF_CONTROL|KCF_SHIFT)) == (KCF_CONTROL|KCF_SHIFT))
buff[len += 2] = Key->CtrlShiftOpt;
if ((Key->Type & (KCF_CONTROL|KCF_ALT)) == (KCF_CONTROL|KCF_ALT))
buff[len += 2] = Key->CtrlAltOpt;
if ((Key->Type & KC_VANILLA) == KC_VANILLA)
buff[len += 2] = Key->VanillaOpt;
len += 2;
switch (Key->AloneOpt) {
case KC_NOQUAL:
case DPF_DEAD:
buff[offsets = 1] = Key->Alone[0];
break;
case DPF_MOD:
memcpy(&buff[len], Key->Alone, 6);
buff[offsets = 1] = len;
len += 6;
} /* switch */
if (Key->Type & KCF_SHIFT)
switch (Key->ShiftOpt) {
case KC_NOQUAL:
case DPF_DEAD:
buff[offsets += 2] = Key->Shift[0];
break;
case DPF_MOD:
memcpy(&buff[len], Key->Shift, 6);
buff[offsets += 2] = len;
len += 6;
} /* switch */
if (Key->Type & KCF_ALT)
switch (Key->AltOpt) {
case KC_NOQUAL:
case DPF_DEAD:
buff[offsets += 2] = Key->Alt[0];
break;
case DPF_MOD:
memcpy(&buff[len], Key->Alt, 6);
buff[offsets += 2] = len;
len += 6;
} /* switch */
if ((Key->Type & (KCF_SHIFT|KCF_ALT)) == (KCF_SHIFT|KCF_ALT))
switch (Key->ShiftAltOpt) {
case KC_NOQUAL:
case DPF_DEAD:
buff[offsets += 2] = Key->ShiftAlt[0];
break;
case DPF_MOD:
memcpy(&buff[len], Key->ShiftAlt, 6);
buff[offsets += 2] = len;
len += 6;
} /* switch */
if (Key->Type & KCF_CONTROL)
switch (Key->CtrlOpt) {
case KC_NOQUAL:
case DPF_DEAD:
buff[offsets += 2] = Key->Ctrl[0];
break;
case DPF_MOD:
memcpy(&buff[len], Key->Ctrl, 6);
buff[offsets += 2] = len;
len += 6;
} /* switch */
if ((Key->Type & (KCF_CONTROL|KCF_SHIFT)) == (KCF_CONTROL|KCF_SHIFT))
switch (Key->CtrlShiftOpt) {
case KC_NOQUAL:
case DPF_DEAD:
buff[offsets += 2] = Key->CtrlShift[0];
break;
case DPF_MOD:
memcpy(&buff[len], Key->CtrlShift, 6);
buff[offsets += 2] = len;
len += 6;
} /* switch */
if ((Key->Type & (KCF_CONTROL|KCF_ALT)) == (KCF_CONTROL|KCF_ALT))
switch (Key->CtrlAltOpt) {
case KC_NOQUAL:
case DPF_DEAD:
buff[offsets += 2] = Key->CtrlAlt[0];
break;
case DPF_MOD:
memcpy(&buff[len], Key->CtrlAlt, 6);
buff[offsets += 2] = len;
len += 6;
} /* switch */
if ((Key->Type & KC_VANILLA) == KC_VANILLA)
switch (Key->VanillaOpt) {
case KC_NOQUAL:
case DPF_DEAD:
buff[offsets += 2] = Key->Vanilla[0];
break;
case DPF_MOD:
memcpy(&buff[len], Key->Vanilla, 6);
buff[offsets += 2] = len;
len += 6;
} /* switch */
break;
case KCF_NOP:
KeyMapVal = NULL;
} /* switch */
if (Key->Type & (KCF_STRING|KCF_DEAD)) {
if ((KeyMapPtr = (char *)AllocMem(len, MEMF_CLEAR)) != NULL)
memcpy(KeyMapPtr, buff, len);
else {
Write(Output(), "Memory Allocation Failed, UpdateKeyMap\n", 39);
Key->Type = KCF_NOP;
HalfKeyMap->KeyMap[KeyCode] = NULL;
}
HalfKeyMap->KeyMap[KeyCode] = (ULONG)KeyMapPtr;
}
else
HalfKeyMap->KeyMap[KeyCode] = KeyMapVal;
HalfKeyMap->KeyMapTypes[KeyCode] = Key->Type;
if (Key->Capsable)
HalfKeyMap->Capsable[KeyCode/8] |= (1<<(KeyCode % 8));
else
HalfKeyMap->Capsable[KeyCode/8] &= ~(1<<(KeyCode % 8));
if (Key->Repeatable)
HalfKeyMap->Repeatable[KeyCode/8] |= (1<<(KeyCode % 8));
else
HalfKeyMap->Repeatable[KeyCode/8] &= ~(1<<(KeyCode % 8));
}
/*
* Expand Control Characters
*/
int ExpandCtrl(to, from, len)
unsigned char *to;
unsigned char *from;
int len;
{
int reslen = 0;
int count;
for (count = 0; count < len; count++)
if ((from[count] > '\x20') && (from[count] < '\x7F') && (from[count] != '\\'))
to[reslen++] = from[count];
else
switch (from[count]) {
case '\n':
to[reslen++] = '\\';
to[reslen++] = 'n';
break;
case '\t':
to[reslen++] = '\\';
to[reslen++] = 't';
break;
case '\v':
to[reslen++] = '\\';
to[reslen++] = 'v';
break;
case '\b':
to[reslen++] = '\\';
to[reslen++] = 'b';
break;
case '\r':
to[reslen++] = '\\';
to[reslen++] = 'r';
break;
case '\f':
to[reslen++] = '\\';
to[reslen++] = 'f';
break;
case '\\':
to[reslen++] = '\\';
to[reslen++] = '\\';
break;
default:
to[reslen++] = '\\';
to[reslen++] = 'x';
if (from[count] < 0x10)
to[reslen++] = '0';
reslen += stci_h(&to[reslen], from[count]);
} /* switch */
to[reslen] = '\x00';
return(reslen-1);
}
/*
* Collapse Ctrl
*/
int CollapseCtrl(to, from, maxlen)
char *to;
char *from;
int maxlen;
{
int reslen = 0;
int count, offset, num;
char digit;
for (count = 0; from[count] && (reslen < maxlen);)
if (from[count] != '\\')
to[reslen++] = from[count++];
else {
offset = 1;
switch (from[count+1]) {
case 'N':
case 'n':
to[reslen++] = '\n';
break;
case 'T':
case 't':
to[reslen++] = '\t';
break;
case 'V':
case 'v':
to[reslen++] = '\v';
break;
case 'B':
case 'b':
to[reslen++] = '\b';
break;
case 'R':
case 'r':
to[reslen++] = '\r';
break;
case 'F':
case 'f':
to[reslen++] = '\f';
break;
case '\\':
to[reslen++] = '\\';
break;
case 'X':
case 'x':
num = 0;
for (offset++; ((offset < 4) && (digit = tolower(from[count+offset])) && (isxdigit(digit))); offset++)
if (isdigit(digit))
num = (num<<4) | (digit-0x30);
else
num = (num<<4) | (tolower(digit)-0x57);
to[reslen++] = num;
break;
default:
num = 0;
for (;((offset < 4) && (digit = from[count+offset]) && ((digit >= '0') && (digit <= '7'))); offset++)
num = (num<<3) | (digit - 0x30);
to[reslen++] = num;
} /* switch */
if (offset > 3)
offset -= 1;
count += (1 + offset);
}
return(reslen);
}