summaryrefslogtreecommitdiffstats
path: root/board/MAI/bios_emulator/scitech/include/event.h
blob: 0de45172d6ee9808d4a89b8be338da548312b533 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
/****************************************************************************
*
*                   SciTech OS Portability Manager Library
*
*  ========================================================================
*
*    The contents of this file are subject to the SciTech MGL Public
*    License Version 1.0 (the "License"); you may not use this file
*    except in compliance with the License. You may obtain a copy of
*    the License at http://www.scitechsoft.com/mgl-license.txt
*
*    Software distributed under the License is distributed on an
*    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
*    implied. See the License for the specific language governing
*    rights and limitations under the License.
*
*    The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
*
*    The Initial Developer of the Original Code is SciTech Software, Inc.
*    All Rights Reserved.
*
*  ========================================================================
*
* Language:     ANSI C
* Environment:  Any
*
* Description:  Header file for the SciTech cross platform event library
*
****************************************************************************/

#ifndef __EVENT_H
#define __EVENT_H

#include "scitech.h"

/*---------------------- Macros and type definitions ----------------------*/

#pragma pack(1)

/* 'C' calling conventions always */

#define EVTAPI  _ASMAPI
#define EVTAPIP _ASMAPIP

/* Event message masks for keyDown events */

#define EVT_ASCIIMASK   0x00FF      /* ASCII code of key pressed        */
#define EVT_SCANMASK    0xFF00      /* Scan code of key pressed         */
#define EVT_COUNTMASK   0x7FFF0000L /* Count for KEYREPEAT's            */

/* Macros to extract values from the message fields */

#define EVT_asciiCode(m)    ( (uchar) (m & EVT_ASCIIMASK) )
#define EVT_scanCode(m)     ( (uchar) ( (m & EVT_SCANMASK) >> 8 ) )
#define EVT_repeatCount(m)  ( (short) ( (m & EVT_COUNTMASK) >> 16 ) )

/****************************************************************************
REMARKS:
Defines the set of ASCII codes reported by the event library functions
in the message field. Use the EVT_asciiCode macro to extract the code
from the event structure.

HEADER:
event.h
****************************************************************************/
typedef enum {
    ASCII_ctrlA             = 0x01,
    ASCII_ctrlB             = 0x02,
    ASCII_ctrlC             = 0x03,
    ASCII_ctrlD             = 0x04,
    ASCII_ctrlE             = 0x05,
    ASCII_ctrlF             = 0x06,
    ASCII_ctrlG             = 0x07,
    ASCII_backspace         = 0x08,
    ASCII_ctrlH             = 0x08,
    ASCII_tab               = 0x09,
    ASCII_ctrlI             = 0x09,
    ASCII_ctrlJ             = 0x0A,
    ASCII_ctrlK             = 0x0B,
    ASCII_ctrlL             = 0x0C,
    ASCII_enter             = 0x0D,
    ASCII_ctrlM             = 0x0D,
    ASCII_ctrlN             = 0x0E,
    ASCII_ctrlO             = 0x0F,
    ASCII_ctrlP             = 0x10,
    ASCII_ctrlQ             = 0x11,
    ASCII_ctrlR             = 0x12,
    ASCII_ctrlS             = 0x13,
    ASCII_ctrlT             = 0x14,
    ASCII_ctrlU             = 0x15,
    ASCII_ctrlV             = 0x16,
    ASCII_ctrlW             = 0x17,
    ASCII_ctrlX             = 0x18,
    ASCII_ctrlY             = 0x19,
    ASCII_ctrlZ             = 0x1A,
    ASCII_esc               = 0x1B,
    ASCII_space             = 0x20,
    ASCII_exclamation       = 0x21, /* ! */
    ASCII_quote             = 0x22, /* " */
    ASCII_pound             = 0x23, /* # */
    ASCII_dollar            = 0x24, /* $ */
    ASCII_percent           = 0x25, /* % */
    ASCII_ampersand         = 0x26, /* & */
    ASCII_apostrophe        = 0x27, /* ' */
    ASCII_leftBrace         = 0x28, /* ( */
    ASCII_rightBrace        = 0x29, /* ) */
    ASCII_times             = 0x2A, /* * */
    ASCII_plus              = 0x2B, /* + */
    ASCII_comma             = 0x2C, /* , */
    ASCII_minus             = 0x2D, /* - */
    ASCII_period            = 0x2E, /* . */
    ASCII_divide            = 0x2F, /* / */
    ASCII_0                 = 0x30,
    ASCII_1                 = 0x31,
    ASCII_2                 = 0x32,
    ASCII_3                 = 0x33,
    ASCII_4                 = 0x34,
    ASCII_5                 = 0x35,
    ASCII_6                 = 0x36,
    ASCII_7                 = 0x37,
    ASCII_8                 = 0x38,
    ASCII_9                 = 0x39,
    ASCII_colon             = 0x3A, /* : */
    ASCII_semicolon         = 0x3B, /* ; */
    ASCII_lessThan          = 0x3C, /* < */
    ASCII_equals            = 0x3D, /* = */
    ASCII_greaterThan       = 0x3E, /* > */
    ASCII_question          = 0x3F, /* ? */
    ASCII_at                = 0x40, /* @ */
    ASCII_A                 = 0x41,
    ASCII_B                 = 0x42,
    ASCII_C                 = 0x43,
    ASCII_D                 = 0x44,
    ASCII_E                 = 0x45,
    ASCII_F                 = 0x46,
    ASCII_G                 = 0x47,
    ASCII_H                 = 0x48,
    ASCII_I                 = 0x49,
    ASCII_J                 = 0x4A,
    ASCII_K                 = 0x4B,
    ASCII_L                 = 0x4C,
    ASCII_M                 = 0x4D,
    ASCII_N                 = 0x4E,
    ASCII_O                 = 0x4F,
    ASCII_P                 = 0x50,
    ASCII_Q                 = 0x51,
    ASCII_R                 = 0x52,
    ASCII_S                 = 0x53,
    ASCII_T                 = 0x54,
    ASCII_U                 = 0x55,
    ASCII_V                 = 0x56,
    ASCII_W                 = 0x57,
    ASCII_X                 = 0x58,
    ASCII_Y                 = 0x59,
    ASCII_Z                 = 0x5A,
    ASCII_leftSquareBrace   = 0x5B, /* [ */
    ASCII_backSlash         = 0x5C, /* \ */
    ASCII_rightSquareBrace  = 0x5D, /* ] */
    ASCII_caret             = 0x5E, /* ^ */
    ASCII_underscore        = 0x5F, /* _ */
    ASCII_leftApostrophe    = 0x60, /* ` */
    ASCII_a                 = 0x61,
    ASCII_b                 = 0x62,
    ASCII_c                 = 0x63,
    ASCII_d                 = 0x64,
    ASCII_e                 = 0x65,
    ASCII_f                 = 0x66,
    ASCII_g                 = 0x67,
    ASCII_h                 = 0x68,
    ASCII_i                 = 0x69,
    ASCII_j                 = 0x6A,
    ASCII_k                 = 0x6B,
    ASCII_l                 = 0x6C,
    ASCII_m                 = 0x6D,
    ASCII_n                 = 0x6E,
    ASCII_o                 = 0x6F,
    ASCII_p                 = 0x70,
    ASCII_q                 = 0x71,
    ASCII_r                 = 0x72,
    ASCII_s                 = 0x73,
    ASCII_t                 = 0x74,
    ASCII_u                 = 0x75,
    ASCII_v                 = 0x76,
    ASCII_w                 = 0x77,
    ASCII_x                 = 0x78,
    ASCII_y                 = 0x79,
    ASCII_z                 = 0x7A,
    ASCII_leftCurlyBrace    = 0x7B, /* { */
    ASCII_verticalBar       = 0x7C, /* | */
    ASCII_rightCurlyBrace   = 0x7D, /* } */
    ASCII_tilde             = 0x7E  /* ~ */
    } EVT_asciiCodesType;

/****************************************************************************
REMARKS:
Defines the set of scan codes reported by the event library functions
in the message field. Use the EVT_scanCode macro to extract the code
from the event structure. Note that the scan codes reported will be the
same across all keyboards (assuming the placement of keys on a 101 key US
keyboard), but the translated ASCII values may be different depending on
the country code pages in use.

NOTE:   Scan codes in the event library are not really hardware scan codes,
        but rather virtual scan codes as generated by a low level keyboard
        interface driver. All virtual codes begin with scan code 0x60 and
        range up from there.

HEADER:
event.h
****************************************************************************/
typedef enum {
    KB_padEnter             = 0x60, /* Keypad keys */
    KB_padMinus             = 0x4A,
    KB_padPlus              = 0x4E,
    KB_padTimes             = 0x37,
    KB_padDivide            = 0x61,
    KB_padLeft              = 0x62,
    KB_padRight             = 0x63,
    KB_padUp                = 0x64,
    KB_padDown              = 0x65,
    KB_padInsert            = 0x66,
    KB_padDelete            = 0x67,
    KB_padHome              = 0x68,
    KB_padEnd               = 0x69,
    KB_padPageUp            = 0x6A,
    KB_padPageDown          = 0x6B,
    KB_padCenter            = 0x4C,
    KB_F1                   = 0x3B, /* Function keys */
    KB_F2                   = 0x3C,
    KB_F3                   = 0x3D,
    KB_F4                   = 0x3E,
    KB_F5                   = 0x3F,
    KB_F6                   = 0x40,
    KB_F7                   = 0x41,
    KB_F8                   = 0x42,
    KB_F9                   = 0x43,
    KB_F10                  = 0x44,
    KB_F11                  = 0x57,
    KB_F12                  = 0x58,
    KB_left                 = 0x4B, /* Cursor control keys */
    KB_right                = 0x4D,
    KB_up                   = 0x48,
    KB_down                 = 0x50,
    KB_insert               = 0x52,
    KB_delete               = 0x53,
    KB_home                 = 0x47,
    KB_end                  = 0x4F,
    KB_pageUp               = 0x49,
    KB_pageDown             = 0x51,
    KB_capsLock             = 0x3A,
    KB_numLock              = 0x45,
    KB_scrollLock           = 0x46,
    KB_leftShift            = 0x2A,
    KB_rightShift           = 0x36,
    KB_leftCtrl             = 0x1D,
    KB_rightCtrl            = 0x6C,
    KB_leftAlt              = 0x38,
    KB_rightAlt             = 0x6D,
    KB_leftWindows          = 0x5B,
    KB_rightWindows         = 0x5C,
    KB_menu                 = 0x5D,
    KB_sysReq               = 0x54,
    KB_esc                  = 0x01, /* Normal keyboard keys */
    KB_1                    = 0x02,
    KB_2                    = 0x03,
    KB_3                    = 0x04,
    KB_4                    = 0x05,
    KB_5                    = 0x06,
    KB_6                    = 0x07,
    KB_7                    = 0x08,
    KB_8                    = 0x09,
    KB_9                    = 0x0A,
    KB_0                    = 0x0B,
    KB_minus                = 0x0C,
    KB_equals               = 0x0D,
    KB_backSlash            = 0x2B,
    KB_backspace            = 0x0E,
    KB_tab                  = 0x0F,
    KB_Q                    = 0x10,
    KB_W                    = 0x11,
    KB_E                    = 0x12,
    KB_R                    = 0x13,
    KB_T                    = 0x14,
    KB_Y                    = 0x15,
    KB_U                    = 0x16,
    KB_I                    = 0x17,
    KB_O                    = 0x18,
    KB_P                    = 0x19,
    KB_leftSquareBrace      = 0x1A,
    KB_rightSquareBrace     = 0x1B,
    KB_enter                = 0x1C,
    KB_A                    = 0x1E,
    KB_S                    = 0x1F,
    KB_D                    = 0x20,
    KB_F                    = 0x21,
    KB_G                    = 0x22,
    KB_H                    = 0x23,
    KB_J                    = 0x24,
    KB_K                    = 0x25,
    KB_L                    = 0x26,
    KB_semicolon            = 0x27,
    KB_apostrophe           = 0x28,
    KB_Z                    = 0x2C,
    KB_X                    = 0x2D,
    KB_C                    = 0x2E,
    KB_V                    = 0x2F,
    KB_B                    = 0x30,
    KB_N                    = 0x31,
    KB_M                    = 0x32,
    KB_comma                = 0x33,
    KB_period               = 0x34,
    KB_divide               = 0x35,
    KB_space                = 0x39,
    KB_tilde                = 0x29
    } EVT_scanCodesType;

/****************************************************************************
REMARKS:
Defines the mask for the joystick axes that are present

HEADER:
event.h

MEMBERS:
EVT_JOY_AXIS_X1     - Joystick 1, X axis is present
EVT_JOY_AXIS_Y1     - Joystick 1, Y axis is present
EVT_JOY_AXIS_X2     - Joystick 2, X axis is present
EVT_JOY_AXIS_Y2     - Joystick 2, Y axis is present
EVT_JOY_AXIS_ALL    - Mask for all axes
****************************************************************************/
typedef enum {
    EVT_JOY_AXIS_X1     = 0x00000001,
    EVT_JOY_AXIS_Y1     = 0x00000002,
    EVT_JOY_AXIS_X2     = 0x00000004,
    EVT_JOY_AXIS_Y2     = 0x00000008,
    EVT_JOY_AXIS_ALL    = 0x0000000F
    } EVT_eventJoyAxisType;

/****************************************************************************
REMARKS:
Defines the event message masks for joystick events

HEADER:
event.h

MEMBERS:
EVT_JOY1_BUTTONA    - Joystick 1, button A is down
EVT_JOY1_BUTTONB    - Joystick 1, button B is down
EVT_JOY2_BUTTONA    - Joystick 2, button A is down
EVT_JOY2_BUTTONB    - Joystick 2, button B is down
****************************************************************************/
typedef enum {
    EVT_JOY1_BUTTONA    = 0x00000001,
    EVT_JOY1_BUTTONB    = 0x00000002,
    EVT_JOY2_BUTTONA    = 0x00000004,
    EVT_JOY2_BUTTONB    = 0x00000008
    } EVT_eventJoyMaskType;

/****************************************************************************
REMARKS:
Defines the event message masks for mouse events

HEADER:
event.h

MEMBERS:
EVT_LEFTBMASK   - Left button is held down
EVT_RIGHTBMASK  - Right button is held down
EVT_MIDDLEBMASK - Middle button is held down
EVT_BOTHBMASK   - Both left and right held down together
EVT_ALLBMASK    - All buttons pressed
EVT_DBLCLICK    - Set if mouse down event was a double click
****************************************************************************/
typedef enum {
    EVT_LEFTBMASK   = 0x00000001,
    EVT_RIGHTBMASK  = 0x00000002,
    EVT_MIDDLEBMASK = 0x00000004,
    EVT_BOTHBMASK   = 0x00000007,
    EVT_ALLBMASK    = 0x00000007,
    EVT_DBLCLICK    = 0x00010000
    } EVT_eventMouseMaskType;

/****************************************************************************
REMARKS:
Defines the event modifier masks. These are the masks used to extract
the modifier information from the modifiers field of the event_t structure.
Note that the values in the modifiers field represent the values of these
modifier keys at the time the event occurred, not the time you decided
to process the event.

HEADER:
event.h

MEMBERS:
EVT_LEFTBUT     - Set if left mouse button was down
EVT_RIGHTBUT    - Set if right mouse button was down
EVT_MIDDLEBUT   - Set if the middle button was down
EVT_RIGHTSHIFT  - Set if right shift was down
EVT_LEFTSHIFT   - Set if left shift was down
EVT_RIGHTCTRL   - Set if right ctrl key was down
EVT_RIGHTALT    - Set if right alt key was down
EVT_LEFTCTRL    - Set if left ctrl key was down
EVT_LEFTALT     - Set if left alt key was down
EVT_SHIFTKEY    - Mask for any shift key down
EVT_CTRLSTATE   - Set if ctrl key was down
EVT_ALTSTATE    - Set if alt key was down
EVT_CAPSLOCK    - Caps lock is active
EVT_NUMLOCK     - Num lock is active
EVT_SCROLLLOCK  - Scroll lock is active
****************************************************************************/
typedef enum {
    EVT_LEFTBUT     = 0x00000001,
    EVT_RIGHTBUT    = 0x00000002,
    EVT_MIDDLEBUT   = 0x00000004,
    EVT_RIGHTSHIFT  = 0x00000008,
    EVT_LEFTSHIFT   = 0x00000010,
    EVT_RIGHTCTRL   = 0x00000020,
    EVT_RIGHTALT    = 0x00000040,
    EVT_LEFTCTRL    = 0x00000080,
    EVT_LEFTALT     = 0x00000100,
    EVT_SHIFTKEY    = 0x00000018,
    EVT_CTRLSTATE   = 0x000000A0,
    EVT_ALTSTATE    = 0x00000140,
    EVT_SCROLLLOCK  = 0x00000200,
    EVT_NUMLOCK     = 0x00000400,
    EVT_CAPSLOCK    = 0x00000800
    } EVT_eventModMaskType;

/****************************************************************************
REMARKS:
Defines the event codes returned in the event_t structures what field. Note
that these are defined as a set of mutually exlusive bit fields, so you
can test for multiple event types using the combined event masks defined
in the EVT_eventMaskType enumeration.

HEADER:
event.h

MEMBERS:
EVT_NULLEVT     - A null event
EVT_KEYDOWN     - Key down event
EVT_KEYREPEAT   - Key repeat event
EVT_KEYUP       - Key up event
EVT_MOUSEDOWN   - Mouse down event
EVT_MOUSEAUTO   - Mouse down autorepeat event
EVT_MOUSEUP     - Mouse up event
EVT_MOUSEMOVE   - Mouse movement event
EVT_JOYCLICK    - Joystick button state change event
EVT_JOYMOVE     - Joystick movement event
EVT_USEREVT     - First user event
****************************************************************************/
typedef enum {
    EVT_NULLEVT     = 0x00000000,
    EVT_KEYDOWN     = 0x00000001,
    EVT_KEYREPEAT   = 0x00000002,
    EVT_KEYUP       = 0x00000004,
    EVT_MOUSEDOWN   = 0x00000008,
    EVT_MOUSEAUTO   = 0x00000010,
    EVT_MOUSEUP     = 0x00000020,
    EVT_MOUSEMOVE   = 0x00000040,
    EVT_JOYCLICK    = 0x00000080,
    EVT_JOYMOVE     = 0x00000100,
    EVT_USEREVT     = 0x00000200
    } EVT_eventType;

/****************************************************************************
REMARKS:
Defines the event code masks you can use to test for multiple types of
events, since the event codes are mutually exlusive bit fields.

HEADER:
event.h

MEMBERS:
EVT_KEYEVT      - Mask for any key event
EVT_MOUSEEVT    - Mask for any mouse event
EVT_MOUSECLICK  - Mask for any mouse click event
EVT_JOYEVT      - Mask for any joystick event
EVT_EVERYEVT    - Mask for any event
****************************************************************************/
typedef enum {
    EVT_KEYEVT      = (EVT_KEYDOWN | EVT_KEYREPEAT | EVT_KEYUP),
    EVT_MOUSEEVT    = (EVT_MOUSEDOWN | EVT_MOUSEAUTO | EVT_MOUSEUP | EVT_MOUSEMOVE),
    EVT_MOUSECLICK  = (EVT_MOUSEDOWN | EVT_MOUSEUP),
    EVT_JOYEVT      = (EVT_JOYCLICK | EVT_JOYMOVE),
    EVT_EVERYEVT    = 0x7FFFFFFF
    } EVT_eventMaskType;

/****************************************************************************
REMARKS:
Structure describing the information contained in an event extracted from
the event queue.

HEADER:
event.h

MEMBERS:
which       - Window identifier for message for use by high level window manager
              code (i.e. MegaVision GUI or Windows API).
what        - Type of event that occurred. Will be one of the values defined by
              the EVT_eventType enumeration.
when        - Time that the event occurred in milliseconds since startup
where_x     - X coordinate of the mouse cursor location at the time of the event
              (in screen coordinates). For joystick events this represents
              the position of the first joystick X axis.
where_y     - Y coordinate of the mouse cursor location at the time of the event
              (in screen coordinates). For joystick events this represents
              the position of the first joystick Y axis.
relative_x  - Relative movement of the mouse cursor in the X direction (in
              units of mickeys, or 1/200th of an inch). For joystick events
              this represents the position of the second joystick X axis.
relative_y  - Relative movement of the mouse cursor in the Y direction (in
              units of mickeys, or 1/200th of an inch). For joystick events
              this represents the position of the second joystick Y axis.
message     - Event specific message for the event. For use events this can be
              any user specific information. For keyboard events this contains
              the ASCII code in bits 0-7, the keyboard scan code in bits 8-15 and
              the character repeat count in bits 16-30. You can use the
              EVT_asciiCode, EVT_scanCode and EVT_repeatCount macros to extract
              this information from the message field. For mouse events this
              contains information about which button was pressed, and will be a
              combination of the flags defined by the EVT_eventMouseMaskType
              enumeration. For joystick events, this conatins information
              about which buttons were pressed, and will be a combination of
              the flags defined by the EVT_eventJoyMaskType enumeration.
modifiers   - Contains additional information about the state of the keyboard
              shift modifiers (Ctrl, Alt and Shift keys) when the event
              occurred. For mouse events it will also contain the state of
              the mouse buttons. Will be a combination of the values defined
              by the EVT_eventModMaskType enumeration.
next        - Internal use; do not use.
prev        - Internal use; do not use.
****************************************************************************/
typedef struct {
    ulong       which;
    ulong       what;
    ulong       when;
    int         where_x;
    int         where_y;
    int         relative_x;
    int         relative_y;
    ulong       message;
    ulong       modifiers;
    int         next;
    int         prev;
    } event_t;

/****************************************************************************
REMARKS:
Structure describing an entry in the code page table. A table of translation
codes for scan codes to ASCII codes is provided in this table to be used
by the keyboard event libraries. On some OS'es the keyboard translation is
handled by the OS, but for DOS and embedded systems you must register a
different code page translation table if you want to support keyboards
other than the US English keyboard (the default).

NOTE:   Entries in code page tables *must* be in ascending order for the
        scan codes as we do a binary search on the tables for the ASCII
        code equivalents.

HEADER:
event.h

MEMBERS:
scanCode    - Scan code to translate (really the virtual scan code).
asciiCode   - ASCII code for this scan code.
****************************************************************************/
typedef struct {
    uchar       scanCode;
    uchar       asciiCode;
    } codepage_entry_t;

/****************************************************************************
REMARKS:
Structure describing a complete code page translation table. The table
contains translation tables for normal keys, shifted keys and ctrl keys.
The Ctrl key always has precedence over the shift table, and the shift
table is used when the shift key is down or the CAPSLOCK key is down.

HEADER:
event.h

MEMBERS:
name            - Name of the code page table (ie: "US English")
normal          - Code page for translating normal keys
normalLen       - Length of normal translation table
caps            - Code page for translating keys when CAPSLOCK is down
capsLen         - Length of CAPSLOCK translation table
shift           - Code page for shifted keys (ie: shift key is held down)
shiftLen        - Length of shifted translation table
shiftCaps       - Code page for shifted keys when CAPSLOCK is down
shiftCapsLen    - Length of shifted CAPSLOCK translation table
ctrl            - Code page for ctrl'ed keys (ie: ctrl key is held down)
ctrlLen         - Length of ctrl'ed translation table
numPad          - Code page for NUMLOCK'ed keypad keys
numPadLen       - Length of NUMLOCK'ed translation table
****************************************************************************/
typedef struct {
    char                name[20];
    codepage_entry_t    *normal;
    int                 normalLen;
    codepage_entry_t    *caps;
    int                 capsLen;
    codepage_entry_t    *shift;
    int                 shiftLen;
    codepage_entry_t    *shiftCaps;
    int                 shiftCapsLen;
    codepage_entry_t    *ctrl;
    int                 ctrlLen;
    codepage_entry_t    *numPad;
    int                 numPadLen;
    } codepage_t;

/* {secret} */
typedef ibool (EVTAPIP _EVT_userEventFilter)(event_t *evt);
/* {secret} */
typedef void (EVTAPIP _EVT_mouseMoveHandler)(int x,int y);
/* {secret} */
typedef void (EVTAPIP _EVT_heartBeatCallback)(void *params);

/* Macro to find the size of a static array */

#define EVT_ARR_SIZE(a)         (sizeof(a)/sizeof((a)[0]))

#pragma pack()

/*--------------------------- Global variables ----------------------------*/

#ifdef  __cplusplus
extern "C" {            /* Use "C" linkage when in C++ mode */
#endif

/* Standard code page tables */

extern codepage_t _CP_US_English;

/*------------------------- Function Prototypes ---------------------------*/

/* Public API functions for user applications */

ibool   EVTAPI EVT_getNext(event_t *evt,ulong mask);
ibool   EVTAPI EVT_peekNext(event_t *evt,ulong mask);
ibool   EVTAPI EVT_post(ulong which,ulong what,ulong message,ulong modifiers);
void    EVTAPI EVT_flush(ulong mask);
void    EVTAPI EVT_halt(event_t *evt,ulong mask);
ibool   EVTAPI EVT_isKeyDown(uchar scanCode);
void    EVTAPI EVT_setMousePos(int x,int y);
void    EVTAPI EVT_getMousePos(int *x,int *y);

/* Function to enable/disable updating of keyboard LED status indicators */

void    EVTAPI EVT_allowLEDS(ibool enable);

/* Function to install a custom keyboard code page. Default is US English */

codepage_t *EVTAPI EVT_getCodePage(void);
void    EVTAPI EVT_setCodePage(codepage_t *page);

/* Functions for fine grained joystick calibration */

void    EVTAPI EVT_pollJoystick(void);
int     EVTAPI EVT_joyIsPresent(void);
void    EVTAPI EVT_joySetUpperLeft(void);
void    EVTAPI EVT_joySetLowerRight(void);
void    EVTAPI EVT_joySetCenter(void);

/* Install user supplied event filter callback */

void    EVTAPI EVT_setUserEventFilter(_EVT_userEventFilter filter);

/* Install user supplied event heartbeat callback function */

void    EVTAPI EVT_setHeartBeatCallback(_EVT_heartBeatCallback callback,void *params);
void    EVTAPI EVT_getHeartBeatCallback(_EVT_heartBeatCallback *callback,void **params);

/* Internal functions to initialise and kill the event manager. MGL
 * applications should never call these functions directly as the MGL
 * libraries do it for you.
 */

/* {secret} */
void    EVTAPI EVT_init(_EVT_mouseMoveHandler mouseMove);
/* {secret} */
void    EVTAPI EVT_setMouseRange(int xRes,int yRes);
/* {secret} */
void    EVTAPI EVT_suspend(void);
/* {secret} */
void    EVTAPI EVT_resume(void);
/* {secret} */
void    EVTAPI EVT_exit(void);

#ifdef  __cplusplus
}                       /* End of "C" linkage for C++   */
#endif  /* __cplusplus */

#endif  /* __EVENT_H */
OpenPOWER on IntegriCloud