688711df912cc5f694d5bba93e18f97ae3b8745e
[expresskeys.git] / src-expresskeys / globals.h
1 /*
2  globals.h -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
3  
4  Copyright (C) 2005 - 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 PEN_CURVE_DOWNWARD 1001 /* Pen Sensitivity. Sample xsetwacom usage */
61 #define PEN_CURVE_DEFAULT 1002
62 #define PEN_CURVE_UPWARD 1003
63 #define TOGGLE_PEN 999  /* String signaling the key's use as a mode toggle */
64 #define MAXRECORDS 64   /* Max program definitions to handle (enough? ;-) */
65 #define MAXFIELDS 25    /* Max entries (minus program name) in each record */
66 #define MAXBUFFER 160   /* Scratch buffer. Two full terminal lines */
67 #define CONFIG_VERSION 2 /* Config file version - for future format changes */
68
69 /* Our global variables */
70 extern char *our_prog_name;     /* This program's file name */
71 extern char *our_prog_version; /* Our version. Change it in globals.c! */
72 extern char *pen_name;          /* Identifier as set in the X config file */
73 extern char *total_config_dir;  /* The "~/" of the user, plus our config_dir */
74 extern char *total_config_file; /* total_config_dir plus config_file */
75 extern char *total_pid_file;    /* total_config_dir plus pid_file */
76 extern char *total_error_file;  /* total_config_dir plus error_file */
77 extern char *config_dir;        /* Set to a dot directory: .expresskeys */
78 extern char *config_file;       /* Set to expresskeys.conf */
79 extern char *pid_file;          /* Set to expresskeys.pid */
80 extern char *error_file;        /* Set to error.log */
81
82 extern int screen;      /* Active screen. An X thing */
83 extern int num_list;    /* Number of programs we currently handle */
84
85 extern int go_daemon;   /* Flag to see if this program is in daemon mode */
86 extern int be_verbose;  /* Flag to see if we should be spitting out info */
87 extern int reread_config; /* Flag for memory release if redoing the config */
88 extern int handle_pen;  /* Flag (main switch) to see if a pen is handled */
89 extern int pen_mode;    /* Flag to keep track of the pen mode we are in */
90 extern int pen_open;    /* Flag to make sure we only open the pen once */
91 extern int pen_presscurve; /* Pen Sensitivity. Sample xsetwacom usage */
92
93 extern int motion_type;         /* Event type to keep track of - Touch Strips */
94 extern int button_press_type;   /* Event type to keep track of - Pad Buttons */
95 extern int button_release_type; /* Event type to keep track of - Pad Buttons */
96
97 /* Global X functions */
98 extern Display *display;        /* Active display. An X thing */
99 extern XDeviceInfo *pad_info_block;     /* Base address - searching pad info */
100 extern XDeviceInfo *pen_info_block; /* Base address - searching pen info */
101 extern XDeviceInfo *pad_info;   /* Keeps all X knowledge of the pad device */
102 extern XDeviceInfo *pen_info;   /* Keeps all X knowledge of the pen device */
103 extern XDevice *pad_device;     /* The actual pointer to the pad device */
104 extern XDevice *pen_device;     /* The actual pointer to the pen device */
105
106 /* Our global (internal) functions */
107 extern int write_file_config_header(FILE *fp);
108 extern int write_file_config(int *ip, FILE *fp);
109 extern int read_file_config(int *ip, FILE *fp);
110 /* get_device_info returns a long to satisfy x86_64 systems */
111 extern long get_device_info(Display *display, XDeviceInfo *info, char *name);
112 extern int register_events(Display *display, XDeviceInfo *pad_info, char *name);
113 extern int toggle_pen_mode(Display *display, char *name);
114 extern int use_events(Display *display);
115 extern int call_xsetwacom(int num);
116 extern void exit_on_error(FILE *fp, char *string1, char *string2, char *string3);
117 extern void re_read_file_config(int signum);
118 extern void clean_up_exit(int signum);
119
120 /* Our global structures */
121 /* The internal_list is initialized in globals.c
122    The external_list is initialized from file reads */
123 extern struct program {
124         char *class_name;
125         int handle_touch;
126         int l_touch_up;
127         int l_touch_up_plus;
128         int l_touch_down;
129         int l_touch_down_plus;
130         int r_touch_up;
131         int r_touch_up_plus;
132         int r_touch_down;
133         int r_touch_down_plus;
134         int key_9;
135         int key_9_plus;
136         int key_10;
137         int key_10_plus;
138         int key_11;
139         int key_11_plus;
140         int key_12;
141         int key_12_plus;
142         int key_13;
143         int key_13_plus;
144         int key_14;
145         int key_14_plus;
146         int key_15;
147         int key_15_plus;
148         int key_16;
149         int key_16_plus;
150 }internal_list [], external_list [];
151
152 /* End Code */
153