summaryrefslogtreecommitdiff
path: root/fpcsrc/packages/palmunits/src/sysevtmgr.pp
blob: 915e0752a3b4247c6ee6d46bcd5c61adc45e017c (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
{$MACRO ON}

{$define Rsc := }
(******************************************************************************
 *
 * Copyright (c) 1994-2000 Palm, Inc. or its subsidiaries.
 * All rights reserved.
 *
 * File: SysEvtMgr.h
 *
 * Release: Palm OS SDK 4.0 (63220)
 *
 * Description:
 *    Header for the System Event Manager
 *
 * History:
 *    03/22/95 RM    Created by Ron Marianetti
 *    07/23/98 kwk   Changed UInt16 param in EvtEnqueueKey to WChar.
 *
 *****************************************************************************)

unit sysevtmgr;

interface

uses palmos, coretraps, rect, errorbase, sysevent;

(************************************************************
 * System Event Manager Errors
 *************************************************************)

const
  evtErrParamErr   = evtErrorClass or 1;
  evtErrQueueFull  = evtErrorClass or 2;
  evtErrQueueEmpty = evtErrorClass or 3;

(************************************************************
 * Commands for EvtSetAutoOffTimer()
 *************************************************************)
type
  EvtSetAutoOffCmd = Enum;

const
  SetAtLeast = 0;    // turn off in at least xxx seconds
  SetExactly = Succ(SetAtLeast);    // turn off in xxx seconds
  SetAtMost  = Succ(SetExactly);     // turn off in at most xxx seconds
  SetDefault = Succ(SetAtMost);    // change default auto-off timeout to xxx seconds
  ResetTimer = Succ(SetDefault);    // reset the timer to the default auto-off timeout

(************************************************************
 * Pen button info structure. This structure is used
 *  to hold the bounds of each button on the silk screen and
 *  the ascii code and modifiers byte that each will generate
 *  when tapped by the user.
 *************************************************************)

type
  PenBtnInfoType = record
    boundsR: RectangleType;        // bounding rectangle of button
    asciiCode: WChar;              // ascii code for key event
    keyCode: UInt16;               // virtual key code for key event
    modifiers: UInt16;             // modifiers for key event
  end;
  PenBtnInfoPtr = ^PenBtnInfoType;

type
  PenBtnListType = record
    numButtons: UInt16;                      // Count of number of buttons
    buttons: array [0..0] of PenBtnInfoType; // Placeholder for one or more buttons
  end;

(************************************************************
 * Silkscreen area info structure. An array of these structures
 * is returned by the EvtGetSilkscreenAreaList function.
 *************************************************************)

// Different types of rectangles on the display. For new vendor areas,
// the type should be set to the vendor's creator code, as assigned
// by 3Com's Partner Engineering group.

const
  silkscreenRectScreen    = Rsc('scrn');
  silkscreenRectGraffiti  = Rsc('graf');

// Values for SilkscreenAreaType.index if areaType = silkscreenRectGraffiti
  alphaGraffitiSilkscreenArea   = 0;
  numericGraffitiSilkscreenArea = 1;

// One silkscreen area. The areaType field tells us which type of
// area it is, while the index field has different meanings depending
// on the area type.

type
  SilkscreenAreaType = record
    bounds: RectangleType;
    areaType: UInt32; // four byte creator code.
    index: UInt16;
  end;
  SilkscreenAreaPtr = ^SilkscreenAreaType;

(************************************************************
 * System Event Manager procedures
 *************************************************************)

//-----------------------------------------------------------------
// High Level Calls
//------------------------------------------------------------------

function EvtSysInit: Err; syscall sysTrapEvtSysInit;

// Return next "System" event. This routine will send strokes to Graffiti as necessary
//  and return a key event. Otherwise, it will return a simple pen down or pen
//  up event, or put the processor to sleep for a max time of 'timeout' if
// no events are available.
procedure EvtGetSysEvent(var eventP: SysEventType; timeout: Int32); syscall sysTrapEvtGetSysEvent;

// Return true if there is a low level system event (pen or key) available
function EvtSysEventAvail(ignorePenUps: Boolean): Boolean; syscall sysTrapEvtSysEventAvail;

// Translate a stroke in the silk screen area to a key event
function EvtProcessSoftKeyStroke(var startPtP, endPtP: PointType): Err; syscall sysTrapEvtProcessSoftKeyStroke;

//-----------------------------------------------------------------
// Pen Queue Utilties
//------------------------------------------------------------------

// Replace current pen queue with another of the given size
function EvtSetPenQueuePtr(penQueueP: MemPtr; size: UInt32): Err; syscall sysTrapEvtSetPenQueuePtr;

// Return size of current pen queue in bytes
function EvtPenQueueSize: UInt32; syscall sysTrapEvtPenQueueSize;

// Flush the pen queue
function EvtFlushPenQueue: Err; syscall sysTrapEvtFlushPenQueue;

// Append a point to the pen queue. Passing -1 for x and y means
//  pen-up (terminate the current stroke). Called by digitizer interrupt routine
function EvtEnqueuePenPoint(var ptP: PointType): Err; syscall sysTrapEvtEnqueuePenPoint;

// Return the stroke info for the next stroke in the pen queue. This MUST
//  be the first call when removing a stroke from the queue
function EvtDequeuePenStrokeInfo(var startPtP, endPtP: PointType): Err; syscall sysTrapEvtDequeuePenStrokeInfo;

// Dequeue the next point from the pen queue. Returns non-0 if no
//  more points. The point returned will be (-1,-1) at the end
//  of the stroke.
function EvtDequeuePenPoint(var retP: PointType): Err; syscall sysTrapEvtDequeuePenPoint;

// Flush the entire stroke from the pen queue and dispose it
function EvtFlushNextPenStroke: Err; syscall sysTrapEvtFlushNextPenStroke;

//-----------------------------------------------------------------
// Key Queue Utilties
//------------------------------------------------------------------

// Replace current key queue with another of the given size. This routine will
//  intialize the given key queue before installing it
function EvtSetKeyQueuePtr(keyQueueP: MemPtr; size: UInt32): Err; syscall sysTrapEvtSetKeyQueuePtr;

// Return size of current key queue in bytes
function EvtKeyQueueSize: UInt32; syscall sysTrapEvtKeyQueueSize;

// Flush the key queue
function EvtFlushKeyQueue: Err; syscall sysTrapEvtFlushKeyQueue;

// Append a key to the key queue.
function EvtEnqueueKey(ascii: WChar; keycode, modifiers: UInt16): Err; syscall sysTrapEvtEnqueueKey;

// Return true of key queue empty.
function EvtKeyQueueEmpty: Boolean; syscall sysTrapEvtKeyQueueEmpty;

// Pop off the next key event from the key queue and fill in the given
//  event record structure. Returns non-zero if there aren't any keys in the
//  key queue. If peek is non-zero, key will be left in key queue.
function EvtDequeueKeyEvent(var eventP: SysEventType; peek: UInt16): Err; syscall sysTrapEvtDequeueKeyEvent;

//-----------------------------------------------------------------
// Silkscreen information calls
//------------------------------------------------------------------

// Return pointer to the pen based button list
function EvtGetPenBtnList(var numButtons: UInt16): PenBtnInfoPtr; syscall sysTrapEvtGetPenBtnList;

// Return pointer to the silkscreen area list
function EvtGetSilkscreenAreaList(var numAreas: UInt16): SilkscreenAreaPtr; syscall sysTrapEvtGetSilkscreenAreaList;

//-----------------------------------------------------------------
// General Utilities
//------------------------------------------------------------------
// Force the system to wake-up. This will result in a null event being
//  sent to the current app.
function EvtWakeup: Err; syscall sysTrapEvtWakeup;

// Force the system to wake-up. This will NOT result in a null event being
//  sent to the current app.
function EvtWakeupWithoutNilEvent: Err; syscall sysTrapEvtWakeupWithoutNilEvent;

// Reset the auto-off timer. This is called by the SerialLink Manager in order
//  so we don't auto-off while receiving data over the serial port.
function EvtResetAutoOffTimer: Err; syscall sysTrapEvtResetAutoOffTimer;

function EvtSetAutoOffTimer(cmd: EvtSetAutoOffCmd; timeout: UInt16): Err; syscall sysTrapEvtSetAutoOffTimer;

// Set Graffiti enabled or disabled.
procedure EvtEnableGraffiti(enable: Boolean); syscall sysTrapEvtEnableGraffiti;

// Force a NullEvent at or before tick
function EvtSetNullEventTick(tick: UInt32): Boolean; syscall sysTrapEvtSetNullEventTick;

(************************************************************
 * Assembly Function Prototypes
 *************************************************************)

//#define  _EvtEnqueuePenPoint ASM_SYS_TRAP(sysTrapEvtEnqueuePenPoint)

implementation

end.