Added upstream version.
[vlp.git] / int / eventque.h
1 /**
2  ** EVENTQUE.H
3  **
4  **  Copyright (C) 1992, Csaba Biegl
5  **    820 Stirrup Dr, Nashville, TN, 37221
6  **    csaba@vuse.vanderbilt.edu
7  **
8  **  This file is distributed under the terms listed in the document
9  **  "copying.cb", available from the author at the address above.
10  **  A copy of "copying.cb" should accompany this file; if not, a copy
11  **  should be available from where this file was obtained.  This file
12  **  may not be distributed without a verbatim copy of "copying.cb".
13  **  You should also have received a copy of the GNU General Public
14  **  License along with this program (it is in the file "copying");
15  **  if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
16  **  Cambridge, MA 02139, USA.
17  **
18  **  This program is distributed in the hope that it will be useful,
19  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
20  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  **  GNU General Public License for more details.
22  **/
23
24 #ifndef _EVENTQUE_H_
25 #define _EVENTQUE_H_
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 /*
32  * structures:
33  *  BE CAREFUL when hacking!!! -- 16 and 32 bit compilers have to generate
34  *  the same alignments
35  */
36 typedef struct {
37     unsigned char   evt_type;       /* event type: 0: keyboard, 1: mouse */
38     unsigned char   evt_kbstat;     /* keyboard status (ALT, SHIFT, etc..) */
39     unsigned char   evt_mask;       /* mouse event mask */
40     unsigned char   evt_button;     /* button status */
41     unsigned short  evt_xpos;       /* X coord (or keycode if keybd event) */
42     unsigned short  evt_ypos;       /* Y coord */
43     unsigned long   evt_time;       /* time stamp of event */
44 #define evt_keycode   evt_xpos      /* reuse this slot for keybd events !! */
45 #define evt_scancode  evt_ypos      /* store here the BIOS scan code */
46 } EventRecord;
47
48 typedef struct {
49     unsigned short  evq_maxsize;    /* max size of event queue */
50     unsigned short  evq_cursize;    /* number of events in the queue */
51     unsigned short  evq_rdptr;      /* next event to read */
52     unsigned short  evq_wrptr;      /* next event to be written */
53     short           evq_xpos;       /* current X coordinate of mouse */
54     short           evq_ypos;       /* current Y coordinate of mouse */
55     short           evq_xmin;       /* minimal mouse X coordinate */
56     short           evq_ymin;       /* minimal mouse Y coordinate */
57     short           evq_xmax;       /* maximal mouse X coordinate */
58     short           evq_ymax;       /* maximal mouse Y coordinate */
59     short           evq_xspeed;     /* horizontal speed (mickey/coord) */
60     short           evq_yspeed;     /* vertical speed (mickey/coord) */
61     unsigned short  evq_thresh;     /* fast movement threshold */
62     unsigned short  evq_accel;      /* multiplier for fast move */
63     unsigned char   evq_drawmouse;  /* interrupt handler has to draw mouse */
64     unsigned char   evq_moved;      /* set if mouse moved */
65     unsigned char   evq_delchar;    /* character removed from BIOS buffer */
66     unsigned char   evq_enable;     /* event generation control flag */
67     EventRecord     evq_events[1];  /* event buffer space */
68 } EventQueue;
69
70 /*
71  * event types
72  */
73 #define EVENT_KEYBD     0
74 #define EVENT_MOUSE     1
75
76 /*
77  * MOUSE event flag bits
78  * (also defined in "mousex.h" of the graphics library)
79  */
80 #ifndef M_MOTION
81
82 #define M_MOTION        0x001
83 #define M_LEFT_DOWN     0x002
84 #define M_LEFT_UP       0x004
85 #define M_RIGHT_DOWN    0x008
86 #define M_RIGHT_UP      0x010
87 #define M_MIDDLE_DOWN   0x020
88 #define M_MIDDLE_UP     0x040
89 #define M_BUTTON_DOWN   (M_LEFT_DOWN | M_MIDDLE_DOWN | M_RIGHT_DOWN)
90 #define M_BUTTON_UP     (M_LEFT_UP   | M_MIDDLE_UP   | M_RIGHT_UP)
91 #define M_BUTTON_CHANGE (M_BUTTON_UP | M_BUTTON_DOWN )
92
93 /*
94  * MOUSE button status bits
95  */
96 #define M_LEFT          1
97 #define M_RIGHT         2
98 #define M_MIDDLE        4
99
100 #endif  /* M_MOTION */
101
102 /*
103  * KEYBOARD status word bits
104  * (also defined in "mousex.h" of the graphics library)
105  */
106 #ifndef KB_SHIFT
107
108 #define KB_RIGHTSHIFT   0x01            /* right shift key depressed */
109 #define KB_LEFTSHIFT    0x02            /* left shift key depressed */
110 #define KB_CTRL         0x04            /* CTRL depressed */
111 #define KB_ALT          0x08            /* ALT depressed */
112 #define KB_SCROLLOCK    0x10            /* SCROLL LOCK active */
113 #define KB_NUMLOCK      0x20            /* NUM LOCK active */
114 #define KB_CAPSLOCK     0x40            /* CAPS LOCK active */
115 #define KB_INSERT       0x80            /* INSERT state active */
116
117 #define KB_SHIFT        (KB_LEFTSHIFT | KB_RIGHTSHIFT)
118
119 #endif  /* KB_SHIFT */
120
121 /*
122  * set this bit in 'evq_enable' to generate the corresponding event
123  */
124 #define EVENT_ENABLE(type)      (1 << (type))
125
126 /*
127  * prototypes
128  */
129 #if defined(__TURBOC__) && defined(FOR_GO32)
130 EventQueue *EventQueueInit(int qsize,int ms_stksize,void (*msdraw)(void),int,int);
131 #else
132 EventQueue *EventQueueInit(int qsize,int ms_stksize,void (*msdraw)(void));
133 #endif
134
135 void   EventQueueDeInit(void);
136 int    EventQueueNextEvent(EventQueue *q,EventRecord *e);
137
138 #ifdef __cplusplus
139 }
140 #endif
141
142 #endif /* whole file */
143
144