Initial revision
[AROS-Contrib.git] / development / compilers / freepascal / rtl / unix / gpm.pp
blob787c44ac5ce6839ff0ebd5b6571600bac1dd2fe5
2 $Id$
3 This file is part of the Free Pascal run time library.
4 Copyright (c) 1999-2000 by Peter Vreman
6 GPM (>v1.17) mouse Interface for linux
8 See the file COPYING.FPC, included in this distribution,
9 for details about the copyright.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY;without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 **********************************************************************}
16 unit gpm;
17 interface
18 uses
19 linux;
21 {$linklib gpm}
22 {$linklib c}
24 const
25 _PATH_VARRUN = '/var/run/';
26 _PATH_DEV = '/dev/';
27 GPM_NODE_DIR = _PATH_VARRUN;
28 GPM_NODE_DIR_MODE = 0775;
29 GPM_NODE_PID = '/var/run/gpm.pid';
30 GPM_NODE_DEV = '/dev/gpmctl';
31 GPM_NODE_CTL = GPM_NODE_DEV;
32 GPM_NODE_FIFO = '/dev/gpmdata';
34 GPM_B_LEFT = 4;
35 GPM_B_MIDDLE = 2;
36 GPM_B_RIGHT = 1;
38 type
39 TGpmEtype = longint;
40 TGpmMargin = longint;
42 const
43 GPM_MOVE = 1;
44 GPM_DRAG = 2;
45 GPM_DOWN = 4;
46 GPM_UP = 8;
47 GPM_SINGLE = 16;
48 GPM_DOUBLE = 32;
49 GPM_TRIPLE = 64;
50 GPM_MFLAG = 128;
51 GPM_HARD = 256;
52 GPM_ENTER = 512;
53 GPM_LEAVE = 1024;
55 GPM_TOP = 1;
56 GPM_BOT = 2;
57 GPM_LFT = 4;
58 GPM_RGT = 8;
60 type
61 {$PACKRECORDS c}
62 PGpmEvent = ^TGpmEvent;
63 TGpmEvent = record
64 buttons : byte;
65 modifiers : byte;
66 vc : word;
67 dx : word;
68 dy : word;
69 x,y : word;
70 wdx,wdy : word;
71 EventType : TGpmEType;
72 clicks : longint;
73 margin : TGpmMargin;
74 end;
76 TGpmHandler=function(var event:TGpmEvent;clientdata:pointer):longint;cdecl;
78 const
79 GPM_MAGIC = $47706D4C;
81 type
82 PGpmConnect = ^TGpmConnect;
83 TGpmConnect = record
84 eventMask : word;
85 defaultMask : word;
86 minMod : word;
87 maxMod : word;
88 pid : longint;
89 vc : longint;
90 end;
92 PGpmRoi = ^TGpmRoi;
93 TGpmRoi = record
94 xMin : integer;
95 xMax : integer;
96 yMin : integer;
97 yMax : integer;
98 minMod : word;
99 maxMod : word;
100 eventMask : word;
101 owned : word;
102 handler : TGpmHandler;
103 clientdata : pointer;
104 prev : PGpmRoi;
105 next : PGpmRoi;
106 end;
109 gpm_flag : longint;cvar;external;
110 gpm_fd : longint;cvar;external;
111 gpm_hflag : longint;cvar;external;
112 gpm_morekeys : Longbool;cvar;external;
113 gpm_zerobased : Longbool;cvar;external;
114 gpm_visiblepointer : Longbool;cvar;external;
115 gpm_mx : longint;cvar;external;
116 gpm_my : longint;cvar;external;
117 gpm_timeout : TTimeVal;cvar;external;
118 _gpm_buf : array[0..0] of char;cvar;external;
119 _gpm_arg : ^word;cvar;external;
120 gpm_handler : TGpmHandler;cvar;external;
121 gpm_data : pointer;cvar;external;
122 gpm_roi_handler : TGpmHandler;cvar;external;
123 gpm_roi_data : pointer;cvar;external;
124 gpm_roi : PGpmRoi;cvar;external;
125 gpm_current_roi : PGpmRoi;cvar;external;
126 gpm_consolefd : longint;cvar;external;
127 Gpm_HandleRoi : TGpmHandler;cvar;external;
129 function Gpm_StrictSingle(EventType : longint) : boolean;
130 function Gpm_AnySingle(EventType : longint) : boolean;
131 function Gpm_StrictDouble(EventType : longint) : boolean;
132 function Gpm_AnyDouble(EventType : longint) : boolean;
133 function Gpm_StrictTriple(EventType : longint) : boolean;
134 function Gpm_AnyTriple(EventType : longint) : boolean;
136 function Gpm_Open(var _para1:TGpmConnect; _para2:longint):longint;cdecl;external;
137 function Gpm_Close:longint;cdecl;external;
138 function Gpm_GetEvent(var _para1:TGpmEvent):longint;cdecl;external;
139 {function Gpm_Getc(_para1:pFILE):longint;cdecl;external;
140 function Gpm_Getchar : longint;}
141 function Gpm_Repeat(millisec:longint):longint;cdecl;external;
142 function Gpm_FitValuesM(var x,y:longint; margin:longint):longint;cdecl;external;
143 function Gpm_FitValues(var x,y:longint):longint;cdecl;external;
146 function GPM_DRAWPOINTER(ePtr : longint) : longint;
149 function Gpm_PushRoi(x1:longint; y1:longint; X2:longint; Y2:longint; mask:longint; fun:TGpmHandler; xtradata:pointer):PGpmRoi;cdecl;external;
150 function Gpm_PopRoi(which:PGpmRoi):PGpmRoi;cdecl;external;
151 function Gpm_RaiseRoi(which:PGpmRoi; before:PGpmRoi):PGpmRoi;cdecl;external;
152 function Gpm_LowerRoi(which:PGpmRoi; after:PGpmRoi):PGpmRoi;cdecl;external;
154 {function Gpm_Wgetch:longint;cdecl;external;
155 function Gpm_Getch:longint;}
157 function Gpm_GetLibVersion(var where:longint):pchar;cdecl;external;
158 function Gpm_GetServerVersion(var where:longint):pchar;cdecl;external;
159 function Gpm_GetSnapshot(var ePtr:TGpmEvent):longint;cdecl;external;
162 implementation
164 function Gpm_StrictSingle(EventType : longint) : boolean;
165 begin
166 Gpm_StrictSingle:=(EventType and GPM_SINGLE<>0) and not(EventType and GPM_MFLAG<>0);
167 end;
169 function Gpm_AnySingle(EventType : longint) : boolean;
170 begin
171 Gpm_AnySingle:=(EventType and GPM_SINGLE<>0);
172 end;
174 function Gpm_StrictDouble(EventType : longint) : boolean;
175 begin
176 Gpm_StrictDouble:=(EventType and GPM_DOUBLE<>0) and not(EventType and GPM_MFLAG<>0);
177 end;
179 function Gpm_AnyDouble(EventType : longint) : boolean;
180 begin
181 Gpm_AnyDouble:=(EventType and GPM_DOUBLE<>0);
182 end;
184 function Gpm_StrictTriple(EventType : longint) : boolean;
185 begin
186 Gpm_StrictTriple:=(EventType and GPM_TRIPLE<>0) and not(EventType and GPM_MFLAG<>0);
187 end;
189 function Gpm_AnyTriple(EventType : longint) : boolean;
190 begin
191 Gpm_AnyTriple:=(EventType and GPM_TRIPLE<>0);
192 end;
194 procedure Gpm_CheckVersion;
196 l : longint;
197 begin
198 Gpm_GetLibVersion(l);
199 if l<11700 then
200 begin
201 writeln('You need at least gpm 1.17');
202 halt(1);
203 end;
204 end;
206 end.
208 $Log$
209 Revision 1.1 2002/02/19 08:26:16 sasu
210 Initial revision
212 Revision 1.1.2.2 2000/11/22 22:44:32 peter
213 * fixed gpmevent
215 Revision 1.1.2.1 2000/09/14 13:38:25 marco
216 * Moved from Linux dir. now start of generic unix dir, from which the
217 really exotic features should be moved to the target specific dirs.
219 Revision 1.1 2000/07/13 06:30:53 michael
220 + Initial import
222 Revision 1.5 2000/06/15 06:17:35 michael
223 Corrected TGpmEvent
225 Revision 1.4 2000/02/09 16:59:31 peter
226 * truncated log
228 Revision 1.3 2000/01/26 21:51:34 peter
229 * removed gpm_ctlfd
231 Revision 1.2 2000/01/07 16:41:40 daniel
232 * copyright 2000