home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / devcon / sanfrancisco_1989 / sf-devcon89.1 / commodities / lattice / cxsupp / ixusr.c < prev    next >
C/C++ Source or Header  |  1992-08-27  |  3KB  |  119 lines

  1. /* ixusr.c -- InputXpression routine examples    */
  2.  
  3. #define INTERNALSTUFF    0    /* requires pieces of system to link    */
  4.  
  5. #include "sysall.h"
  6. #include "cx/cxusr.h"
  7.  
  8. #if INTERNALSTUFF
  9. IX *
  10. CreateIX()
  11. {
  12.     IX *ix;
  13.     ix =  (IX *) AllocMem( (ULONG) sizeof (IX), (ULONG) MEMF_CLEAR);
  14.     if (ix) InitIX(ix);
  15.     return (ix);
  16. }
  17.  
  18. DeleteIX(ix)
  19. IX *ix;
  20. {
  21.     FreeMem( ix, (ULONG) sizeof (IX) ); 
  22. }
  23. #endif
  24.  
  25.  
  26. /* sets up an input expression to
  27.  * trigger on (shift or caps) downstrokes
  28.  */
  29. DownstrokeIX(code, only_caps, ix)
  30. ULONG    code;
  31. ULONG    only_caps;
  32. IX        *ix;
  33. {
  34.     ix->ix_Class = IECLASS_RAWKEY;
  35.     ix->ix_Code = code;            /* note that IECODE_UPPREFIX not set    */
  36.     ix->ix_CodeMask = 0xFFFF;    /* .. and I care about it            */
  37.  
  38.     /* trigger on just one of synonyms */
  39.     ix->ix_QualMask = IEQUALIFIER_LSHIFT | IEQUALIFIER_REPEAT;
  40.  
  41.     ix->ix_QualSame =    IXSYM_SHIFT;
  42.  
  43.     ix->ix_Qualifier =  only_caps? IEQUALIFIER_LSHIFT: 0;
  44. }
  45.  
  46.  
  47. #if INTERNALSTUFF
  48. LONG
  49. SubsetIX(ix, template)
  50. register IX    *ix;
  51. register IX    *template;
  52. {
  53.     /* TRUE return if every ievent which would match ix 
  54.      * also would match template
  55.      */
  56.  
  57.     LONG    success = 0;
  58.     UWORD    tmpqual;
  59.  
  60.     if (NULL_IX(template)) goto SUCCESS;
  61.     if (ix->ix_Class != template->ix_Class) goto FAIL;
  62.  
  63.     /* code    */
  64.     if (~ix->ix_CodeMask & template->ix_CodeMask) goto FAIL;
  65.     if (IX_NOMATCH( ix->ix_Code, template->ix_Code,
  66.             template->ix_CodeMask )) goto FAIL;
  67.  
  68.     /* qualifier    */
  69.     if (~ix->ix_QualMask & template->ix_QualMask) goto FAIL;
  70.  
  71.     tmpqual = ix_synonym(ix->ix_Qualifier, ix->ix_QualSame);
  72.     if (IX_NOMATCH(tmpqual, template->ix_Qualifier, template->ix_QualMask))
  73.     {
  74.         goto FAIL;
  75.     }
  76.  
  77. SUCCESS:
  78.     success = 1;
  79. FAIL:
  80.     return (success);
  81. }
  82. #endif
  83.  
  84. CarveIX(ix, ie)
  85. register IX                    *ix;
  86. register struct InputEvent    *ie;
  87. {
  88.     /* set up ix to match only ie    */
  89.  
  90.     ix->ix_Class        = ie->ie_Class;
  91.     ix->ix_Code            = ie->ie_Code;
  92.     ix->ix_CodeMask        = ~0;
  93.     ix->ix_Qualifier    = ie->ie_Qualifier;
  94.     ix->ix_QualMask        = ~0;
  95.     ix->ix_QualSame        = 0;
  96. }
  97.  
  98. dumpIX(ix)
  99. IX    *ix;
  100. {
  101.     printf("dump IX: %lx\n", ix);
  102.     if (ix->ix_Version != IX_VERSION)
  103.         printf("\tBad Version: %x should be %x.\n", ix->ix_Version, IX_VERSION);
  104.     printf("\tClass %x\n",ix->ix_Class);
  105.     printf("\tCode %x, (mask %x)\n",ix->ix_Code, ix->ix_CodeMask);
  106.     printf("\tQualifier %x (mask %x)\n",ix->ix_Qualifier, ix->ix_QualMask);
  107.     printf("\tQualSame %x\n", ix->ix_QualSame);
  108. }
  109.  
  110. dumpIE(ie)
  111. struct InputEvent *ie;
  112. {
  113.     printf("dump IE: %lx\n", ie);
  114.     printf("\tClass %x\n",ie->ie_Class);
  115.     printf("\tCode %x\n",ie->ie_Code);
  116.     printf("\tQualifier %x\n",ie->ie_Qualifier);
  117.     printf("\tEventAddress %lx\n", ie->ie_EventAddress);
  118. }
  119.