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_ProcMenu.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-03-13
|
5KB
|
186 lines
/*
* 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 */
}