9d4b356a89ba757265fac575c9f823135a704837
[expresskeys.git] / src-server / 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
22 /* Standard Program includes */
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <ctype.h>
26 #include <string.h>
27 /* For the basename call */
28 #include <libgen.h>
29 /* For the daemon, getpid and unlink calls */
30 #include <unistd.h>
31 /* For the mkdir call */
32 #include <sys/stat.h>
33 /* For the mkdir, getpid and kill calls */
34 #include <sys/types.h>
35 /* For the signal and kill calls */
36 #include <signal.h>
37
38 /* Standard X includes */
39 #include <X11/Xlib.h>
40 #include <X11/Xutil.h>
41
42 /* Special X extensions we use */
43 #include <X11/extensions/XInput.h>
44 #include <X11/extensions/XTest.h>
45
46 /* Our internal defines */
47 #define EXIT_OK 0
48 #define EXIT_KO 1
49 #define NON_VALID -1
50 #define TOGGLE_PEN 999  /* String signaling the key's use as a mode toggle */
51 #define MAXRECORDS 64   /* Max program definitions to handle (enough? ;-) */
52 #define MAXFIELDS 25    /* Max entries (minus program name) in each record */
53 #define MAXDIGITS 3     /* Max number of digits in a key entry */
54 #define MAXBUFFER 64    /* Scratch buffer. Also sets program name length limit*/
55 #define CONFIG_VERSION 1 /* Config file version - for future format changes */
56
57 /* Our global variables */
58 extern char *our_prog_name;     /* This program's file name */
59 extern char *pen_name;          /* Identifier as set in the X config file */
60 extern char *total_config_dir;  /* The "~/" of the user, plus our config_dir */
61 extern char *total_config_file; /* total_config_dir plus config_file */
62 extern char *total_pid_file;    /* total_config_dir plus pid_file */
63 extern char *total_error_file;  /* total_config_dir plus error_file */
64 extern char *config_dir;        /* Set to a dot directory: .expresskeys */
65 extern char *config_file;       /* Set to expresskeys.conf */
66 extern char *pid_file;          /* Set to expresskeys.pid */
67 extern char *error_file;        /* Set to error.log */
68
69 extern int screen;      /* Active screen. An X thing */
70 extern int num_list;    /* Number of programs we currently handle */
71
72 extern int go_daemon;   /* Flag to see if this program is in daemon mode */
73 extern int reread_config; /* Flag for memory release if redoing the config */
74 extern int handle_pen;  /* Flag (main switch) to see if a pen is handled */
75 extern int pen_mode;    /* Flag to keep track of the pen mode we are in */
76 extern int pen_open;    /* Flag to make sure we only open the pen once */
77
78 extern int motion_type;         /* Event type to keep track of - Touch Strips */
79 extern int button_press_type;   /* Event type to keep track of - Pad Buttons */
80 extern int button_release_type; /* Event type to keep track of - Pad Buttons */
81
82 /* Global X functions */
83 extern Display *display;        /* Active display. An X thing */
84 extern XDeviceInfo *pad_info_block;     /* Base address - searching pad info */
85 extern XDeviceInfo *pen_info_block; /* Base address - searching pen info */
86 extern XDeviceInfo *pad_info;   /* Keeps all X knowledge of the pad device */
87 extern XDeviceInfo *pen_info;   /* Keeps all X knowledge of the pen device */
88 extern XDevice *pad_device;     /* The actual pointer to the pad device */
89 extern XDevice *pen_device;     /* The actual pointer to the pen device */
90
91 /* Our global (internal) functions */
92 extern int write_file_config(int *ip, FILE *fp);
93 extern int read_file_config(int *ip, FILE *fp);
94 extern int get_device_info(Display *display, XDeviceInfo *info, char *name);
95 extern int register_events(Display *display, XDeviceInfo *pad_info, char *name);
96 extern int toggle_pen_mode(Display *display, char *name);
97 extern int use_events(Display *display);
98 extern void exit_on_error(FILE *fp, char *string1, char *string2, char *string3);
99 extern void re_read_file_config(int signum);
100 extern void clean_up_exit(int signum);
101
102 /* Our global structures */
103 /* The internal_list is initialized in globals.c */
104 /* The external_list is initialized from file reads */
105 extern struct program {
106         char *class_name;
107         int handle_touch;
108         int l_touch_up;
109         int l_touch_up_plus;
110         int l_touch_down;
111         int l_touch_down_plus;
112         int r_touch_up;
113         int r_touch_up_plus;
114         int r_touch_down;
115         int r_touch_down_plus;
116         int key_9;
117         int key_9_plus;
118         int key_10;
119         int key_10_plus;
120         int key_11;
121         int key_11_plus;
122         int key_12;
123         int key_12_plus;
124         int key_13;
125         int key_13_plus;
126         int key_14;
127         int key_14_plus;
128         int key_15;
129         int key_15_plus;
130         int key_16;
131         int key_16_plus;
132 }internal_list [], external_list [];
133
134 /* End Code */
135