/* * Key Map Editor ver 1.0 * Process Menu * * parameter: Code - Code returned by IDCMP * returns: True if execute should be continued * False if Quit option selected * * by: Tim Friest * on: January 1, 1989 */ #include "KME_Includes.h" #include "KME_Protos.h" #include "KME_Defs.h" #include "KME_Pointers.h" #include "KME_Globals.h" extern UBYTE FileNameBuff[30]; int ProcMenu(Code) unsigned short Code; { int Num, Item; Num = MENUNUM(Code); Item = ITEMNUM(Code); switch (Num) { case 0: /* Project Menu */ switch (Item) { case 0: /* Load KeyMap */ KeyMapIO(FileNameBuff, LOAD); break; case 1: /* New KeyMap */ KeyMapNode = MakeNewKeyMap(); break; case 2: /* Save KeyMap */ KeyMapIO(FileNameBuff, SAVE); break; case 4: /* Exit Editor */ if (CheckFlag(SF_Modified)) return(!VerifyReq()); else return(FALSE); } break; case 1: /* Options Menu */ switch (Item) { case 0: /* Define Key Codes */ ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear)); FromKeyGad = NULL; SetFlag(SF_Define); if (CheckFlag(SF_Pointer)) ChangePointer(0); break; case 1: /* Copy Key Codes */ ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear)); FromKeyGad = NULL; SetFlag(SF_Copy); ChangePointer(SF_Copy); break; case 2: /* Move Key Codes */ ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear)); FromKeyGad = NULL; SetFlag(SF_Move); ChangePointer(SF_Move); break; case 3: /* Swap Key Codes */ ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear)); FromKeyGad = NULL; SetFlag(SF_Swap); ChangePointer(SF_Swap); break; case 4: /* Clear Key Codes */ ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear)); FromKeyGad = NULL; SetFlag(SF_Clear); ChangePointer(SF_Clear); } } return(TRUE); } /* * Make New Key Map * * returns: KeyMapNode - KeyMapNode Pointer */ struct KeyMapNode *MakeNewKeyMap() { struct KeyMapNode *NewKeyMapNode; UBYTE *ptr; USHORT code; if (CheckResource(RF_KeyMap)) FreeKeyMap(KeyMapNode); if ((NewKeyMapNode = (struct KeyMapNode *)AllocMem((KeyNodeSize + KeyMapSize), MEMF_CLEAR)) == NULL) { Write(Output(), "Memory Allocation failed, MakeNewKeyMapNode\n", 44); return(NULL); } ptr = (UBYTE *)NewKeyMapNode; NewKeyMapNode->kn_KeyMap.km_LoKeyMapTypes = (UBYTE *)&ptr[KeyNodeSize]; NewKeyMapNode->kn_KeyMap.km_LoKeyMap = (ULONG *)&ptr[KeyNodeSize + 0x40]; NewKeyMapNode->kn_KeyMap.km_LoCapsable = (UBYTE *)&ptr[KeyNodeSize + 0x40 + 0x40*4]; NewKeyMapNode->kn_KeyMap.km_LoRepeatable = (UBYTE *)&ptr[KeyNodeSize + 0x40 + 0x40*4 + 8]; NewKeyMapNode->kn_KeyMap.km_HiKeyMapTypes = (UBYTE *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8)]; NewKeyMapNode->kn_KeyMap.km_HiKeyMap = (ULONG *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8) + 0x38]; NewKeyMapNode->kn_KeyMap.km_HiCapsable = (UBYTE *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8) + 0x38 + 0x38*4]; NewKeyMapNode->kn_KeyMap.km_HiRepeatable = (UBYTE *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8) + 0x38 + 0x38*4 + 7]; for (code = 0; code < 0x40; code++) NewKeyMapNode->kn_KeyMap.km_LoKeyMapTypes[code] = KCF_NOP; for (code = 0; code < 0x38; code++) NewKeyMapNode->kn_KeyMap.km_HiKeyMapTypes[code] = KCF_NOP; FlagResource(RF_KeyMap); UpdateDisplay(GadgetList, NewKeyMapNode, TRUE); return(NewKeyMapNode); } /* * Verify Requester */ struct IntuiText VerifyReqMsg = { 0, 1, JAM1, 15, 20, NULL, "Key Map has been Modified", NULL }; struct IntuiText ContinueReqMsg = { 0, 1, JAM1, 6, 3, NULL, "Continue", NULL }; struct IntuiText CancelReqMsg = { 0, 1, JAM1, 6, 3, NULL, "Cancel", NULL }; int VerifyReq() { return(AutoRequest(KeyMapEdWindow, &VerifyReqMsg, &ContinueReqMsg, &CancelReqMsg, NULL, NULL, 250, 75)); } /* * Change Pointer * * Parameter: Option - Option bit from StatusFlags */ void ChangePointer(Option) unsigned long Option; { switch (Option) { case 0: SetPointer(KeyMapEdWindow, NULL, 0, 0, 0, 0); ClearFlag(SF_Pointer); break; case SF_Copy: SetPointer(KeyMapEdWindow, (short *)CopyPtrSpriteImage, 31, 12, -2, -1); SetFlag(SF_Pointer); break; case SF_Move: SetPointer(KeyMapEdWindow, (short *)MovePtrSpriteImage, 28, 15, -2, -2); SetFlag(SF_Pointer); break; case SF_Swap: SetPointer(KeyMapEdWindow, (short *)SwapPtrSpriteImage, 30, 14, -2, -2); SetFlag(SF_Pointer); break; case SF_Clear: SetPointer(KeyMapEdWindow, (short *)ClearPtrSpriteImage, 33, 16, -2, -3); SetFlag(SF_Pointer); break; case -1: SetPointer(KeyMapEdWindow, (short *)ToPtrSpriteImage,17, 11, -2, -1); SetFlag(SF_Pointer); } /* switch */ }