wq.h revision 1a30de1f
11a30de1fSmrg/* $Xorg: wq.h,v 1.4 2001/02/09 02:05:56 xorgcvs Exp $ */ 21a30de1fSmrg/* 31a30de1fSmrg 41a30de1fSmrgCopyright 1988, 1998 The Open Group 51a30de1fSmrg 61a30de1fSmrgPermission to use, copy, modify, distribute, and sell this software and its 71a30de1fSmrgdocumentation for any purpose is hereby granted without fee, provided that 81a30de1fSmrgthe above copyright notice appear in all copies and that both that 91a30de1fSmrgcopyright notice and this permission notice appear in supporting 101a30de1fSmrgdocumentation. 111a30de1fSmrg 121a30de1fSmrgThe above copyright notice and this permission notice shall be included 131a30de1fSmrgin all copies or substantial portions of the Software. 141a30de1fSmrg 151a30de1fSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 161a30de1fSmrgOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 171a30de1fSmrgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 181a30de1fSmrgIN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR 191a30de1fSmrgOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 201a30de1fSmrgARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 211a30de1fSmrgOTHER DEALINGS IN THE SOFTWARE. 221a30de1fSmrg 231a30de1fSmrgExcept as contained in this notice, the name of The Open Group shall 241a30de1fSmrgnot be used in advertising or otherwise to promote the sale, use or 251a30de1fSmrgother dealings in this Software without prior written authorization 261a30de1fSmrgfrom The Open Group. 271a30de1fSmrg 281a30de1fSmrg*/ 291a30de1fSmrg/* $XFree86: xc/programs/xmodmap/wq.h,v 1.4 2001/01/17 23:46:21 dawes Exp $ */ 301a30de1fSmrg 311a30de1fSmrg#ifndef _WQ_H 321a30de1fSmrg#define _WQ_H 331a30de1fSmrg 341a30de1fSmrg/* 351a30de1fSmrg * Input is parsed and a work queue is built that is executed later. This 361a30de1fSmrg * allows us to swap keys as well as ensure that we don't mess up the keyboard 371a30de1fSmrg * by doing a partial rebind. 381a30de1fSmrg */ 391a30de1fSmrg 401a30de1fSmrgenum opcode { doKeycode, doAddModifier, doRemoveModifier, doClearModifier, 411a30de1fSmrg doPointer }; 421a30de1fSmrg 431a30de1fSmrgstruct op_generic { 441a30de1fSmrg enum opcode type; /* oneof enum opcode */ 451a30de1fSmrg union op *next; /* next element in list or NULL */ 461a30de1fSmrg}; 471a30de1fSmrg 481a30de1fSmrg 491a30de1fSmrg/* 501a30de1fSmrg * keycode KEYCODE = KEYSYM 511a30de1fSmrg * keysym OLDKEYSYM = NEWKEYSYM 521a30de1fSmrg * 531a30de1fSmrg * want to eval the OLDKEYSYM before executing the work list so that it isn't 541a30de1fSmrg * effected by any assignments. 551a30de1fSmrg */ 561a30de1fSmrg 571a30de1fSmrgstruct op_keycode { 581a30de1fSmrg enum opcode type; /* doKeycode */ 591a30de1fSmrg union op *next; /* next element in list or NULL */ 601a30de1fSmrg KeyCode target_keycode; /* key to which we are assigning */ 611a30de1fSmrg int count; /* number of new keysyms */ 621a30de1fSmrg KeySym *keysyms; /* new values to insert */ 631a30de1fSmrg}; 641a30de1fSmrg 651a30de1fSmrg 661a30de1fSmrg/* 671a30de1fSmrg * add MODIFIER = KEYSYM ... 681a30de1fSmrg */ 691a30de1fSmrg 701a30de1fSmrgstruct op_addmodifier { 711a30de1fSmrg enum opcode type; /* doAddModifier */ 721a30de1fSmrg union op *next; /* next element in list or NULL */ 731a30de1fSmrg int modifier; /* index into modifier list */ 741a30de1fSmrg int count; /* number of keysyms */ 751a30de1fSmrg KeySym *keysyms; /* new values to insert */ 761a30de1fSmrg}; 771a30de1fSmrg 781a30de1fSmrg 791a30de1fSmrg/* 801a30de1fSmrg * remove MODIFIER = OLDKEYSYM ... 811a30de1fSmrg * 821a30de1fSmrg * want to eval the OLDKEYSYM before executing the work list so that it isn't 831a30de1fSmrg * effected by any assignments. 841a30de1fSmrg */ 851a30de1fSmrg 861a30de1fSmrgstruct op_removemodifier { 871a30de1fSmrg enum opcode type; /* doRemoveModifier */ 881a30de1fSmrg union op *next; /* next element in list or NULL */ 891a30de1fSmrg int modifier; /* index into modifier list */ 901a30de1fSmrg int count; /* number of keysyms */ 911a30de1fSmrg KeyCode *keycodes; /* old values to remove */ 921a30de1fSmrg}; 931a30de1fSmrg 941a30de1fSmrg 951a30de1fSmrg/* 961a30de1fSmrg * clear MODIFIER 971a30de1fSmrg */ 981a30de1fSmrg 991a30de1fSmrgstruct op_clearmodifier { 1001a30de1fSmrg enum opcode type; /* doClearModifier */ 1011a30de1fSmrg union op *next; /* next element in list or NULL */ 1021a30de1fSmrg int modifier; /* index into modifier list */ 1031a30de1fSmrg}; 1041a30de1fSmrg 1051a30de1fSmrg/* 1061a30de1fSmrg * pointer = NUMBER ... 1071a30de1fSmrg * 1081a30de1fSmrg * set pointer map to the positive numbers given on the right hand side 1091a30de1fSmrg */ 1101a30de1fSmrg 1111a30de1fSmrg#define MAXBUTTONCODES 256 /* there are eight bits of buttons */ 1121a30de1fSmrg 1131a30de1fSmrgstruct op_pointer { 1141a30de1fSmrg enum opcode type; /* doPointer */ 1151a30de1fSmrg union op *next; /* next element in list or NULL */ 1161a30de1fSmrg int count; /* number of new button codes */ 1171a30de1fSmrg unsigned char button_codes[MAXBUTTONCODES]; 1181a30de1fSmrg}; 1191a30de1fSmrg 1201a30de1fSmrg 1211a30de1fSmrg/* 1221a30de1fSmrg * all together now 1231a30de1fSmrg */ 1241a30de1fSmrgunion op { 1251a30de1fSmrg struct op_generic generic; 1261a30de1fSmrg struct op_keycode keycode; 1271a30de1fSmrg struct op_addmodifier addmodifier; 1281a30de1fSmrg struct op_removemodifier removemodifier; 1291a30de1fSmrg struct op_clearmodifier clearmodifier; 1301a30de1fSmrg struct op_pointer pointer; 1311a30de1fSmrg}; 1321a30de1fSmrg 1331a30de1fSmrgextern struct wq { 1341a30de1fSmrg union op *head; 1351a30de1fSmrg union op *tail; 1361a30de1fSmrg} work_queue; 1371a30de1fSmrg 1381a30de1fSmrg 1391a30de1fSmrgextern struct modtab { 1401a30de1fSmrg char *name; 1411a30de1fSmrg int length; 1421a30de1fSmrg int value; 1431a30de1fSmrg} modifier_table[]; 1441a30de1fSmrg 1451a30de1fSmrg#define AllocStruct(s) ((s *) malloc (sizeof (s))) 1461a30de1fSmrg 1471a30de1fSmrg#define MAXKEYSYMNAMESIZE 80 /* absurdly large */ 1481a30de1fSmrg 1491a30de1fSmrg#endif 150