diff options
author | Kaleb Keithley <kaleb@freedesktop.org> | 2003-11-14 15:54:54 +0000 |
---|---|---|
committer | Kaleb Keithley <kaleb@freedesktop.org> | 2003-11-14 15:54:54 +0000 |
commit | e29f1f1ed2128d7382a72ccb1684045fe4bc8183 (patch) | |
tree | 046f47267d55924f194f17aaaf2f45ac19eb4d35 /wq.h |
R6.6 is the Xorg base-lineXORG-MAINXORG-STABLE
Diffstat (limited to 'wq.h')
-rw-r--r-- | wq.h | 143 |
1 files changed, 143 insertions, 0 deletions
@@ -0,0 +1,143 @@ +/* $Xorg: wq.h,v 1.4 2001/02/09 02:05:56 xorgcvs Exp $ */ +/* + +Copyright 1988, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. + +*/ + +/* + * Input is parsed and a work queue is built that is executed later. This + * allows us to swap keys as well as ensure that we don't mess up the keyboard + * by doing a partial rebind. + */ + +enum opcode { doKeycode, doAddModifier, doRemoveModifier, doClearModifier, + doPointer }; + +struct op_generic { + enum opcode type; /* oneof enum opcode */ + union op *next; /* next element in list or NULL */ +}; + + +/* + * keycode KEYCODE = KEYSYM + * keysym OLDKEYSYM = NEWKEYSYM + * + * want to eval the OLDKEYSYM before executing the work list so that it isn't + * effected by any assignments. + */ + +struct op_keycode { + enum opcode type; /* doKeycode */ + union op *next; /* next element in list or NULL */ + KeyCode target_keycode; /* key to which we are assigning */ + int count; /* number of new keysyms */ + KeySym *keysyms; /* new values to insert */ +}; + + +/* + * add MODIFIER = KEYSYM ... + */ + +struct op_addmodifier { + enum opcode type; /* doAddModifier */ + union op *next; /* next element in list or NULL */ + int modifier; /* index into modifier list */ + int count; /* number of keysyms */ + KeySym *keysyms; /* new values to insert */ +}; + + +/* + * remove MODIFIER = OLDKEYSYM ... + * + * want to eval the OLDKEYSYM before executing the work list so that it isn't + * effected by any assignments. + */ + +struct op_removemodifier { + enum opcode type; /* doRemoveModifier */ + union op *next; /* next element in list or NULL */ + int modifier; /* index into modifier list */ + int count; /* number of keysyms */ + KeyCode *keycodes; /* old values to remove */ +}; + + +/* + * clear MODIFIER + */ + +struct op_clearmodifier { + enum opcode type; /* doClearModifier */ + union op *next; /* next element in list or NULL */ + int modifier; /* index into modifier list */ +}; + +/* + * pointer = NUMBER ... + * + * set pointer map to the positive numbers given on the right hand side + */ + +#define MAXBUTTONCODES 256 /* there are eight bits of buttons */ + +struct op_pointer { + enum opcode type; /* doPointer */ + union op *next; /* next element in list or NULL */ + int count; /* number of new button codes */ + unsigned char button_codes[MAXBUTTONCODES]; +}; + + +/* + * all together now + */ +union op { + struct op_generic generic; + struct op_keycode keycode; + struct op_addmodifier addmodifier; + struct op_removemodifier removemodifier; + struct op_clearmodifier clearmodifier; + struct op_pointer pointer; +}; + +extern struct wq { + union op *head; + union op *tail; +} work_queue; + + +extern struct modtab { + char *name; + int length; + int value; +} modifier_table[]; + +#define AllocStruct(s) ((s *) malloc (sizeof (s))) + +#define MAXKEYSYMNAMESIZE 80 /* absurdly large */ |