Subsections
gpmex
The GPM unit implements an interface to filelibgpm, the console
program for mouse handling. This unit was created by Peter Vreman, and 
is only available on LINUX.
When this unit is used, your program is linked to the C libraries, so
you must take care of the C library version. Also, it will only work with
version 1.17 or higher of the libgpm library.
The following constants are used to denote filenames used by the library:
_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';
The following constants denote the buttons on the mouse:
GPM_B_LEFT   = 4;
GPM_B_MIDDLE = 2;
GPM_B_RIGHT  = 1;
The following constants define events:
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;
The following constants are used in defining margins:
GPM_TOP = 1;
GPM_BOT = 2;
GPM_LFT = 4;
GPM_RGT = 8;
The following general types are defined:
  TGpmEtype = longint;
  TGpmMargin = longint;
The following type describes an event; it is passed in many of the gpm
functions.
PGpmEvent = ^TGpmEvent;
TGpmEvent = record
  buttons : byte;
  modifiers : byte;
  vc : word;
  dx : word;
  dy : word;
  x : word;
  y : word;
  EventType : TGpmEType;
  clicks : longint;
  margin : TGpmMargin;
end;
TGpmHandler=function(var event:TGpmEvent;clientdata:pointer):longint;cdecl;
The following types are used in connecting to the gpm server:
PGpmConnect = ^TGpmConnect;
TGpmConnect = record
  eventMask : word;
  defaultMask : word;
  minMod : word;
  maxMod : word;
  pid : longint;
  vc : longint;
end;
The following type is used to define regions of interest
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;
The following variables are imported from the gpm library
gpm_flag           : 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;
6.3.1 Gpm_AnyDouble
- 
Declaration
 - function Gpm_AnyDouble(EventType : longint) : boolean;
- 
Description
 - Gpm_AnyDouble
  returns True if EventType contains
the GPM_DOUBLE flag, False otherwise.
 - 
Errors
 - None.
 - 
See also
 - Gpm_StrictSingle,
Gpm_AnySingle,
Gpm_StrictDouble,
Gpm_StrictTriple,
Gpm_AnyTriple
 
6.3.2 Gpm_AnySingle
- 
Declaration
 - function Gpm_AnySingle(EventType : longint) : boolean;
- 
Description
 - Gpm_AnySingle
  returns True if EventType contains
the GPM_SINGLE flag, False otherwise. 
 - 
Errors
 - 
See also
 - Gpm_StrictSingle,
Gpm_AnyDoubmle,
Gpm_StrictDouble,
Gpm_StrictTriple,
Gpm_AnyTriple
 
6.3.3 Gpm_AnyTriple
- 
Declaration
 - function Gpm_AnyTriple(EventType : longint) : boolean;
- 
Description
  - 
Errors
 - 
See also
 - Gpm_StrictSingle,
Gpm_AnyDoubmle,
Gpm_StrictDouble,
Gpm_StrictTriple,
Gpm_AnySingle
 
6.3.4 Gpm_Close
- 
Declaration
 - function Gpm_Close:longint;cdecl;external;
- 
Description
 - Gpm_Close
  closes the current connection, and pops the connection
stack; this means that the previous connection becomes active again.
The function returns -1 if the current connection is not the last one,
and it returns 0 if the current connection is the last one.
 - 
Errors
 - None.
 - 
See also
 - Gpm_Open
 
for an example, see Gpm_GetEvent.
6.3.5 Gpm_FitValues
- 
Declaration
 - function Gpm_FitValues(var x,y:longint):longint;cdecl;external;
- 
Description
 - Gpm_fitValues
  changes x and y so they fit in the visible
screen. The actual mouse pointer is not affected by this function.
 - 
Errors
 - None.
 - 
See also
 - Gpm_FitValuesM,
 
6.3.6 Gpm_FitValuesM
- 
Declaration
 - function Gpm_FitValuesM(var x,y:longint; margin:longint):longint;cdecl;external;
- 
Description
 - Gpm_FitValuesM
  chnages x and y so they fit in the margin
indicated by margin. If margin is -1, then the values are fitted
to the screen. The actual mouse pointer is not affected by this function.
 - 
Errors
 - None.
 - 
See also
 - Gpm_FitValues,
 
6.3.7 Gpm_GetEvent
- 
Declaration
 - function Gpm_GetEvent(var Event:TGpmEvent):longint;cdecl;external;
- 
Description
 - Gpm_GetEvent
  Reads an event from the file descriptor gpm_fd.
This file is only for internal use and should never be called by a client
application. 
It returns 1 on succes, and -1 on failue.
 - 
Errors
 - On error, -1 is returned. 
 - 
See also
 - seeflGpm_GetSnapshotGpmGetSnapshot
 
- 
Example
 
program gpmex;
{
  Example program to demonstrate the use of the gpm unit.
}
uses gpm;
var
  connect : TGPMConnect;
  event : tgpmevent;
 
begin
  connect.EventMask:=GPM_MOVE or GPM_DRAG or GPM_DOWN or GPM_UP;
  connect.DefaultMask:=0;
  connect.MinMod:=0;
  connect.MaxMod:=0;
  if Gpm_Open(connect,0)=-1 then
    begin
    Writeln('No mouse handler present.');
    Halt(1);
    end;
  Writeln('Click right button to end.');
  Repeat
    gpm_getevent(Event);
    With Event do
      begin
        Write('Pos = (',X,',',Y,') Buttons : (');
        if (buttons and Gpm_b_left)<>0 then
          write('left ');
        if (buttons and Gpm_b_right)<>0 then
          write('right ');
        if (buttons and Gpm_b_middle)<>0 then
          Write('middle ');
        Write(') Event : ');   
        Case EventType and $F of
          GPM_MOVE: write('Move');
          GPM_DRAG: write('Drag');
          GPM_DOWN: write('Down');
          GPM_UP: write('Up');
        end;  
        Writeln;
      end;  
  Until (Event.Buttons and gpm_b_right)<>0;
  gpm_close;
end.
6.3.8 Gpm_GetLibVersion
- 
Declaration
 - function Gpm_GetLibVersion(var where:longint):pchar;cdecl;external;
- 
Description
 - Gpm_GetLibVersion
  returns a pointer to a version string, and returns
in where an integer representing the version. The version string
represents the version of the gpm library.
The return value is a pchar, which should not be dealloacted, i.e. it is not
on the heap.
 - 
Errors
 - None.
 - 
See also
 - Gpm_GetServerVersion
 
6.3.9 Gpm_GetServerVersion
- 
Declaration
 - function Gpm_GetServerVersion(var where:longint):pchar;cdecl;external;
- 
Description
 - Gpm_GetServerVersion
  returns a pointer to a version string, and 
returns in where an integer representing the version. The version string
represents the version of the gpm server program.
The return value is a pchar, which should not be dealloacted, i.e. it is not
on the heap.
 - 
Errors
 - If the gpm program is not present, then the function returns Nil
 - 
See also
 - Gpm_GetLibVersion
 
6.3.10 Gpm_GetSnapshot
- 
Declaration
 - function Gpm_GetSnapshot(var Event:TGpmEvent):longint;cdecl;external;
- 
Description
 - Gpm_GetSnapshot
  returns the picture that the server has of the 
current situation in Event. 
This call will not read the current situation from the mouse file
descriptor, but returns a buffered version.
The meaning of the fields is as follows:
- x,y
 
- current position of the cursor.
 
- dx,dy
 
- size of the window.
 
- vc
 
- number of te virtual console.
 
- modifiers
 
- keyboard shift state.
 
- buttons
 
- buttons which are currently pressed.
 
- clicks
 
- number of clicks (0,1 or 2).
 
The function returns the number of mouse buttons, or -1 if this information
is not available.
 - 
Errors
 - None.
 - 
See also
 - Gpm_GetEvent
 
6.3.11 Gpm_LowerRoi
- 
Declaration
 - function Gpm_LowerRoi(which:PGpmRoi; after:PGpmRoi):PGpmRoi;cdecl;external;
- 
Description
 - Gpm_LowerRoi
  lowers the region of interest which after
after. If after is Nil, the region of interest is moved to
the bottom of the stack.
The return value is the new top of the region-of-interest stack.
 - 
Errors
 - None.
 - 
See also
 - Gpm_RaiseRoi,
Gpm_PopRoi,
Gpm_PushRoi 
 
6.3.12 Gpm_Open
- 
Declaration
 - function Gpm_Open(var Conn:TGpmConnect; Flag:longint):longint;cdecl;external;
- 
Description
 - Gpm_Open
  opens a new connection to the mouse server. The connection
is described by the fields of the conn record:
- EventMask
 
- A bitmask of the events the program wants to receive.
 
- DefaultMask
 
- A bitmask to tell the library which events get their
default treatment (text selection).
 
- minMod
 
- the minimum amount of modifiers needed by the program.
 
- maxMod
 
- the maximum amount of modifiers needed by the program.
 
if Flag is 0, then the application only receives events that come from
its own terminal device. If it is negative it will receive all events. If
the value is positive then it is considered a console number to which to
connect.
The return value is -1 on error, or the file descriptor used to communicate
with the client. Under an X-Term the return value is -2.
 - 
Errors
 - On Error, the return value is -1.
 - 
See also
 - Gpm_Open
 
for an example, see Gpm_GetEvent.
6.3.13 Gpm_PopRoi
- 
Declaration
 - function Gpm_PopRoi(which:PGpmRoi):PGpmRoi;cdecl;external;
- 
Description
 - Gpm_PopRoi
  pops the topmost region of interest from the stack.
It returns the next element on the stack, or Nil if the current 
element was the last one.
 - 
Errors
 - None.
 - 
See also
 - Gpm_RaiseRoi,
Gpm_LowerRoi, 
Gpm_PushRoi 
 
6.3.14 Gpm_PushRoi
- 
Declaration
 - function Gpm_PushRoi(x1:longint; y1:longint; X2:longint; Y2:longint; mask:longint; fun:TGpmHandler; xtradata:pointer):PGpmRoi;cdecl;external;
- 
Description
 - Gpm_PushRoi
  puts a new region of interest on the stack.
The region of interest is defined by a rectangle described by the corners
(X1,Y1) and (X2,Y2). 
The mask describes which events the handler fun will handle;
ExtraData will be put in the xtradata field of the TGPM_Roi 
record passed to the fun handler.
 - 
Errors
 - None.
 - 
See also
 - Gpm_RaiseRoi,
Gpm_PopRoi, 
Gpm_LowerRoi 
 
6.3.15 Gpm_RaiseRoi
- 
Declaration
 - function Gpm_RaiseRoi(which:PGpmRoi; before:PGpmRoi):PGpmRoi;cdecl;external;
- 
Description
 - Gpm_RaiseRoi
  raises the region of interest which till it
is on top of region before. If before is nil then the region is
put on top of the stack. The returned value is the top of the stack.
 - 
Errors
 - None.
 - 
See also
 - Gpm_PushRoi,
Gpm_PopRoi, 
Gpm_LowerRoi 
 
6.3.16 Gpm_Repeat
- 
Declaration
 - function Gpm_Repeat(millisec:longint):longint;cdecl;external;
- 
Description
 - Gpm_Repeat
  returns 1 of no mouse event arrives in the next
millisec miiliseconds, it returns 0 otherwise.
 - 
Errors
 - None.
 - 
See also
 - Gpm_GetEvent
 
6.3.17 Gpm_StrictDouble
- 
Declaration
 - function Gpm_StrictDouble(EventType : longint) : boolean;
- 
Description
 - Gpm_StrictDouble
  returns true if EventType contains only a 
doubleclick event, False otherwise.
 - 
Errors
 - None.
 - 
See also
 - Gpm_StrictSingle,
Gpm_AnyTriple,
Gpm_AnyDouble,
Gpm_StrictTriple,
Gpm_AnySingle
 
6.3.18 Gpm_StrictSingle
- 
Declaration
 - function Gpm_StrictSingle(EventType : longint) : boolean;
- 
Description
 - Gpm_StrictDouble
  returns True if EventType contains only a 
singleclick event, False otherwise. 
 - 
Errors
 - None.
 - 
See also
 - Gpm_AnyTriple,
Gpm_StrictDouble,
Gpm_AnyDouble, 
Gpm_StrictTriple,
Gpm_AnySingle
 
6.3.19 Gpm_StrictTriple
- 
Declaration
 - function Gpm_StrictTriple(EventType : longint) : boolean;
- 
Description
 - Gpm_StrictTriple
  returns true if EventType contains only a
triple click event, False otherwise.
 - 
Errors
 - None.
 - 
See also
 - Gpm_AnyTriple,
Gpm_StrictDouble,
Gpm_AnyDouble, 
Gpm_StrictSingle,
Gpm_AnySingle
 
 
root 
2000-12-20