summaryrefslogtreecommitdiff
path: root/handle.c
diff options
context:
space:
mode:
Diffstat (limited to 'handle.c')
-rw-r--r--handle.c273
1 files changed, 135 insertions, 138 deletions
diff --git a/handle.c b/handle.c
index df2e82a..9d91d55 100644
--- a/handle.c
+++ b/handle.c
@@ -26,6 +26,7 @@ other dealings in this Software without prior written authorization
from The Open Group.
*/
+/* $XFree86: xc/programs/xmodmap/handle.c,v 3.7 2001/12/14 20:02:13 dawes Exp $ */
#include <X11/Xos.h>
#include <X11/Xlib.h>
@@ -33,6 +34,7 @@ from The Open Group.
#include <ctype.h>
#include "xmodmap.h"
#include "wq.h"
+#include <stdlib.h>
static XModifierKeymap *map = NULL;
@@ -51,10 +53,8 @@ struct wq work_queue = {NULL, NULL};
* common utility routines
*/
-KeyCode *KeysymToKeycodes(dpy, keysym, pnum_kcs)
- Display *dpy;
- KeySym keysym;
- int *pnum_kcs;
+static KeyCode *
+KeysymToKeycodes(Display *dpy, KeySym keysym, int *pnum_kcs)
{
KeyCode *kcs = NULL;
int i, j;
@@ -66,8 +66,8 @@ KeyCode *KeysymToKeycodes(dpy, keysym, pnum_kcs)
if (!kcs)
kcs = (KeyCode *)malloc(sizeof(KeyCode));
else
- kcs = (KeyCode *)realloc((char *)kcs,
- sizeof(KeyCode) * (*pnum_kcs + 1));
+ kcs = (KeyCode *)realloc((char *)kcs,
+ sizeof(KeyCode) * (*pnum_kcs + 1));
kcs[*pnum_kcs] = i;
*pnum_kcs += 1;
break;
@@ -77,9 +77,8 @@ KeyCode *KeysymToKeycodes(dpy, keysym, pnum_kcs)
return kcs;
}
-char *copy_to_scratch (s, len)
- char *s;
- int len;
+static char *
+copy_to_scratch(char *s, int len)
{
static char *buf = NULL;
static int buflen = 0;
@@ -98,33 +97,48 @@ char *copy_to_scratch (s, len)
return (buf);
}
-static badheader ()
+static void
+badheader(void)
{
fprintf (stderr, "%s: %s:%d: bad ", ProgramName, inputFilename, lineno);
parse_errors++;
}
+#define badmsg0(what) { badheader(); fprintf (stderr, what); \
+ putc ('\n', stderr); }
+
#define badmsg(what,arg) { badheader(); fprintf (stderr, what, arg); \
putc ('\n', stderr); }
#define badmsgn(what,s,len) badmsg (what, copy_to_scratch (s, len))
-void initialize_map ()
+void
+initialize_map (void)
{
map = XGetModifierMapping (dpy);
return;
}
-static void do_keycode(), do_keysym(), finish_keycodes();
-static void do_add(), do_remove(), do_clear(), do_pointer();
-static int get_keysym_list();
+static void do_keycode ( char *line, int len );
+static void do_keysym ( char *line, int len );
+static void finish_keycodes ( char *line, int len, KeyCode *keycodes,
+ int count );
+static void do_add ( char *line, int len );
+static void do_remove ( char *line, int len );
+static void do_clear ( char *line, int len );
+static void do_pointer ( char *line, int len );
+static int get_keysym_list ( char *line, int len, int *np, KeySym **kslistp );
+
+static void print_opcode(union op *op);
-int skip_word(), skip_space(), skip_chars();
+static int skip_word ( char *s, int len );
+static int skip_chars ( char *s, int len );
+static int skip_space ( char *s, int len );
static struct dt {
char *command; /* name of input command */
int length; /* length of command */
- void (*proc)(); /* handler */
+ void (*proc)(char *, int); /* handler */
} dispatch_table[] = {
{ "keycode", 7, do_keycode },
{ "keysym", 6, do_keysym },
@@ -139,9 +153,9 @@ static struct dt {
* and trailing whitespace removed) and builds up the work queue.
*/
-void handle_line (line, len)
- char *line; /* string to parse */
- int len; /* length of line */
+void
+handle_line(char *line, /* string to parse */
+ int len) /* length of line */
{
int n;
struct dt *dtp;
@@ -173,9 +187,8 @@ void handle_line (line, len)
* the following routines are useful for parsing
*/
-int skip_word (s, len)
- register char *s;
- register int len;
+static int
+skip_word (char *s, int len)
{
register int n;
@@ -183,9 +196,8 @@ int skip_word (s, len)
return (n + skip_space (s+n, len-n));
}
-int skip_chars (s, len)
- register char *s;
- register int len;
+static int
+skip_chars(char *s, int len)
{
register int i;
@@ -197,9 +209,8 @@ int skip_chars (s, len)
return (i);
}
-int skip_space (s, len)
- register char *s;
- register int len;
+static int
+skip_space(char *s, int len)
{
register int i;
@@ -212,10 +223,8 @@ int skip_space (s, len)
}
-int skip_until_char (s, len, c)
- register char *s;
- register int len;
- register char c;
+static int
+skip_until_char(char *s, int len, char c)
{
register int i;
@@ -225,11 +234,9 @@ int skip_until_char (s, len, c)
return (i);
}
-int skip_until_chars (s, len, cs, cslen)
- char *s;
- int len;
- register char *cs;
- register int cslen;
+#if 0
+static int
+skip_until_chars(char *s, int len, char *cs, int cslen)
{
int i;
@@ -244,6 +251,7 @@ int skip_until_chars (s, len, cs, cslen)
done:
return (i);
}
+#endif
/*
* The action routines.
@@ -259,9 +267,8 @@ int skip_until_chars (s, len, cs, cslen)
* inputFilename name of the file being processed
* lineno line number of current line in input file
*/
-
-add_to_work_queue (p) /* this can become a macro someday */
- union op *p;
+static void
+add_to_work_queue(union op *p) /* this can become a macro someday */
{
if (work_queue.head == NULL) { /* nothing on the list */
work_queue.head = work_queue.tail = p; /* head, tail, no prev */
@@ -277,9 +284,9 @@ add_to_work_queue (p) /* this can become a macro someday */
return;
}
-char *copystring (s, len)
- char *s;
- int len;
+#if 0
+static char *
+copystring(char *s, int len)
{
char *retval;
@@ -290,10 +297,10 @@ char *copystring (s, len)
}
return (retval);
}
+#endif
-static Bool parse_number (str, val)
- char *str;
- unsigned long *val;
+static Bool
+parse_number(char *str, unsigned long *val)
{
char *fmt = "%ld";
@@ -312,11 +319,8 @@ static Bool parse_number (str, val)
return (sscanf (str, fmt, val) == 1);
}
-static Bool parse_keysym (line, n, name, keysym)
- char *line;
- int n;
- char **name;
- KeySym *keysym;
+static Bool
+parse_keysym(char *line, int n, char **name, KeySym *keysym)
{
*name = copy_to_scratch (line, n);
if (!strcmp(*name, "NoSymbol")) {
@@ -339,34 +343,37 @@ static Bool parse_keysym (line, n, name, keysym)
* listed.
*/
-static void do_keycode (line, len)
- char *line;
- int len;
+static void
+do_keycode(char *line, int len)
{
int dummy;
char *fmt = "%d";
KeyCode keycode;
if (len < 3 || !line || *line == '\0') { /* 5=a minimum */
- badmsg ("keycode input line", NULL);
+ badmsg0 ("keycode input line");
return;
}
+ /*
+ * We need not bother to advance line/len past the
+ * number (or the string 'any') as finish_keycodes() will
+ * first advance past the '='.
+ */
if (!strncmp("any", line, 3)) {
keycode = 0;
- len += 3;
} else {
if (*line == '0') line++, len--, fmt = "%o";
if (*line == 'x' || *line == 'X') line++, len--, fmt = "%x";
dummy = 0;
if (sscanf (line, fmt, &dummy) != 1 || dummy == 0) {
- badmsg ("keycode value", NULL);
+ badmsg0 ("keycode value");
return;
}
keycode = (KeyCode) dummy;
if ((int)keycode < min_keycode || (int)keycode > max_keycode) {
- badmsg ("keycode value (out of range)", NULL);
+ badmsg0 ("keycode value (out of range)");
return;
}
}
@@ -384,9 +391,8 @@ static void do_keycode (line, len)
* The left keysyms has to be checked for validity and evaluated.
*/
-static void do_keysym (line, len)
- char *line;
- int len;
+static void
+do_keysym(char *line, int len)
{
int n;
KeyCode *keycodes;
@@ -394,13 +400,13 @@ static void do_keysym (line, len)
char *tmpname;
if (len < 3 || !line || *line == '\0') { /* a=b minimum */
- badmsg ("keysym input line", NULL);
+ badmsg0 ("keysym input line");
return;
}
n = skip_chars (line, len);
if (n < 1) {
- badmsg ("target keysym name", NULL);
+ badmsg0 ("target keysym name");
return;
}
if (!parse_keysym(line, n, &tmpname, &keysym)) {
@@ -426,11 +432,8 @@ static void do_keysym (line, len)
finish_keycodes (line, len, keycodes, n);
}
-static void finish_keycodes (line, len, keycodes, count)
- char *line;
- int len;
- KeyCode *keycodes;
- int count;
+static void
+finish_keycodes(char *line, int len, KeyCode *keycodes, int count)
{
int n;
KeySym *kslist;
@@ -441,7 +444,7 @@ static void finish_keycodes (line, len, keycodes, count)
line += n, len -= n;
if (len < 1 || *line != '=') { /* = minimum */
- badmsg ("keycode command (missing keysym list),", NULL);
+ badmsg0 ("keycode command (missing keysym list),");
return;
}
line++, len--; /* skip past the = */
@@ -493,9 +496,8 @@ struct modtab modifier_table[] = { /* keep in order so it can be index */
{ "ctrl", 4, 2 },
{ NULL, 0, 0 }};
-static int parse_modifier (line, n)
- register char *line;
- register int n;
+static int
+parse_modifier(char *line, int n)
{
register int i;
struct modtab *mt;
@@ -522,9 +524,8 @@ static int parse_modifier (line, n)
* is not important. There should also be an alias Ctrl for control.
*/
-static void do_add (line, len)
- char *line;
- int len;
+static void
+do_add(char *line, int len)
{
int n;
int modifier;
@@ -533,7 +534,7 @@ static void do_add (line, len)
struct op_addmodifier *opam;
if (len < 6 || !line || *line == '\0') { /* Lock=a minimum */
- badmsg ("add modifier input line", NULL);
+ badmsg0 ("add modifier input line");
return;
}
@@ -552,7 +553,7 @@ static void do_add (line, len)
line += n, len -= n;
n = skip_until_char (line, len, '=');
if (n < 0) {
- badmsg ("add modifier = keysym", NULL);
+ badmsg0 ("add modifier = keysym");
return;
}
@@ -563,7 +564,7 @@ static void do_add (line, len)
if (get_keysym_list (line, len, &n, &kslist) < 0)
return;
if (n == 0) {
- badmsg ("add modifier keysym list (empty)", NULL);
+ badmsg0 ("add modifier keysym list (empty)");
return;
}
@@ -587,9 +588,8 @@ static void do_add (line, len)
/*
* make_add - stick a single add onto the queue
*/
-static void make_add (modifier, keysym)
- int modifier;
- KeySym keysym;
+static void
+make_add(int modifier, KeySym keysym)
{
union op *uop;
struct op_addmodifier *opam;
@@ -628,9 +628,8 @@ static void make_add (modifier, keysym)
* is not important. There should also be an alias Ctrl for control.
*/
-static void do_remove (line, len)
- char *line;
- int len;
+static void
+do_remove(char *line, int len)
{
int n;
int nc;
@@ -643,7 +642,7 @@ static void do_remove (line, len)
struct op_removemodifier *oprm;
if (len < 6 || !line || *line == '\0') { /* Lock=a minimum */
- badmsg ("remove modifier input line", NULL);
+ badmsg0 ("remove modifier input line");
return;
}
@@ -662,7 +661,7 @@ static void do_remove (line, len)
line += n, len -= n;
n = skip_until_char (line, len, '=');
if (n < 0) {
- badmsg ("remove modifier = keysym", NULL);
+ badmsg0 ("remove modifier = keysym");
return;
}
@@ -673,7 +672,7 @@ static void do_remove (line, len)
if (get_keysym_list (line, len, &n, &kslist) < 0)
return;
if (n == 0) {
- badmsg ("remove modifier keysym list (empty)", NULL);
+ badmsg0 ("remove modifier keysym list (empty)");
return;
}
@@ -746,9 +745,8 @@ static void do_remove (line, len)
/*
* make_remove - stick a single remove onto the queue
*/
-static void make_remove (modifier, keycode)
- int modifier;
- KeyCode keycode;
+static void
+make_remove(int modifier, KeyCode keycode)
{
union op *uop;
struct op_removemodifier *oprm;
@@ -786,9 +784,8 @@ static void make_remove (modifier, keycode)
* ^
*/
-static void do_clear (line, len)
- char *line;
- int len;
+static void
+do_clear(char *line, int len)
{
int n;
int modifier;
@@ -796,7 +793,7 @@ static void do_clear (line, len)
struct op_clearmodifier *opcm;
if (len < 4 || !line || *line == '\0') { /* Lock minimum */
- badmsg ("clear modifier input line", NULL);
+ badmsg0 ("clear modifier input line");
return;
}
@@ -815,7 +812,7 @@ static void do_clear (line, len)
uop = AllocStruct (union op);
if (!uop) {
- badmsg ("attempt to allocate %d byte clearmodifier opcode",
+ badmsg ("attempt to allocate %ld byte clearmodifier opcode",
(long) sizeof (struct op_clearmodifier));
return;
}
@@ -827,9 +824,8 @@ static void do_clear (line, len)
add_to_work_queue (uop);
}
-static int strncmp_nocase (a, b, n)
- char *a, *b;
- int n;
+static int
+strncmp_nocase(char *a, char *b, int n)
{
int i;
int a1, b1;
@@ -855,9 +851,8 @@ static int strncmp_nocase (a, b, n)
* ^
*/
-static void do_pointer (line, len)
- char *line;
- int len;
+static void
+do_pointer(char *line, int len)
{
int n;
int i;
@@ -870,7 +865,7 @@ static void do_pointer (line, len)
Bool ok;
if (len < 2 || !line || *line == '\0') { /* =1 minimum */
- badmsg ("buttons input line", NULL);
+ badmsg0 ("buttons input line");
return;
}
@@ -880,7 +875,7 @@ static void do_pointer (line, len)
line += n, len -= n;
if (line[0] != '=') {
- badmsg ("buttons pointer code list, missing equal sign", NULL);
+ badmsg0 ("buttons pointer code list, missing equal sign");
return;
}
@@ -946,11 +941,8 @@ static void do_pointer (line, len)
* and adding it to the list.
*/
-static int get_keysym_list (line, len, np, kslistp)
- char *line;
- int len;
- int *np;
- KeySym **kslistp;
+static int
+get_keysym_list(char *line, int len, int *np, KeySym **kslistp)
{
int havesofar, maxcanhave;
KeySym *keysymlist;
@@ -980,7 +972,7 @@ static int get_keysym_list (line, len, np, kslistp)
n = skip_chars (line, len);
if (n < 0) {
- badmsg ("keysym name list", NULL);
+ badmsg0 ("keysym name list");
return (-1);
}
@@ -1027,10 +1019,8 @@ static int get_keysym_list (line, len, np, kslistp)
* 8 by map->max_keypermod keycodes.
*/
-static void check_special_keys (keycode, n, kslist)
- KeyCode keycode;
- int n;
- KeySym *kslist;
+static void
+check_special_keys(KeyCode keycode, int n, KeySym *kslist)
{
int i; /* iterator variable */
KeyCode *kcp; /* keycode pointer */
@@ -1087,7 +1077,8 @@ static void check_special_keys (keycode, n, kslist)
* print_work_queue - disassemble the work queue and print it on stdout
*/
-void print_work_queue ()
+void
+print_work_queue(void)
{
union op *op;
@@ -1098,8 +1089,8 @@ void print_work_queue ()
return;
}
-void print_opcode (op)
- union op *op;
+static void
+print_opcode(union op *op)
{
int i;
@@ -1155,11 +1146,15 @@ void print_opcode (op)
* execute_work_queue - do the real meat and potatoes now that we know what
* we need to do and that all of the input is correct.
*/
+static int exec_keycode ( struct op_keycode *opk );
+static int exec_add ( struct op_addmodifier *opam );
+static int exec_remove ( struct op_removemodifier *oprm );
+static int exec_clear ( struct op_clearmodifier *opcm );
+static int exec_pointer ( struct op_pointer *opp );
-static int exec_keycode(), exec_add(), exec_remove(), exec_clear();
-static int exec_pointer();
-int execute_work_queue ()
+int
+execute_work_queue (void)
{
union op *op;
int errors;
@@ -1200,26 +1195,26 @@ int execute_work_queue ()
dosync = 0;
switch (op->generic.type) {
case doKeycode:
- if (exec_keycode (op) < 0) errors++;
+ if (exec_keycode (&op->keycode) < 0) errors++;
if (op->keycode.target_keycode)
dosync = 1;
else
dosync = -1;
break;
case doAddModifier:
- if (exec_add (op) < 0) errors++;
+ if (exec_add (&op->addmodifier) < 0) errors++;
else update_map = True;
break;
case doRemoveModifier:
- if (exec_remove (op) < 0) errors++;
+ if (exec_remove (&op->removemodifier) < 0) errors++;
else update_map = True;
break;
case doClearModifier:
- if (exec_clear (op) < 0) errors++;
+ if (exec_clear (&op->clearmodifier) < 0) errors++;
else update_map = True;
break;
case doPointer:
- if (exec_pointer (op) < 0) errors++;
+ if (exec_pointer (&op->pointer) < 0) errors++;
break;
default:
fprintf (stderr, "%s: unknown opcode %d\n",
@@ -1235,8 +1230,8 @@ int execute_work_queue ()
return (errors > 0 ? -1 : 0);
}
-static int exec_keycode (opk)
- struct op_keycode *opk;
+static int
+exec_keycode(struct op_keycode *opk)
{
if (!opk->target_keycode) {
int i, j;
@@ -1277,8 +1272,8 @@ static int exec_keycode (opk)
return (0);
}
-static int exec_add (opam)
- struct op_addmodifier *opam;
+static int
+exec_add(struct op_addmodifier *opam)
{
int i;
int status;
@@ -1299,8 +1294,8 @@ static int exec_add (opam)
return (status);
}
-static int exec_remove (oprm)
- struct op_removemodifier *oprm;
+static int
+exec_remove(struct op_removemodifier *oprm)
{
int i;
int status;
@@ -1313,33 +1308,35 @@ static int exec_remove (oprm)
return (status);
}
-static int exec_clear (opcm)
- struct op_clearmodifier *opcm;
+static int
+exec_clear(struct op_clearmodifier *opcm)
{
return (ClearModifier (&map, opcm->modifier));
}
-static int exec_pointer (opp)
- struct op_pointer *opp;
+static int
+exec_pointer(struct op_pointer *opp)
{
return (SetPointerMap (opp->button_codes, opp->count));
}
-void print_modifier_map ()
+void
+print_modifier_map(void)
{
PrintModifierMapping (map, stdout);
return;
}
-void print_key_table (exprs)
- Bool exprs;
+void
+print_key_table(Bool exprs)
{
PrintKeyTable (exprs, stdout);
return;
}
-void print_pointer_map ()
+void
+print_pointer_map(void)
{
PrintPointerMap (stdout);
return;