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 >
C/C++ Source or Header  |  1989-03-13  |  5KB  |  186 lines

  1. /*
  2.  * Key Map Editor ver 1.0
  3.  * Process Menu
  4.  *
  5.  * parameter:     Code - Code returned by IDCMP
  6.  * returns:     True if execute should be continued
  7.  *        False if Quit option selected
  8.  *
  9.  * by: Tim Friest
  10.  * on: January 1, 1989
  11.  */
  12.  
  13. #include "KME_Includes.h"
  14. #include "KME_Protos.h"
  15. #include "KME_Defs.h"
  16. #include "KME_Pointers.h"
  17. #include "KME_Globals.h"
  18.  
  19. extern    UBYTE    FileNameBuff[30];
  20.  
  21. int ProcMenu(Code)
  22. unsigned short    Code;
  23. {
  24.     int    Num, Item;
  25.  
  26.     Num = MENUNUM(Code);
  27.     Item = ITEMNUM(Code);
  28.  
  29.     switch (Num) {
  30.         case 0:    /* Project Menu */
  31.             switch (Item) {
  32.                 case 0:    /* Load KeyMap */
  33.                     KeyMapIO(FileNameBuff, LOAD);
  34.                     break;
  35.                 case 1: /* New KeyMap */
  36.                     KeyMapNode = MakeNewKeyMap();
  37.                     break;
  38.                 case 2:    /* Save KeyMap */
  39.                     KeyMapIO(FileNameBuff, SAVE);
  40.                     break;
  41.                 case 4:    /* Exit Editor */
  42.                     if (CheckFlag(SF_Modified))
  43.                         return(!VerifyReq());
  44.                     else
  45.                         return(FALSE);
  46.             }
  47.             break;
  48.         case 1:    /* Options Menu */
  49.             switch (Item) {
  50.                 case 0:    /* Define Key Codes */
  51.                     ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear));
  52.                     FromKeyGad = NULL;
  53.                     SetFlag(SF_Define);
  54.                     if (CheckFlag(SF_Pointer))
  55.                         ChangePointer(0);
  56.                     break;
  57.                 case 1:    /* Copy Key Codes */
  58.                     ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear));
  59.                     FromKeyGad = NULL;
  60.                     SetFlag(SF_Copy);
  61.                     ChangePointer(SF_Copy);
  62.                     break;
  63.                 case 2:    /* Move Key Codes */
  64.                     ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear));
  65.                     FromKeyGad = NULL;
  66.                     SetFlag(SF_Move);
  67.                     ChangePointer(SF_Move);
  68.                     break;
  69.                 case 3:    /* Swap Key Codes */
  70.                     ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear));
  71.                     FromKeyGad = NULL;
  72.                     SetFlag(SF_Swap);
  73.                     ChangePointer(SF_Swap);
  74.                     break;
  75.                 case 4:    /* Clear Key Codes */
  76.                     ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear));
  77.                     FromKeyGad = NULL;
  78.                     SetFlag(SF_Clear);
  79.                     ChangePointer(SF_Clear);
  80.             }
  81.     }
  82.     return(TRUE);
  83. }
  84.  
  85. /*
  86.  * Make New Key Map
  87.  *
  88.  * returns:    KeyMapNode - KeyMapNode Pointer
  89.  */
  90. struct KeyMapNode *MakeNewKeyMap()
  91. {
  92.     struct KeyMapNode *NewKeyMapNode;
  93.     UBYTE    *ptr;
  94.     USHORT    code;
  95.  
  96.     if (CheckResource(RF_KeyMap))
  97.         FreeKeyMap(KeyMapNode);
  98.     if ((NewKeyMapNode = (struct KeyMapNode *)AllocMem((KeyNodeSize + KeyMapSize), MEMF_CLEAR)) == NULL) {
  99.         Write(Output(), "Memory Allocation failed, MakeNewKeyMapNode\n", 44);
  100.         return(NULL);
  101.     }
  102.     ptr = (UBYTE *)NewKeyMapNode;
  103.     NewKeyMapNode->kn_KeyMap.km_LoKeyMapTypes = (UBYTE *)&ptr[KeyNodeSize];
  104.     NewKeyMapNode->kn_KeyMap.km_LoKeyMap = (ULONG *)&ptr[KeyNodeSize + 0x40];
  105.     NewKeyMapNode->kn_KeyMap.km_LoCapsable = (UBYTE *)&ptr[KeyNodeSize + 0x40 + 0x40*4];
  106.     NewKeyMapNode->kn_KeyMap.km_LoRepeatable = (UBYTE *)&ptr[KeyNodeSize + 0x40 + 0x40*4 + 8];
  107.     NewKeyMapNode->kn_KeyMap.km_HiKeyMapTypes = (UBYTE *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8)];
  108.     NewKeyMapNode->kn_KeyMap.km_HiKeyMap = (ULONG *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8) + 0x38];
  109.     NewKeyMapNode->kn_KeyMap.km_HiCapsable = (UBYTE *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8) + 0x38 + 0x38*4];
  110.     NewKeyMapNode->kn_KeyMap.km_HiRepeatable = (UBYTE *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8) + 0x38 + 0x38*4 + 7];
  111.     for (code = 0; code < 0x40; code++)
  112.         NewKeyMapNode->kn_KeyMap.km_LoKeyMapTypes[code] = KCF_NOP;
  113.     for (code = 0; code < 0x38; code++)
  114.         NewKeyMapNode->kn_KeyMap.km_HiKeyMapTypes[code] = KCF_NOP;
  115.     FlagResource(RF_KeyMap);
  116.     UpdateDisplay(GadgetList, NewKeyMapNode, TRUE);
  117.     return(NewKeyMapNode);
  118. }
  119.  
  120. /*
  121.  * Verify Requester
  122.  */
  123.  
  124. struct IntuiText    VerifyReqMsg = {
  125.     0, 1, JAM1,
  126.     15, 20,
  127.     NULL,
  128.     "Key Map has been Modified",
  129.     NULL
  130. };
  131. struct IntuiText    ContinueReqMsg = {
  132.     0, 1, JAM1,
  133.     6, 3,
  134.     NULL,
  135.     "Continue",
  136.     NULL
  137. };
  138. struct IntuiText    CancelReqMsg = {
  139.     0, 1, JAM1,
  140.     6, 3,
  141.     NULL,
  142.     "Cancel",
  143.     NULL
  144. };
  145.  
  146. int VerifyReq()
  147. {
  148.     return(AutoRequest(KeyMapEdWindow, &VerifyReqMsg, &ContinueReqMsg,
  149.         &CancelReqMsg, NULL, NULL, 250, 75));
  150. }
  151.  
  152. /*
  153.  * Change Pointer
  154.  *
  155.  * Parameter:    Option - Option bit from StatusFlags
  156.  */
  157. void ChangePointer(Option)
  158. unsigned long Option;
  159. {
  160.     switch (Option) {
  161.         case 0:
  162.             SetPointer(KeyMapEdWindow, NULL, 0, 0, 0, 0);
  163.             ClearFlag(SF_Pointer);
  164.             break;
  165.         case SF_Copy:
  166.             SetPointer(KeyMapEdWindow, (short *)CopyPtrSpriteImage, 31, 12, -2, -1);
  167.             SetFlag(SF_Pointer);
  168.             break;
  169.         case SF_Move:
  170.             SetPointer(KeyMapEdWindow, (short *)MovePtrSpriteImage, 28, 15, -2, -2);
  171.             SetFlag(SF_Pointer);
  172.             break;
  173.         case SF_Swap:
  174.             SetPointer(KeyMapEdWindow, (short *)SwapPtrSpriteImage, 30, 14, -2, -2);
  175.             SetFlag(SF_Pointer);
  176.             break;
  177.         case SF_Clear:
  178.             SetPointer(KeyMapEdWindow, (short *)ClearPtrSpriteImage, 33, 16, -2, -3);
  179.             SetFlag(SF_Pointer);
  180.             break;
  181.         case -1:
  182.             SetPointer(KeyMapEdWindow, (short *)ToPtrSpriteImage,17, 11, -2, -1);
  183.             SetFlag(SF_Pointer);
  184.     } /* switch */
  185. }
  186.