home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / CD32 / CD32_Support / examples / SA_Examples / lowlevel / KBInt / interrupt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-08-31  |  5.0 KB  |  208 lines

  1. /*
  2.  * System includes
  3.  */
  4.  
  5. #include <exec/types.h>
  6. #include <exec/memory.h>
  7.  
  8. #include <dos/dos.h>
  9.  
  10. #include <intuition/intuition.h>
  11. #include <intuition/gadgetclass.h>
  12.  
  13. #include <libraries/gadtools.h>
  14.  
  15. #include <devices/inputevent.h>
  16.  
  17. #include <libraries/lowlevel.h>
  18.  
  19. #include <clib/exec_protos.h>
  20. #include <clib/dos_protos.h>
  21. #include <clib/intuition_protos.h>
  22. #include <clib/gadtools_protos.h>
  23. #include <clib/keymap_protos.h>
  24. #include <clib/lowlevel_protos.h>
  25.  
  26. #include <pragmas/lowlevel_pragmas.h>
  27.  
  28. /*
  29.  * ANSI includes
  30.  */
  31.  
  32. #include <stdio.h>
  33. #include <stdlib.h>
  34. #include <string.h>
  35.  
  36. /*
  37.  * Local includes
  38.  */
  39.  
  40. #include "kbint.h"
  41.  
  42. /****** KBInt/kbUpdate ******************************************
  43. *
  44. *   NAME
  45. *       kbUpdate -- update keyboard status
  46. *
  47. *   SYNOPSIS
  48. *       kbUpdate();
  49. *
  50. *       void kbUpdate(void);
  51. *
  52. *   FUNCTION
  53. *       Update keyboard status.
  54. *
  55. *   INPUTS
  56. *       None
  57. *
  58. *   RESULT
  59. *       None
  60. *
  61. *   EXAMPLE
  62. *
  63. *   NOTES
  64. *
  65. *   BUGS
  66. *
  67. *   SEE ALSO
  68. *
  69. ******************************************************************************
  70. *
  71. */
  72. void kbUpdate(void)
  73. {
  74.  
  75.     static struct InputEvent ie;        /* InputEvent for use
  76.                                            with MapRawKey() */
  77.     static UBYTE mapBuffer[KB_MAP_LENGTH+1]; /* Mapped key event
  78.                                                 (with terminator) */
  79.  
  80.     WORD actual;
  81.  
  82.     /* Map raw key */
  83.     ie.ie_Class=IECLASS_RAWKEY;         /* Simulated IECLASS_RAWKEY event */
  84.     ie.ie_SubClass=0;
  85.     ie.ie_Code=kbCode&0xFFFF;           /* Key code is low-order word */
  86.     ie.ie_Qualifier=
  87.         (kbCode&LLKF_LSHIFT)?IEQUALIFIER_LSHIFT:NULL|
  88.         (kbCode&LLKF_RSHIFT)?IEQUALIFIER_RSHIFT:NULL|
  89.         (kbCode&LLKF_CAPSLOCK)?IEQUALIFIER_CAPSLOCK:NULL|
  90.         (kbCode&LLKF_CONTROL)?IEQUALIFIER_CONTROL:NULL|
  91.         (kbCode&LLKF_LALT)?IEQUALIFIER_LALT:NULL|
  92.         (kbCode&LLKF_RALT)?IEQUALIFIER_RALT:NULL|
  93.         (kbCode&LLKF_LAMIGA)?IEQUALIFIER_LCOMMAND:NULL|
  94.         (kbCode&LLKF_RAMIGA)?IEQUALIFIER_RCOMMAND:NULL;
  95.                                         /* Translate qualifiers to
  96.                                            InputEvent format */
  97.     ie.ie_EventAddress=&ie;
  98.     actual=MapRawKey(&ie,mapBuffer,KB_MAP_LENGTH,NULL);
  99.                                         /* Map using default keymap */
  100.     mapBuffer[actual]='\0';             /* Null-terminate mapped key event */
  101.     GT_SetGadgetAttrs(keyGadget,window,NULL,
  102.         GTTX_Text, mapBuffer,
  103.         TAG_DONE);                      /* Update Key gadget */
  104.  
  105.     /* Update Code gadget */
  106.     GT_SetGadgetAttrs(codeGadget,window,NULL,
  107.         GTNM_Number, (kbCode&0xFFFF)&(~IECODE_UP_PREFIX),
  108.                                         /* Key code is low-order word;
  109.                                            mask out up prefix */
  110.         TAG_DONE);
  111.  
  112.     /* Update Transition gadget */
  113.     GT_SetGadgetAttrs(transitionGadget,window,NULL,
  114.         GTTX_Text, kbCode&IECODE_UP_PREFIX?"Release":"Press",
  115.         TAG_DONE);
  116.  
  117.     /* Update LShift gadget */
  118.     GT_SetGadgetAttrs(lShiftGadget,window,NULL,
  119.         GTCB_Checked, kbCode&LLKF_LSHIFT,
  120.         TAG_DONE);
  121.  
  122.     /* Update RShift gadget */
  123.     GT_SetGadgetAttrs(rShiftGadget,window,NULL,
  124.         GTCB_Checked, kbCode&LLKF_RSHIFT,
  125.         TAG_DONE);
  126.  
  127.     /* Update Caps Lock gadget */
  128.     GT_SetGadgetAttrs(capsLockGadget,window,NULL,
  129.         GTCB_Checked, kbCode&LLKF_CAPSLOCK,
  130.         TAG_DONE);
  131.  
  132.     /* Update Control gadget */
  133.     GT_SetGadgetAttrs(controlGadget,window,NULL,
  134.         GTCB_Checked, kbCode&LLKF_CONTROL,
  135.         TAG_DONE);
  136.  
  137.     /* Update LAlt gadget */
  138.     GT_SetGadgetAttrs(lAltGadget,window,NULL,
  139.         GTCB_Checked, kbCode&LLKF_LALT,
  140.         TAG_DONE);
  141.  
  142.     /* Update RAlt gadget */
  143.     GT_SetGadgetAttrs(rAltGadget,window,NULL,
  144.         GTCB_Checked, kbCode&LLKF_RALT,
  145.         TAG_DONE);
  146.  
  147.     /* Update LAmiga gadget */
  148.     GT_SetGadgetAttrs(lAmigaGadget,window,NULL,
  149.         GTCB_Checked, kbCode&LLKF_LAMIGA,
  150.         TAG_DONE);
  151.  
  152.     /* Update RAmiga gadget */
  153.     GT_SetGadgetAttrs(rAmigaGadget,window,NULL,
  154.         GTCB_Checked, kbCode&LLKF_RAMIGA,
  155.         TAG_DONE);
  156.  
  157. }
  158.  
  159. /****** kbInt/kbInterrupt ******************************************
  160. *
  161. *   NAME
  162. *       kbInterrupt -- keyboard interrupt handler
  163. *
  164. *   SYNOPSIS
  165. *       kbInterrupt(rawKey,intData);
  166. *
  167. *   void __asm __interrupt __saveds kbInterrupt(register __d0 UBYTE rawKey,
  168. *       register __a1 APTR intData)
  169. *
  170. *   FUNCTION
  171. *       Keyboard interrupt handler.
  172. *
  173. *   INPUTS
  174. *       rawKey -- raw key code
  175. *       intData -- interrupt data; should be KBINT_COOKIE
  176. *
  177. *   RESULT
  178. *       None
  179. *
  180. *   EXAMPLE
  181. *
  182. *   NOTES
  183. *
  184. *   BUGS
  185. *
  186. *   SEE ALSO
  187. *
  188. ******************************************************************************
  189. *
  190. */
  191. void __asm __interrupt __saveds kbInterrupt(register __d0 UBYTE rawKey,
  192.     register __a1 APTR intData)
  193. {
  194.  
  195.     /* Check cookie; if bad ... */
  196.     if (intData!=(APTR) KBINT_COOKIE) {
  197.         /* Increment bad cookie counter */
  198.         kbIntBadData++;
  199.     }
  200.  
  201.     /* Get keyboard code */
  202.     kbCode=GetKey();
  203.  
  204.     /* Signal main task */
  205.     Signal(kbIntTask,1<<kbSignal);
  206.  
  207. }
  208.