peter 26 gadi atpakaļ
vecāks
revīzija
6d3f27253d
2 mainītis faili ar 221 papildinājumiem un 3 dzēšanām
  1. 6 3
      rtl/linux/Makefile
  2. 215 0
      rtl/linux/gpm.pp

+ 6 - 3
rtl/linux/Makefile

@@ -77,7 +77,7 @@ UNITOBJECTS=$(SYSTEMUNIT) objpas strings \
             dos crt objects printer graph \
             sysutils typinfo math \
             cpu mmx getopts heaptrc \
-            errors sockets ipc
+            errors sockets gpm ipc
 
 # Unit Objects Which are placed in libfpc.so
 SHAREDLIBUNITOBJECTS=$(SYSTEMUNIT) objpas strings \
@@ -85,7 +85,7 @@ SHAREDLIBUNITOBJECTS=$(SYSTEMUNIT) objpas strings \
             dos crt objects printer \
             sysutils typinfo math \
             cpu mmx getopts heaptrc \
-            errors sockets ipc
+            errors sockets gpm ipc
 
 
 #####################################################################
@@ -293,7 +293,10 @@ ipc$(PPUEXT) : ipc.pp linux$(PPUEXT) $(SYSTEMPPU)
 
 #
 # $Log$
-# Revision 1.28  1999-06-03 09:36:32  peter
+# Revision 1.29  1999-07-01 19:39:42  peter
+#   + gpm unit
+#
+# Revision 1.28  1999/06/03 09:36:32  peter
 #   * first things for sharedlib to work again
 #
 # Revision 1.27  1999/05/28 11:28:30  peter

+ 215 - 0
rtl/linux/gpm.pp

@@ -0,0 +1,215 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 1999 by Peter Vreman
+
+    GPM (>v1.17) mouse Interface for linux
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY;without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+unit gpm;
+interface
+uses
+  linux;
+
+{$linklib gpm}
+{$linklib c}
+
+const
+  _PATH_VARRUN = '/var/run/';
+  _PATH_DEV    = '/dev/';
+  GPM_NODE_DIR = _PATH_VARRUN;
+  GPM_NODE_DIR_MODE = 0775;
+  GPM_NODE_PID  = '/var/run/gpm.pid';
+  GPM_NODE_DEV  = '/dev/gpmctl';
+  GPM_NODE_CTL  = GPM_NODE_DEV;
+  GPM_NODE_FIFO = '/dev/gpmdata';
+
+  GPM_B_LEFT   = 4;
+  GPM_B_MIDDLE = 2;
+  GPM_B_RIGHT  = 1;
+
+type
+  TGpmEtype = longint;
+  TGpmMargin = longint;
+
+const
+  GPM_MOVE = 1;
+  GPM_DRAG = 2;
+  GPM_DOWN = 4;
+  GPM_UP = 8;
+  GPM_SINGLE = 16;
+  GPM_DOUBLE = 32;
+  GPM_TRIPLE = 64;
+  GPM_MFLAG = 128;
+  GPM_HARD = 256;
+  GPM_ENTER = 512;
+  GPM_LEAVE = 1024;
+
+  GPM_TOP = 1;
+  GPM_BOT = 2;
+  GPM_LFT = 4;
+  GPM_RGT = 8;
+
+type
+{$PACKRECORDS 4}
+     PGpmEvent = ^TGpmEvent;
+     TGpmEvent = record
+          buttons : byte;
+          modifiers : byte;
+          vc : word;
+          dx : integer;
+          dy : integer;
+          x : integer;
+          y : integer;
+          wdx : integer;
+          wdy : integer;
+          EventType : TGpmEType;
+          clicks : longint;
+          margin : TGpmMargin;
+       end;
+
+     TGpmHandler=function(var event:TGpmEvent;clientdata:pointer):longint;cdecl;
+
+  const
+     GPM_MAGIC = $47706D4C;
+
+  type
+     PGpmConnect = ^TGpmConnect;
+     TGpmConnect = record
+          eventMask : word;
+          defaultMask : word;
+          minMod : word;
+          maxMod : word;
+          pid : longint;
+          vc : longint;
+       end;
+
+     PGpmRoi = ^TGpmRoi;
+     TGpmRoi = record
+          xMin : integer;
+          xMax : integer;
+          yMin : integer;
+          yMax : integer;
+          minMod : word;
+          maxMod : word;
+          eventMask : word;
+          owned : word;
+          handler : TGpmHandler;
+          clientdata : pointer;
+          prev : PGpmRoi;
+          next : PGpmRoi;
+       end;
+
+var
+  gpm_flag           : longint;cvar;external;
+  gpm_ctlfd          : longint;cvar;external;
+  gpm_fd             : longint;cvar;external;
+  gpm_hflag          : longint;cvar;external;
+  gpm_morekeys       : Longbool;cvar;external;
+  gpm_zerobased      : Longbool;cvar;external;
+  gpm_visiblepointer : Longbool;cvar;external;
+  gpm_mx             : longint;cvar;external;
+  gpm_my             : longint;cvar;external;
+  gpm_timeout        : TTimeVal;cvar;external;
+  _gpm_buf           : array[0..0] of char;cvar;external;
+  _gpm_arg           : ^word;cvar;external;
+  gpm_handler        : TGpmHandler;cvar;external;
+  gpm_data           : pointer;cvar;external;
+  gpm_roi_handler    : TGpmHandler;cvar;external;
+  gpm_roi_data       : pointer;cvar;external;
+  gpm_roi            : PGpmRoi;cvar;external;
+  gpm_current_roi    : PGpmRoi;cvar;external;
+  gpm_consolefd      : longint;cvar;external;
+  Gpm_HandleRoi      : TGpmHandler;cvar;external;
+
+function Gpm_StrictSingle(EventType : longint) : boolean;
+function Gpm_AnySingle(EventType : longint) : boolean;
+function Gpm_StrictDouble(EventType : longint) : boolean;
+function Gpm_AnyDouble(EventType : longint) : boolean;
+function Gpm_StrictTriple(EventType : longint) : boolean;
+function Gpm_AnyTriple(EventType : longint) : boolean;
+
+function Gpm_Open(var _para1:TGpmConnect; _para2:longint):longint;cdecl;external;
+function Gpm_Close:longint;cdecl;external;
+function Gpm_GetEvent(var _para1:TGpmEvent):longint;cdecl;external;
+{function Gpm_Getc(_para1:pFILE):longint;cdecl;external;
+function Gpm_Getchar : longint;}
+function Gpm_Repeat(millisec:longint):longint;cdecl;external;
+function Gpm_FitValuesM(var x,y:longint; margin:longint):longint;cdecl;external;
+function Gpm_FitValues(var x,y:longint):longint;cdecl;external;
+
+{
+function GPM_DRAWPOINTER(ePtr : longint) : longint;
+}
+
+function Gpm_PushRoi(x1:longint; y1:longint; X2:longint; Y2:longint; mask:longint; fun:TGpmHandler; xtradata:pointer):PGpmRoi;cdecl;external;
+function Gpm_PopRoi(which:PGpmRoi):PGpmRoi;cdecl;external;
+function Gpm_RaiseRoi(which:PGpmRoi; before:PGpmRoi):PGpmRoi;cdecl;external;
+function Gpm_LowerRoi(which:PGpmRoi; after:PGpmRoi):PGpmRoi;cdecl;external;
+
+{function Gpm_Wgetch:longint;cdecl;external;
+function Gpm_Getch:longint;}
+
+function Gpm_GetLibVersion(var where:longint):pchar;cdecl;external;
+function Gpm_GetServerVersion(var where:longint):pchar;cdecl;external;
+function Gpm_GetSnapshot(var ePtr:TGpmEvent):longint;cdecl;external;
+
+
+implementation
+
+function Gpm_StrictSingle(EventType : longint) : boolean;
+begin
+  Gpm_StrictSingle:=(EventType and GPM_SINGLE<>0) and not(EventType and GPM_MFLAG<>0);
+end;
+
+function Gpm_AnySingle(EventType : longint) : boolean;
+begin
+  Gpm_AnySingle:=(EventType and GPM_SINGLE<>0);
+end;
+
+function Gpm_StrictDouble(EventType : longint) : boolean;
+begin
+  Gpm_StrictDouble:=(EventType and GPM_DOUBLE<>0) and not(EventType and GPM_MFLAG<>0);
+end;
+
+function Gpm_AnyDouble(EventType : longint) : boolean;
+begin
+  Gpm_AnyDouble:=(EventType and GPM_DOUBLE<>0);
+end;
+
+function Gpm_StrictTriple(EventType : longint) : boolean;
+begin
+  Gpm_StrictTriple:=(EventType and GPM_TRIPLE<>0) and not(EventType and GPM_MFLAG<>0);
+end;
+
+function Gpm_AnyTriple(EventType : longint) : boolean;
+begin
+  Gpm_AnyTriple:=(EventType and GPM_TRIPLE<>0);
+end;
+
+procedure Gpm_CheckVersion;
+var
+  l : longint;
+begin
+  Gpm_GetLibVersion(l);
+  if l<11700 then
+   begin
+     writeln('You need at least gpm 1.17');
+     halt(1);
+   end;
+end;
+
+end.
+{
+  $Log$
+  Revision 1.1  1999-07-01 19:39:43  peter
+    + gpm unit
+
+}