home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / cbm / os-include.lha / os-include / devices / inputevent.h < prev    next >
C/C++ Source or Header  |  1993-10-15  |  10KB  |  288 lines

  1. #ifndef DEVICES_INPUTEVENT_H
  2. #define DEVICES_INPUTEVENT_H
  3. /*
  4. **    $VER: inputevent.h 36.10 (26.6.92)
  5. **    Includes Release 40.15
  6. **
  7. **    input event definitions
  8. **
  9. **    (C) Copyright 1985-1993 Commodore-Amiga, Inc.
  10. **        All Rights Reserved
  11. */
  12.  
  13. #ifndef DEVICES_TIMER_H
  14. #include "devices/timer.h"
  15. #endif
  16.  
  17. #ifndef UTILITY_HOOKS_H
  18. #include "utility/hooks.h"
  19. #endif
  20.  
  21. #ifndef UTILITY_TAGITEM_H
  22. #include "utility/tagitem.h"
  23. #endif
  24.  
  25. /*----- constants --------------------------------------------------*/
  26.  
  27. /*  --- InputEvent.ie_Class --- */
  28. /* A NOP input event */
  29. #define IECLASS_NULL            0x00
  30. /* A raw keycode from the keyboard device */
  31. #define IECLASS_RAWKEY            0x01
  32. /* The raw mouse report from the game port device */
  33. #define IECLASS_RAWMOUSE        0x02
  34. /* A private console event */
  35. #define IECLASS_EVENT            0x03
  36. /* A Pointer Position report */
  37. #define IECLASS_POINTERPOS        0x04
  38. /* A timer event */
  39. #define IECLASS_TIMER            0x06
  40. /* select button pressed down over a Gadget (address in ie_EventAddress) */
  41. #define IECLASS_GADGETDOWN        0x07
  42. /* select button released over the same Gadget (address in ie_EventAddress) */
  43. #define IECLASS_GADGETUP        0x08
  44. /* some Requester activity has taken place.  See Codes REQCLEAR and REQSET */
  45. #define IECLASS_REQUESTER        0x09
  46. /* this is a Menu Number transmission (Menu number is in ie_Code) */
  47. #define IECLASS_MENULIST        0x0A
  48. /* User has selected the active Window's Close Gadget */
  49. #define IECLASS_CLOSEWINDOW        0x0B
  50. /* this Window has a new size */
  51. #define IECLASS_SIZEWINDOW        0x0C
  52. /* the Window pointed to by ie_EventAddress needs to be refreshed */
  53. #define IECLASS_REFRESHWINDOW        0x0D
  54. /* new preferences are available */
  55. #define IECLASS_NEWPREFS        0x0E
  56. /* the disk has been removed */
  57. #define IECLASS_DISKREMOVED        0x0F
  58. /* the disk has been inserted */
  59. #define IECLASS_DISKINSERTED        0x10
  60. /* the window is about to be been made active */
  61. #define IECLASS_ACTIVEWINDOW        0x11
  62. /* the window is about to be made inactive */
  63. #define IECLASS_INACTIVEWINDOW        0x12
  64. /* extended-function pointer position report (V36) */
  65. #define IECLASS_NEWPOINTERPOS        0x13
  66. /* Help key report during Menu session (V36) */
  67. #define IECLASS_MENUHELP        0x14
  68. /* the Window has been modified with move, size, zoom, or change (V36) */
  69. #define    IECLASS_CHANGEWINDOW        0x15
  70.  
  71. /* the last class */
  72. #define IECLASS_MAX            0x15
  73.  
  74.  
  75. /*  --- InputEvent.ie_SubClass --- */
  76. /*  IECLASS_NEWPOINTERPOS */
  77. /*    like IECLASS_POINTERPOS */
  78. #define IESUBCLASS_COMPATIBLE    0x00
  79. /*    ie_EventAddress points to struct IEPointerPixel */
  80. #define IESUBCLASS_PIXEL    0x01
  81. /*    ie_EventAddress points to struct IEPointerTablet */
  82. #define IESUBCLASS_TABLET    0x02
  83. /*    ie_EventAddress points to struct IENewTablet */
  84. #define IESUBCLASS_NEWTABLET       0x03
  85.  
  86. /* pointed to by ie_EventAddress for IECLASS_NEWPOINTERPOS,
  87.  * and IESUBCLASS_PIXEL.
  88.  *
  89.  * You specify a screen and pixel coordinates in that screen
  90.  * at which you'd like the mouse to be positioned.
  91.  * Intuition will try to oblige, but there will be restrictions
  92.  * to positioning the pointer over offscreen pixels.
  93.  *
  94.  * IEQUALIFIER_RELATIVEMOUSE is supported for IESUBCLASS_PIXEL.
  95.  */
  96.  
  97. struct IEPointerPixel    {
  98.     struct Screen    *iepp_Screen;    /* pointer to an open screen */
  99.     struct {                /* pixel coordinates in iepp_Screen */
  100.     WORD    X;
  101.     WORD    Y;
  102.     }            iepp_Position;
  103. };
  104.  
  105. /* pointed to by ie_EventAddress for IECLASS_NEWPOINTERPOS,
  106.  * and IESUBCLASS_TABLET.
  107.  *
  108.  * You specify a range of values and a value within the range
  109.  * independently for each of X and Y (the minimum value of
  110.  * the ranges is always normalized to 0).
  111.  *
  112.  * Intuition will position the mouse proportionally within its
  113.  * natural mouse position rectangle limits.
  114.  *
  115.  * IEQUALIFIER_RELATIVEMOUSE is not supported for IESUBCLASS_TABLET.
  116.  */
  117. struct IEPointerTablet    {
  118.     struct {
  119.     UWORD    X;
  120.     UWORD    Y;
  121.     }            iept_Range;    /* 0 is min, these are max    */
  122.     struct {
  123.     UWORD    X;
  124.     UWORD    Y;
  125.     }            iept_Value;    /* between 0 and iept_Range    */
  126.  
  127.     WORD        iept_Pressure;    /* -128 to 127 (unused, set to 0)  */
  128. };
  129.  
  130.  
  131. /* The ie_EventAddress of an IECLASS_NEWPOINTERPOS event of subclass
  132.  * IESUBCLASS_NEWTABLET points at an IENewTablet structure.
  133.  *
  134.  *
  135.  * IEQUALIFIER_RELATIVEMOUSE is not supported for IESUBCLASS_NEWTABLET.
  136.  */
  137.  
  138. struct IENewTablet
  139. {
  140.     /* Pointer to a hook you wish to be called back through, in
  141.      * order to handle scaling.  You will be provided with the
  142.      * width and height you are expected to scale your tablet
  143.      * to, perhaps based on some user preferences.
  144.      * If NULL, the tablet's specified range will be mapped directly
  145.      * to that width and height for you, and you will not be
  146.      * called back.
  147.      */
  148.     struct Hook *ient_CallBack;
  149.  
  150.     /* Post-scaling coordinates and fractional coordinates.
  151.      * DO NOT FILL THESE IN AT THE TIME THE EVENT IS WRITTEN!
  152.      * Your driver will be called back and provided information
  153.      * about the width and height of the area to scale the
  154.      * tablet into.  It should scale the tablet coordinates
  155.      * (perhaps based on some preferences controlling aspect
  156.      * ratio, etc.) and place the scaled result into these
  157.      * fields.    The ient_ScaledX and ient_ScaledY fields are
  158.      * in screen-pixel resolution, but the origin ( [0,0]-point )
  159.      * is not defined.    The ient_ScaledXFraction and
  160.      * ient_ScaledYFraction fields represent sub-pixel position
  161.      * information, and should be scaled to fill a UWORD fraction.
  162.      */
  163.     UWORD ient_ScaledX, ient_ScaledY;
  164.     UWORD ient_ScaledXFraction, ient_ScaledYFraction;
  165.  
  166.     /* Current tablet coordinates along each axis: */
  167.     ULONG ient_TabletX, ient_TabletY;
  168.  
  169.     /* Tablet range along each axis.  For example, if ient_TabletX
  170.      * can take values 0-999, ient_RangeX should be 1000.
  171.      */
  172.     ULONG ient_RangeX, ient_RangeY;
  173.  
  174.     /* Pointer to tag-list of additional tablet attributes.
  175.      * See <intuition/intuition.h> for the tag values.
  176.      */
  177.     struct TagItem *ient_TagList;
  178. };
  179.  
  180.  
  181. /*  --- InputEvent.ie_Code --- */
  182. /*  IECLASS_RAWKEY */
  183. #define IECODE_UP_PREFIX        0x80
  184. #define IECODE_KEY_CODE_FIRST        0x00
  185. #define IECODE_KEY_CODE_LAST        0x77
  186. #define IECODE_COMM_CODE_FIRST        0x78
  187. #define IECODE_COMM_CODE_LAST        0x7F
  188.  
  189. /*  IECLASS_ANSI */
  190. #define IECODE_C0_FIRST            0x00
  191. #define IECODE_C0_LAST            0x1F
  192. #define IECODE_ASCII_FIRST        0x20
  193. #define IECODE_ASCII_LAST        0x7E
  194. #define IECODE_ASCII_DEL        0x7F
  195. #define IECODE_C1_FIRST            0x80
  196. #define IECODE_C1_LAST            0x9F
  197. #define IECODE_LATIN1_FIRST        0xA0
  198. #define IECODE_LATIN1_LAST        0xFF
  199.  
  200. /*  IECLASS_RAWMOUSE */
  201. #define IECODE_LBUTTON            0x68    /* also uses IECODE_UP_PREFIX */
  202. #define IECODE_RBUTTON            0x69
  203. #define IECODE_MBUTTON            0x6A
  204. #define IECODE_NOBUTTON            0xFF
  205.  
  206. /*  IECLASS_EVENT (V36) */
  207. #define IECODE_NEWACTIVE        0x01    /* new active input window */
  208. #define IECODE_NEWSIZE            0x02    /* resize of window */
  209. #define IECODE_REFRESH            0x03    /* refresh of window */
  210.  
  211. /*  IECLASS_REQUESTER */
  212. /*    broadcast when the first Requester (not subsequent ones) opens up in */
  213. /*    the Window */
  214. #define IECODE_REQSET            0x01
  215. /*    broadcast when the last Requester clears out of the Window */
  216. #define IECODE_REQCLEAR            0x00
  217.  
  218.  
  219.  
  220. /*  --- InputEvent.ie_Qualifier --- */
  221. #define IEQUALIFIER_LSHIFT        0x0001
  222. #define IEQUALIFIER_RSHIFT        0x0002
  223. #define IEQUALIFIER_CAPSLOCK        0x0004
  224. #define IEQUALIFIER_CONTROL        0x0008
  225. #define IEQUALIFIER_LALT        0x0010
  226. #define IEQUALIFIER_RALT        0x0020
  227. #define IEQUALIFIER_LCOMMAND        0x0040
  228. #define IEQUALIFIER_RCOMMAND        0x0080
  229. #define IEQUALIFIER_NUMERICPAD        0x0100
  230. #define IEQUALIFIER_REPEAT        0x0200
  231. #define IEQUALIFIER_INTERRUPT        0x0400
  232. #define IEQUALIFIER_MULTIBROADCAST    0x0800
  233. #define IEQUALIFIER_MIDBUTTON        0x1000
  234. #define IEQUALIFIER_RBUTTON        0x2000
  235. #define IEQUALIFIER_LEFTBUTTON        0x4000
  236. #define IEQUALIFIER_RELATIVEMOUSE    0x8000
  237.  
  238. #define IEQUALIFIERB_LSHIFT        0
  239. #define IEQUALIFIERB_RSHIFT        1
  240. #define IEQUALIFIERB_CAPSLOCK        2
  241. #define IEQUALIFIERB_CONTROL        3
  242. #define IEQUALIFIERB_LALT        4
  243. #define IEQUALIFIERB_RALT        5
  244. #define IEQUALIFIERB_LCOMMAND        6
  245. #define IEQUALIFIERB_RCOMMAND        7
  246. #define IEQUALIFIERB_NUMERICPAD        8
  247. #define IEQUALIFIERB_REPEAT        9
  248. #define IEQUALIFIERB_INTERRUPT        10
  249. #define IEQUALIFIERB_MULTIBROADCAST    11
  250. #define IEQUALIFIERB_MIDBUTTON        12
  251. #define IEQUALIFIERB_RBUTTON        13
  252. #define IEQUALIFIERB_LEFTBUTTON        14
  253. #define IEQUALIFIERB_RELATIVEMOUSE    15
  254.  
  255. /*----- InputEvent -------------------------------------------------*/
  256.  
  257. struct InputEvent {
  258.     struct  InputEvent *ie_NextEvent;    /* the chronologically next event */
  259.     UBYTE   ie_Class;            /* the input event class */
  260.     UBYTE   ie_SubClass;        /* optional subclass of the class */
  261.     UWORD   ie_Code;            /* the input event code */
  262.     UWORD   ie_Qualifier;        /* qualifiers in effect for the event*/
  263.     union {
  264.     struct {
  265.         WORD    ie_x;        /* the pointer position for the event*/
  266.         WORD    ie_y;
  267.     } ie_xy;
  268.     APTR    ie_addr;        /* the event address */
  269.     struct {
  270.         UBYTE   ie_prev1DownCode;    /* previous down keys for dead */
  271.         UBYTE   ie_prev1DownQual;    /*   key translation: the ie_Code */
  272.         UBYTE   ie_prev2DownCode;    /*   & low byte of ie_Qualifier for */
  273.         UBYTE   ie_prev2DownQual;    /*   last & second last down keys */
  274.     } ie_dead;
  275.     } ie_position;
  276.     struct timeval ie_TimeStamp;    /* the system tick at the event */
  277. };
  278.  
  279. #define    ie_X            ie_position.ie_xy.ie_x
  280. #define    ie_Y            ie_position.ie_xy.ie_y
  281. #define    ie_EventAddress        ie_position.ie_addr
  282. #define    ie_Prev1DownCode    ie_position.ie_dead.ie_prev1DownCode
  283. #define    ie_Prev1DownQual    ie_position.ie_dead.ie_prev1DownQual
  284. #define    ie_Prev2DownCode    ie_position.ie_dead.ie_prev2DownCode
  285. #define    ie_Prev2DownQual    ie_position.ie_dead.ie_prev2DownQual
  286.  
  287. #endif    /* DEVICES_INPUTEVENT_H */
  288.