summaryrefslogtreecommitdiff
blob: 43d4a845839b7248ba9bfbc3917211a711585f88 (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
/*
 * gpmInt.h - server-only stuff for gpm-Linux
 *
 * Copyright (C) 1994-1999  Alessandro Rubini <rubini@linux.it>
 * Copyright (C) 1998	    Ian Zimmerman <itz@rahul.net>
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   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.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
 ********/

#ifndef _GPMINT_INCLUDED
#define _GPMINT_INCLUDED

/* $Id: gpmInt.h,v 1.1 2000/11/12 21:35:07 achim Exp $ */

#include <sys/types.h>          /* time_t */

#include "gpmCfg.h"
#include "gpm.h"

#if !defined(__GNUC__)
#  define inline
#endif 

#ifdef DEBUG
#  define inline
#endif

#ifndef OPEN_MAX
#define OPEN_MAX 256
#endif

#include "wd.h" /* when debugging macros */

/*....................................... Strange requests (iff conn->pid==0)*/

#define GPM_REQ_SNAPSHOT 0
#define GPM_REQ_BUTTONS  1
#define GPM_REQ_CONFIG   2
#define GPM_REQ_NOPASTE  3

/*....................................... Structures */


/*
 * and this is the entry in the mouse-type table
 */
typedef struct Gpm_Type {
  char *name;
  char *desc;             /* a descriptive line */
  char *synonyms;         /* extra names (the XFree name etc) as a list */
  int (*fun)(Gpm_Event *state, unsigned char *data);
  struct Gpm_Type *(*init)(int fd, unsigned short flags,
			   struct Gpm_Type *type, int argc, char **argv);
  unsigned short flags;
  unsigned char proto[4];
  int packetlen;
  int howmany;            /* howmany bytes to read at a time */
  int getextra;           /* does it get an extra byte? (only mouseman) */
  int absolute;           /* flag indicating absolute pointing device */

  int (*repeat_fun)(Gpm_Event *state, int fd); /* repeat this event into fd */
                          /* itz Mon Jan 11 23:27:54 PST 1999 */
}                   Gpm_Type;

#define GPM_EXTRA_MAGIC_1 0xAA
#define GPM_EXTRA_MAGIC_2 0x55

typedef struct Gpm_Cinfo {
  Gpm_Connect data;
  int fd;
  struct Gpm_Cinfo *next;
}              Gpm_Cinfo;


/*....................................... Global variables */

/* this structure is used to hide the dual-mouse stuff */

struct mouse_features {
  char *opt_type, *opt_dev, *opt_sequence;
  int opt_baud,opt_sample,opt_delta, opt_accel, opt_scale, opt_scaley;
  int opt_time, opt_cluster, opt_three, opt_glidepoint_tap;
  char *opt_options; /* extra textual configuration */
  Gpm_Type *m_type;
  int fd;
};

extern struct mouse_features mouse_table[3], *which_mouse; /*the current one*/

typedef struct Opt_struct_type {int a,B,d,i,p,r,V,A;} Opt_struct_type;

/* this is not very clean, actually, but it works fine */
#define opt_type     (which_mouse->opt_type)
#define opt_dev      (which_mouse->opt_dev)
#define opt_sequence (which_mouse->opt_sequence)
#define opt_baud     (which_mouse->opt_baud)
#define opt_sample   (which_mouse->opt_sample)
#define opt_delta    (which_mouse->opt_delta)
#define opt_accel    (which_mouse->opt_accel)
#define opt_scale    (which_mouse->opt_scale)
#define opt_scaley   (which_mouse->opt_scaley)
#define opt_time     (which_mouse->opt_time)
#define opt_cluster  (which_mouse->opt_cluster)
#define opt_three    (which_mouse->opt_three)
#define opt_glidepoint_tap (which_mouse->opt_glidepoint_tap)
#define opt_options  (which_mouse->opt_options)

#define m_type       (which_mouse->m_type)

/* the other variables */

extern char *prgname;
extern char *opt_lut;
extern int opt_test, opt_ptrdrag;
extern int opt_kill;
extern int opt_repeater, opt_double;
extern char* opt_repeater_type;
extern int opt_kernel, opt_explicittype;
extern int opt_aged;
extern time_t opt_age_limit;
extern char *opt_special;
extern int opt_rawrep;
extern int fifofd;
extern char *consolename; /* the selected one */

extern Gpm_Type *repeated_type;
extern Gpm_Type mice[];
extern struct winsize win;
extern int maxx, maxy;
extern Gpm_Cinfo *cinfo[MAX_VC+1];

/*....................................... Prototypes */
       /* gpm.c */
int main(int argc, char **argv);

       /* gpn.c */
#define oops(s) gpm_oops(__FILE__, __LINE__,(s))
int cmdline(int argc, char **argv);
int giveInfo(int request, int fd);
       /* mice.c */
extern int M_listTypes(void);
       /* special.c */
int processSpecial(Gpm_Event *event);
int twiddler_key(unsigned long message);
int twiddler_key_init(void);

/*....................................... Dirty hacks */

#undef GPM_USE_MAGIC /* magic token foreach message? */


#ifdef GPM_USE_MAGIC
#define MAGIC_P(code) code
#else
#define MAGIC_P(code) 
#endif

#endif /* _GPMINT_INCLUDED */