95f54a9ea8ee225bb947e2437f583c102e2d4ead
[expresskeys.git] / src-expresskeys / globals.h
1 /*
2  globals.h -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
3
4  Copyright (C) 2005-2006 - Mats Johannesson
5
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10
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.  See the
14  GNU General Public License for more details.
15
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
19 */
20
21 /* Standard Program includes */
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <ctype.h>
25 #include <string.h>
26 /* For the basename call */
27 #include <libgen.h>
28 /* For the daemon, getpid and unlink calls */
29 #include <unistd.h>
30 /* For the mkdir call */
31 #include <sys/stat.h>
32 /* For the mkdir, getpid and kill calls */
33 #include <sys/types.h>
34 /* For the signal and kill calls */
35 #include <signal.h>
36
37 /* Standard X includes */
38 #include <X11/Xlib.h>
39 #include <X11/Xutil.h>
40
41 /* Special X extensions we use */
42 #include <X11/extensions/XInput.h>
43 #include <X11/extensions/XTest.h>
44
45 /* Our internal defines */
46 #define EXIT_OK 0
47 #define EXIT_KO 1
48 #define NON_VALID -1
49 enum {                 /* Strings signaling key's use as a mouse button */
50         MOUSE_BUTTON_MIN = 990,
51         MOUSE_1,
52         MOUSE_2,
53         MOUSE_3,
54         MOUSE_4,
55         MOUSE_5,
56         MOUSE_6,
57         MOUSE_7,
58         MOUSE_BUTTON_MAX
59 };
60 #define STYLUS1_CURVE_DOWNWARD 1001     /* Pen Sensitivity. Sample xsetwacom usage */
61 #define STYLUS1_CURVE_DEFAULT 1002
62 #define STYLUS1_CURVE_UPWARD 1003
63 #define TOGGLE_STYLUS1 999      /* String signaling the key's use as a mode toggle */
64 #define MAXRECORDS 64   /* Max program definitions to handle (enough? ;-) */
65 #define MAXBUFFER 160   /* Scratch buffer. Two full terminal lines */
66 #define CURVEMAX 16     /* PressCurve max number length, eg "100 100 100 100" + NULL */
67
68 /* Our global variables */
69 extern char *configstring; /* Config file string preceding config file version nr. */
70 extern char *configversion; /* For future format changes. Define it in globals.c! */
71 extern char *pad1idstring;              /* Marker preceding the xorg.conf device Identifier */
72 extern char *stylus1idstring;   /* Marker preceding the xorg.conf device Identifier */
73 extern char *our_prog_name;     /* This program's file name */
74 extern char *our_prog_version; /* Our program version. Change it in globals.c! */
75 extern char *pad1_name;                 /* Identifier as set in the X config file */
76 extern char *pad1_autoname;             /* Picking the name directly from X */
77 extern char *stylus1_name;              /* Identifier as set in the X config file */
78 extern char *stylus1_autoname;  /*  Picking the name directly from X */
79 extern char *total_config_dir;  /* The "~/" of the user, plus our config_dir */
80 extern char *total_config_file; /* total_config_dir plus config_file */
81 extern char *total_pid_file;    /* total_config_dir plus pid_file */
82 extern char *total_error_file;  /* total_config_dir plus error_file */
83 extern char *config_dir;        /* Set to a dot directory: .expresskeys */
84 extern char *config_file;       /* Set to NULL */
85 extern char *pid_file;          /* Set to expresskeys.pid */
86 extern char *error_file;        /* Set to error.log */
87 extern char *config_file_padless;
88 extern char *config_file_intuos3;
89 extern char *config_file_graphire4;
90
91
92 extern int userconfigversion; /* Keep track of which format to parse */
93 extern int config3headerfields; /* Nr. of fields in the header of a configversion 3 file */
94 extern int configheaderfields; /* The decided number of fields to parse in each file */
95 extern int config3fields; /* Nr. of fields in a configversion 3 record: globals.c! */
96 extern int configfields; /* The decided number of fields to parse in each record */
97 extern int screen;      /* Active screen. An X thing */
98 extern int num_list;    /* Number of programs we currently handle */
99
100 extern int just_exit;   /* Flag to see if we should exit the program immediately */
101 extern int go_daemon;   /* Flag to see if this program is in daemon mode */
102 extern int second_instance; /* Flag it if a second instance of a daemon run is tried */
103 extern int be_verbose;  /* Flag to see if we should be spitting out info */
104 extern int reread_config; /* Flag for memory release if re-reading the config */
105 extern int stylus1_mode;        /* Flag to keep track of the stylus mode we are in */
106 extern int padstylus1_presscurve; /* Pen Sensitivity. Sample xsetwacom usage */
107
108 extern int motion_type;         /* Event type to keep track of - Touch Strips */
109 extern int button_press_type;   /* Event type to keep track of - Pad/Stylus Buttons */
110 extern int button_release_type; /* Event type to keep track of - Pad Buttons */
111 extern int proximity_in_type;   /* Event type to keep track of - Stylus In */
112
113 /* Our global (internal) functions */
114 extern int write_file_config_header(FILE *fp);
115 extern int write_file_config(int *ip, FILE *fp);
116 extern int read_file_config(int *ip, int *ihp, FILE *fp);
117 /* get_device_info returns a long to satisfy x86_64 systems */
118 extern long get_device_info(Display *display, XDeviceInfo *info, char *name);
119 extern int register_events(Display *display, XDeviceInfo *dev_info, char *name);
120 extern int toggle_stylus1_mode(Display *display, char *name);
121 extern int use_events(Display *display);
122 extern int call_xsetwacom(int num);
123 extern void exit_on_error(FILE *fp, char *string1, char *string2, char *string3);
124 extern void re_read_file_config(int signum);
125 extern void status_report(int signum);
126 extern void clean_up_exit(int signum);
127
128 /* Global X structures */
129 extern Display *display;        /* Active display. An X thing */
130 extern XDeviceInfo *pad1_info_block;    /* Base address - searching pad info */
131 extern XDeviceInfo *stylus1_info_block; /* Base address - searching pen info */
132 extern XDeviceInfo *pad1_info;  /* Keeps all X knowledge of the pad device */
133 extern XDeviceInfo *stylus1_info;       /* Keeps all X knowledge of the pen device */
134 extern XDevice *pad1_device;    /* The actual pointer to the pad device */
135 extern XDevice *stylus1_device; /* The actual pointer to the pen device */
136
137 /* Our global structures */
138 extern struct program *default_program; /* Pointer to the "default" program record */
139
140 /* The internal_list is initialized in globals.c
141    The external_list is initialized from file reads */
142 extern struct program {
143         char *class_name;
144         char *stylus1_presscurve;
145         int handle_touch;
146         int l_touch_up;
147         int l_touch_up_plus;
148         int l_touch_down;
149         int l_touch_down_plus;
150         int r_touch_up;
151         int r_touch_up_plus;
152         int r_touch_down;
153         int r_touch_down_plus;
154         int key_9;
155         int key_9_plus;
156         int key_10;
157         int key_10_plus;
158         int key_11;
159         int key_11_plus;
160         int key_12;
161         int key_12_plus;
162         int key_13;
163         int key_13_plus;
164         int key_14;
165         int key_14_plus;
166         int key_15;
167         int key_15_plus;
168         int key_16;
169         int key_16_plus;
170 }internal_list [], external_list [];
171
172 /* This list is initialized in globals.c */
173 extern struct configstrings {
174         char *h_class_name;
175         char *h_stylus1_presscurve;
176         char *h_handle_touch;
177         char *h_l_touch_up;
178         char *h_l_touch_up_plus;
179         char *h_l_touch_down;
180         char *h_l_touch_down_plus;
181         char *h_r_touch_up;
182         char *h_r_touch_up_plus;
183         char *h_r_touch_down;
184         char *h_r_touch_down_plus;
185         char *h_key_9;
186         char *h_key_9_plus;
187         char *h_key_10;
188         char *h_key_10_plus;
189         char *h_key_11;
190         char *h_key_11_plus;
191         char *h_key_12;
192         char *h_key_12_plus;
193         char *h_key_13;
194         char *h_key_13_plus;
195         char *h_key_14;
196         char *h_key_14_plus;
197         char *h_key_15;
198         char *h_key_15_plus;
199         char *h_key_16;
200         char *h_key_16_plus;
201 }human_readable [];
202
203 /* End Code */
204