summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--action.c2194
-rw-r--r--action.h45
-rw-r--r--alias.c384
-rw-r--r--alias.h49
-rw-r--r--compat.c1314
-rw-r--r--expr.c1750
-rw-r--r--expr.h277
-rw-r--r--geometry.c5905
-rw-r--r--indicators.c846
-rw-r--r--indicators.h83
-rw-r--r--keycodes.c1276
-rw-r--r--keycodes.h14
-rw-r--r--keymap.c238
-rw-r--r--keytypes.c1873
-rw-r--r--listing.c502
-rw-r--r--misc.c758
-rw-r--r--misc.h169
-rw-r--r--parseutils.c1065
-rw-r--r--parseutils.h328
-rw-r--r--symbols.c3462
-rw-r--r--utils.c333
-rw-r--r--utils.h218
-rw-r--r--vmod.c283
-rw-r--r--vmod.h83
-rw-r--r--xkbcomp.c1796
-rw-r--r--xkbcomp.h427
-rw-r--r--xkbpath.c410
-rw-r--r--xkbpath.h64
-rw-r--r--xkbscan.c966
29 files changed, 14648 insertions, 12464 deletions
diff --git a/action.c b/action.c
index 012d78e..3b82e64 100644
--- a/action.c
+++ b/action.c
@@ -34,148 +34,262 @@
#include "action.h"
#include "misc.h"
-static Bool actionsInitialized;
-static ExprDef constTrue;
-static ExprDef constFalse;
+static Bool actionsInitialized;
+static ExprDef constTrue;
+static ExprDef constFalse;
/***====================================================================***/
static Bool
-stringToAction(char *str,unsigned *type_rtrn)
+stringToAction(char *str, unsigned *type_rtrn)
{
- if (str==NULL)
- return False;
-
- if (uStrCaseCmp(str,"noaction")==0) *type_rtrn= XkbSA_NoAction;
- else if (uStrCaseCmp(str,"setmods")==0) *type_rtrn= XkbSA_SetMods;
- else if (uStrCaseCmp(str,"latchmods")==0) *type_rtrn= XkbSA_LatchMods;
- else if (uStrCaseCmp(str,"lockmods")==0) *type_rtrn= XkbSA_LockMods;
- else if (uStrCaseCmp(str,"setgroup")==0) *type_rtrn= XkbSA_SetGroup;
- else if (uStrCaseCmp(str,"latchgroup")==0) *type_rtrn= XkbSA_LatchGroup;
- else if (uStrCaseCmp(str,"lockgroup")==0) *type_rtrn= XkbSA_LockGroup;
- else if (uStrCaseCmp(str,"moveptr")==0) *type_rtrn= XkbSA_MovePtr;
- else if (uStrCaseCmp(str,"movepointer")==0) *type_rtrn= XkbSA_MovePtr;
- else if (uStrCaseCmp(str,"ptrbtn")==0) *type_rtrn= XkbSA_PtrBtn;
- else if (uStrCaseCmp(str,"pointerbutton")==0)
- *type_rtrn= XkbSA_PtrBtn;
- else if (uStrCaseCmp(str,"lockptrbtn")==0) *type_rtrn= XkbSA_LockPtrBtn;
- else if (uStrCaseCmp(str,"lockpointerbutton")==0)
- *type_rtrn= XkbSA_LockPtrBtn;
- else if (uStrCaseCmp(str,"lockptrbutton")==0)
- *type_rtrn= XkbSA_LockPtrBtn;
- else if (uStrCaseCmp(str,"lockpointerbtn")==0)
- *type_rtrn= XkbSA_LockPtrBtn;
- else if (uStrCaseCmp(str,"setptrdflt")==0) *type_rtrn= XkbSA_SetPtrDflt;
- else if (uStrCaseCmp(str,"setpointerdefault")==0)
- *type_rtrn= XkbSA_SetPtrDflt;
- else if (uStrCaseCmp(str,"isolock")==0) *type_rtrn= XkbSA_ISOLock;
- else if (uStrCaseCmp(str,"terminate")==0) *type_rtrn= XkbSA_Terminate;
- else if (uStrCaseCmp(str,"terminateserver")==0)
- *type_rtrn= XkbSA_Terminate;
- else if (uStrCaseCmp(str,"switchscreen")==0)*type_rtrn= XkbSA_SwitchScreen;
- else if (uStrCaseCmp(str,"setcontrols")==0) *type_rtrn= XkbSA_SetControls;
- else if (uStrCaseCmp(str,"lockcontrols")==0)*type_rtrn= XkbSA_LockControls;
- else if (uStrCaseCmp(str,"actionmessage")==0)*type_rtrn= XkbSA_ActionMessage;
- else if (uStrCaseCmp(str,"messageaction")==0)*type_rtrn= XkbSA_ActionMessage;
- else if (uStrCaseCmp(str,"message")==0) *type_rtrn= XkbSA_ActionMessage;
- else if (uStrCaseCmp(str,"redirect")==0) *type_rtrn= XkbSA_RedirectKey;
- else if (uStrCaseCmp(str,"redirectkey")==0) *type_rtrn= XkbSA_RedirectKey;
- else if (uStrCaseCmp(str,"devbtn")==0) *type_rtrn= XkbSA_DeviceBtn;
- else if (uStrCaseCmp(str,"devicebtn")==0) *type_rtrn= XkbSA_DeviceBtn;
- else if (uStrCaseCmp(str,"devbutton")==0) *type_rtrn= XkbSA_DeviceBtn;
- else if (uStrCaseCmp(str,"devicebutton")==0)*type_rtrn= XkbSA_DeviceBtn;
- else if (uStrCaseCmp(str,"lockdevbtn")==0) *type_rtrn= XkbSA_DeviceBtn;
- else if (uStrCaseCmp(str,"lockdevicebtn")==0)
- *type_rtrn= XkbSA_LockDeviceBtn;
- else if (uStrCaseCmp(str,"lockdevbutton")==0)
- *type_rtrn= XkbSA_LockDeviceBtn;
- else if (uStrCaseCmp(str,"lockdevicebutton")==0)
- *type_rtrn= XkbSA_LockDeviceBtn;
- else if (uStrCaseCmp(str,"devval")==0) *type_rtrn=XkbSA_DeviceValuator;
- else if (uStrCaseCmp(str,"deviceval")==0) *type_rtrn=XkbSA_DeviceValuator;
- else if (uStrCaseCmp(str,"devvaluator")==0) *type_rtrn=XkbSA_DeviceValuator;
- else if (uStrCaseCmp(str,"devicevaluator")==0)
- *type_rtrn=XkbSA_DeviceValuator;
- else if (uStrCaseCmp(str,"private")==0) *type_rtrn= PrivateAction;
- else return False;
+ if (str == NULL)
+ return False;
+
+ if (uStrCaseCmp(str, "noaction") == 0)
+ *type_rtrn = XkbSA_NoAction;
+ else if (uStrCaseCmp(str, "setmods") == 0)
+ *type_rtrn = XkbSA_SetMods;
+ else if (uStrCaseCmp(str, "latchmods") == 0)
+ *type_rtrn = XkbSA_LatchMods;
+ else if (uStrCaseCmp(str, "lockmods") == 0)
+ *type_rtrn = XkbSA_LockMods;
+ else if (uStrCaseCmp(str, "setgroup") == 0)
+ *type_rtrn = XkbSA_SetGroup;
+ else if (uStrCaseCmp(str, "latchgroup") == 0)
+ *type_rtrn = XkbSA_LatchGroup;
+ else if (uStrCaseCmp(str, "lockgroup") == 0)
+ *type_rtrn = XkbSA_LockGroup;
+ else if (uStrCaseCmp(str, "moveptr") == 0)
+ *type_rtrn = XkbSA_MovePtr;
+ else if (uStrCaseCmp(str, "movepointer") == 0)
+ *type_rtrn = XkbSA_MovePtr;
+ else if (uStrCaseCmp(str, "ptrbtn") == 0)
+ *type_rtrn = XkbSA_PtrBtn;
+ else if (uStrCaseCmp(str, "pointerbutton") == 0)
+ *type_rtrn = XkbSA_PtrBtn;
+ else if (uStrCaseCmp(str, "lockptrbtn") == 0)
+ *type_rtrn = XkbSA_LockPtrBtn;
+ else if (uStrCaseCmp(str, "lockpointerbutton") == 0)
+ *type_rtrn = XkbSA_LockPtrBtn;
+ else if (uStrCaseCmp(str, "lockptrbutton") == 0)
+ *type_rtrn = XkbSA_LockPtrBtn;
+ else if (uStrCaseCmp(str, "lockpointerbtn") == 0)
+ *type_rtrn = XkbSA_LockPtrBtn;
+ else if (uStrCaseCmp(str, "setptrdflt") == 0)
+ *type_rtrn = XkbSA_SetPtrDflt;
+ else if (uStrCaseCmp(str, "setpointerdefault") == 0)
+ *type_rtrn = XkbSA_SetPtrDflt;
+ else if (uStrCaseCmp(str, "isolock") == 0)
+ *type_rtrn = XkbSA_ISOLock;
+ else if (uStrCaseCmp(str, "terminate") == 0)
+ *type_rtrn = XkbSA_Terminate;
+ else if (uStrCaseCmp(str, "terminateserver") == 0)
+ *type_rtrn = XkbSA_Terminate;
+ else if (uStrCaseCmp(str, "switchscreen") == 0)
+ *type_rtrn = XkbSA_SwitchScreen;
+ else if (uStrCaseCmp(str, "setcontrols") == 0)
+ *type_rtrn = XkbSA_SetControls;
+ else if (uStrCaseCmp(str, "lockcontrols") == 0)
+ *type_rtrn = XkbSA_LockControls;
+ else if (uStrCaseCmp(str, "actionmessage") == 0)
+ *type_rtrn = XkbSA_ActionMessage;
+ else if (uStrCaseCmp(str, "messageaction") == 0)
+ *type_rtrn = XkbSA_ActionMessage;
+ else if (uStrCaseCmp(str, "message") == 0)
+ *type_rtrn = XkbSA_ActionMessage;
+ else if (uStrCaseCmp(str, "redirect") == 0)
+ *type_rtrn = XkbSA_RedirectKey;
+ else if (uStrCaseCmp(str, "redirectkey") == 0)
+ *type_rtrn = XkbSA_RedirectKey;
+ else if (uStrCaseCmp(str, "devbtn") == 0)
+ *type_rtrn = XkbSA_DeviceBtn;
+ else if (uStrCaseCmp(str, "devicebtn") == 0)
+ *type_rtrn = XkbSA_DeviceBtn;
+ else if (uStrCaseCmp(str, "devbutton") == 0)
+ *type_rtrn = XkbSA_DeviceBtn;
+ else if (uStrCaseCmp(str, "devicebutton") == 0)
+ *type_rtrn = XkbSA_DeviceBtn;
+ else if (uStrCaseCmp(str, "lockdevbtn") == 0)
+ *type_rtrn = XkbSA_DeviceBtn;
+ else if (uStrCaseCmp(str, "lockdevicebtn") == 0)
+ *type_rtrn = XkbSA_LockDeviceBtn;
+ else if (uStrCaseCmp(str, "lockdevbutton") == 0)
+ *type_rtrn = XkbSA_LockDeviceBtn;
+ else if (uStrCaseCmp(str, "lockdevicebutton") == 0)
+ *type_rtrn = XkbSA_LockDeviceBtn;
+ else if (uStrCaseCmp(str, "devval") == 0)
+ *type_rtrn = XkbSA_DeviceValuator;
+ else if (uStrCaseCmp(str, "deviceval") == 0)
+ *type_rtrn = XkbSA_DeviceValuator;
+ else if (uStrCaseCmp(str, "devvaluator") == 0)
+ *type_rtrn = XkbSA_DeviceValuator;
+ else if (uStrCaseCmp(str, "devicevaluator") == 0)
+ *type_rtrn = XkbSA_DeviceValuator;
+ else if (uStrCaseCmp(str, "private") == 0)
+ *type_rtrn = PrivateAction;
+ else
+ return False;
return True;
}
static Bool
-stringToField(char *str,unsigned *field_rtrn)
+stringToField(char *str, unsigned *field_rtrn)
{
- if (str==NULL)
- return False;
-
- if (uStrCaseCmp(str,"clearlocks")==0) *field_rtrn= F_ClearLocks;
- else if (uStrCaseCmp(str,"latchtolock")==0) *field_rtrn= F_LatchToLock;
- else if (uStrCaseCmp(str,"genkeyevent")==0) *field_rtrn= F_GenKeyEvent;
- else if (uStrCaseCmp(str,"generatekeyevent")==0)
- *field_rtrn= F_GenKeyEvent;
- else if (uStrCaseCmp(str,"report")==0) *field_rtrn= F_Report;
- else if (uStrCaseCmp(str,"default")==0) *field_rtrn= F_Default;
- else if (uStrCaseCmp(str,"affect")==0) *field_rtrn= F_Affect;
- else if (uStrCaseCmp(str,"increment")==0) *field_rtrn= F_Increment;
- else if (uStrCaseCmp(str,"mods")==0) *field_rtrn= F_Modifiers;
- else if (uStrCaseCmp(str,"modifiers")==0) *field_rtrn= F_Modifiers;
- else if (uStrCaseCmp(str,"group")==0) *field_rtrn= F_Group;
- else if (uStrCaseCmp(str,"x")==0) *field_rtrn= F_X;
- else if (uStrCaseCmp(str,"y")==0) *field_rtrn= F_Y;
- else if (uStrCaseCmp(str,"accel")==0) *field_rtrn= F_Accel;
- else if (uStrCaseCmp(str,"accelerate")==0) *field_rtrn= F_Accel;
- else if (uStrCaseCmp(str,"repeat")==0) *field_rtrn= F_Accel;
- else if (uStrCaseCmp(str,"button")==0) *field_rtrn= F_Button;
- else if (uStrCaseCmp(str,"value")==0) *field_rtrn= F_Value;
- else if (uStrCaseCmp(str,"controls")==0) *field_rtrn= F_Controls;
- else if (uStrCaseCmp(str,"ctrls")==0) *field_rtrn= F_Controls;
- else if (uStrCaseCmp(str,"type")==0) *field_rtrn= F_Type;
- else if (uStrCaseCmp(str,"count")==0) *field_rtrn= F_Count;
- else if (uStrCaseCmp(str,"screen")==0) *field_rtrn= F_Screen;
- else if (uStrCaseCmp(str,"same")==0) *field_rtrn= F_Same;
- else if (uStrCaseCmp(str,"sameserver")==0) *field_rtrn= F_Same;
- else if (uStrCaseCmp(str,"data")==0) *field_rtrn= F_Data;
- else if (uStrCaseCmp(str,"device")==0) *field_rtrn= F_Device;
- else if (uStrCaseCmp(str,"dev")==0) *field_rtrn= F_Device;
- else if (uStrCaseCmp(str,"key")==0) *field_rtrn= F_Keycode;
- else if (uStrCaseCmp(str,"keycode")==0) *field_rtrn= F_Keycode;
- else if (uStrCaseCmp(str,"kc")==0) *field_rtrn= F_Keycode;
- else if (uStrCaseCmp(str,"clearmods")==0) *field_rtrn= F_ModsToClear;
- else if (uStrCaseCmp(str,"clearmodifiers")==0) *field_rtrn= F_ModsToClear;
- else return False;
+ if (str == NULL)
+ return False;
+
+ if (uStrCaseCmp(str, "clearlocks") == 0)
+ *field_rtrn = F_ClearLocks;
+ else if (uStrCaseCmp(str, "latchtolock") == 0)
+ *field_rtrn = F_LatchToLock;
+ else if (uStrCaseCmp(str, "genkeyevent") == 0)
+ *field_rtrn = F_GenKeyEvent;
+ else if (uStrCaseCmp(str, "generatekeyevent") == 0)
+ *field_rtrn = F_GenKeyEvent;
+ else if (uStrCaseCmp(str, "report") == 0)
+ *field_rtrn = F_Report;
+ else if (uStrCaseCmp(str, "default") == 0)
+ *field_rtrn = F_Default;
+ else if (uStrCaseCmp(str, "affect") == 0)
+ *field_rtrn = F_Affect;
+ else if (uStrCaseCmp(str, "increment") == 0)
+ *field_rtrn = F_Increment;
+ else if (uStrCaseCmp(str, "mods") == 0)
+ *field_rtrn = F_Modifiers;
+ else if (uStrCaseCmp(str, "modifiers") == 0)
+ *field_rtrn = F_Modifiers;
+ else if (uStrCaseCmp(str, "group") == 0)
+ *field_rtrn = F_Group;
+ else if (uStrCaseCmp(str, "x") == 0)
+ *field_rtrn = F_X;
+ else if (uStrCaseCmp(str, "y") == 0)
+ *field_rtrn = F_Y;
+ else if (uStrCaseCmp(str, "accel") == 0)
+ *field_rtrn = F_Accel;
+ else if (uStrCaseCmp(str, "accelerate") == 0)
+ *field_rtrn = F_Accel;
+ else if (uStrCaseCmp(str, "repeat") == 0)
+ *field_rtrn = F_Accel;
+ else if (uStrCaseCmp(str, "button") == 0)
+ *field_rtrn = F_Button;
+ else if (uStrCaseCmp(str, "value") == 0)
+ *field_rtrn = F_Value;
+ else if (uStrCaseCmp(str, "controls") == 0)
+ *field_rtrn = F_Controls;
+ else if (uStrCaseCmp(str, "ctrls") == 0)
+ *field_rtrn = F_Controls;
+ else if (uStrCaseCmp(str, "type") == 0)
+ *field_rtrn = F_Type;
+ else if (uStrCaseCmp(str, "count") == 0)
+ *field_rtrn = F_Count;
+ else if (uStrCaseCmp(str, "screen") == 0)
+ *field_rtrn = F_Screen;
+ else if (uStrCaseCmp(str, "same") == 0)
+ *field_rtrn = F_Same;
+ else if (uStrCaseCmp(str, "sameserver") == 0)
+ *field_rtrn = F_Same;
+ else if (uStrCaseCmp(str, "data") == 0)
+ *field_rtrn = F_Data;
+ else if (uStrCaseCmp(str, "device") == 0)
+ *field_rtrn = F_Device;
+ else if (uStrCaseCmp(str, "dev") == 0)
+ *field_rtrn = F_Device;
+ else if (uStrCaseCmp(str, "key") == 0)
+ *field_rtrn = F_Keycode;
+ else if (uStrCaseCmp(str, "keycode") == 0)
+ *field_rtrn = F_Keycode;
+ else if (uStrCaseCmp(str, "kc") == 0)
+ *field_rtrn = F_Keycode;
+ else if (uStrCaseCmp(str, "clearmods") == 0)
+ *field_rtrn = F_ModsToClear;
+ else if (uStrCaseCmp(str, "clearmodifiers") == 0)
+ *field_rtrn = F_ModsToClear;
+ else
+ return False;
return True;
}
static char *
fieldText(unsigned field)
{
-static char buf[32];
-
- switch (field) {
- case F_ClearLocks: strcpy(buf,"clearLocks"); break;
- case F_LatchToLock: strcpy(buf,"latchToLock"); break;
- case F_GenKeyEvent: strcpy(buf,"genKeyEvent"); break;
- case F_Report: strcpy(buf,"report"); break;
- case F_Default: strcpy(buf,"default"); break;
- case F_Affect: strcpy(buf,"affect"); break;
- case F_Increment: strcpy(buf,"increment"); break;
- case F_Modifiers: strcpy(buf,"modifiers"); break;
- case F_Group: strcpy(buf,"group"); break;
- case F_X: strcpy(buf,"x"); break;
- case F_Y: strcpy(buf,"y"); break;
- case F_Accel: strcpy(buf,"accel"); break;
- case F_Button: strcpy(buf,"button"); break;
- case F_Value: strcpy(buf,"value"); break;
- case F_Controls: strcpy(buf,"controls"); break;
- case F_Type: strcpy(buf,"type"); break;
- case F_Count: strcpy(buf,"count"); break;
- case F_Screen: strcpy(buf,"screen"); break;
- case F_Same: strcpy(buf,"sameServer"); break;
- case F_Data: strcpy(buf,"data"); break;
- case F_Device: strcpy(buf,"device"); break;
- case F_Keycode: strcpy(buf,"keycode"); break;
- case F_ModsToClear: strcpy(buf,"clearmods"); break;
- default: strcpy(buf,"unknown"); break;
+ static char buf[32];
+
+ switch (field)
+ {
+ case F_ClearLocks:
+ strcpy(buf, "clearLocks");
+ break;
+ case F_LatchToLock:
+ strcpy(buf, "latchToLock");
+ break;
+ case F_GenKeyEvent:
+ strcpy(buf, "genKeyEvent");
+ break;
+ case F_Report:
+ strcpy(buf, "report");
+ break;
+ case F_Default:
+ strcpy(buf, "default");
+ break;
+ case F_Affect:
+ strcpy(buf, "affect");
+ break;
+ case F_Increment:
+ strcpy(buf, "increment");
+ break;
+ case F_Modifiers:
+ strcpy(buf, "modifiers");
+ break;
+ case F_Group:
+ strcpy(buf, "group");
+ break;
+ case F_X:
+ strcpy(buf, "x");
+ break;
+ case F_Y:
+ strcpy(buf, "y");
+ break;
+ case F_Accel:
+ strcpy(buf, "accel");
+ break;
+ case F_Button:
+ strcpy(buf, "button");
+ break;
+ case F_Value:
+ strcpy(buf, "value");
+ break;
+ case F_Controls:
+ strcpy(buf, "controls");
+ break;
+ case F_Type:
+ strcpy(buf, "type");
+ break;
+ case F_Count:
+ strcpy(buf, "count");
+ break;
+ case F_Screen:
+ strcpy(buf, "screen");
+ break;
+ case F_Same:
+ strcpy(buf, "sameServer");
+ break;
+ case F_Data:
+ strcpy(buf, "data");
+ break;
+ case F_Device:
+ strcpy(buf, "device");
+ break;
+ case F_Keycode:
+ strcpy(buf, "keycode");
+ break;
+ case F_ModsToClear:
+ strcpy(buf, "clearmods");
+ break;
+ default:
+ strcpy(buf, "unknown");
+ break;
}
return buf;
}
@@ -185,28 +299,26 @@ static char buf[32];
static Bool
ReportMismatch(unsigned action, unsigned field, const char *type)
{
- ERROR2("Value of %s field must be of type %s\n",fieldText(field),type);
+ ERROR2("Value of %s field must be of type %s\n", fieldText(field), type);
ACTION1("Action %s definition ignored\n",
- XkbActionTypeText(action,XkbMessage));
+ XkbActionTypeText(action, XkbMessage));
return False;
}
static Bool
-ReportIllegal(unsigned action,unsigned field)
+ReportIllegal(unsigned action, unsigned field)
{
ERROR2("Field %s is not defined for an action of type %s\n",
- fieldText(field),
- XkbActionTypeText(action,XkbMessage));
+ fieldText(field), XkbActionTypeText(action, XkbMessage));
ACTION("Action definition ignored\n");
return False;
}
static Bool
-ReportActionNotArray(unsigned action,unsigned field)
+ReportActionNotArray(unsigned action, unsigned field)
{
ERROR2("The %s field in the %s action is not an array\n",
- fieldText(field),
- XkbActionTypeText(action,XkbMessage));
+ fieldText(field), XkbActionTypeText(action, XkbMessage));
ACTION("Action definition ignored\n");
return False;
}
@@ -214,1014 +326,1120 @@ ReportActionNotArray(unsigned action,unsigned field)
static Bool
ReportNotFound(unsigned action, unsigned field, const char *what, char *bad)
{
- ERROR2("%s named %s not found\n",what,bad);
- ACTION2("Ignoring the %s field of an %s action\n",fieldText(field),
- XkbActionTypeText(action,XkbMessage));
+ ERROR2("%s named %s not found\n", what, bad);
+ ACTION2("Ignoring the %s field of an %s action\n", fieldText(field),
+ XkbActionTypeText(action, XkbMessage));
return False;
}
static Bool
-HandleNoAction( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleNoAction(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-CheckLatchLockFlags( unsigned action,
- unsigned field,
- ExprDef * value,
- unsigned * flags_inout)
+CheckLatchLockFlags(unsigned action,
+ unsigned field, ExprDef * value, unsigned *flags_inout)
{
-unsigned tmp;
-ExprResult result;
-
- if (field==F_ClearLocks) tmp= XkbSA_ClearLocks;
- else if (field==F_LatchToLock) tmp= XkbSA_LatchToLock;
- else return False; /* WSGO! */
- if (!ExprResolveBoolean(value,&result,NULL,NULL))
- return ReportMismatch(action,field,"boolean");
- if (result.uval) *flags_inout|= tmp;
- else *flags_inout&= ~tmp;
+ unsigned tmp;
+ ExprResult result;
+
+ if (field == F_ClearLocks)
+ tmp = XkbSA_ClearLocks;
+ else if (field == F_LatchToLock)
+ tmp = XkbSA_LatchToLock;
+ else
+ return False; /* WSGO! */
+ if (!ExprResolveBoolean(value, &result, NULL, NULL))
+ return ReportMismatch(action, field, "boolean");
+ if (result.uval)
+ *flags_inout |= tmp;
+ else
+ *flags_inout &= ~tmp;
return True;
}
static Bool
-CheckModifierField( XkbDescPtr xkb,
- unsigned action,
- ExprDef * value,
- unsigned * flags_inout,
- unsigned * mods_rtrn)
+CheckModifierField(XkbDescPtr xkb,
+ unsigned action,
+ ExprDef * value,
+ unsigned *flags_inout, unsigned *mods_rtrn)
{
-ExprResult rtrn;
-
- if (value->op==ExprIdent) {
- register char *valStr;
- valStr= XkbAtomGetString(NULL,value->value.str);
- if (valStr&&((uStrCaseCmp(valStr,"usemodmapmods")==0)||
- (uStrCaseCmp(valStr,"modmapmods")==0))) {
-
- *mods_rtrn= 0;
- *flags_inout|= XkbSA_UseModMapMods;
- return True;
- }
+ ExprResult rtrn;
+
+ if (value->op == ExprIdent)
+ {
+ register char *valStr;
+ valStr = XkbAtomGetString(NULL, value->value.str);
+ if (valStr && ((uStrCaseCmp(valStr, "usemodmapmods") == 0) ||
+ (uStrCaseCmp(valStr, "modmapmods") == 0)))
+ {
+
+ *mods_rtrn = 0;
+ *flags_inout |= XkbSA_UseModMapMods;
+ return True;
+ }
}
- if (!ExprResolveModMask(value,&rtrn,LookupVModMask,(XPointer)xkb))
- return ReportMismatch(action,F_Modifiers,"modifier mask");
- *mods_rtrn= rtrn.uval;
- *flags_inout&= ~XkbSA_UseModMapMods;
+ if (!ExprResolveModMask(value, &rtrn, LookupVModMask, (XPointer) xkb))
+ return ReportMismatch(action, F_Modifiers, "modifier mask");
+ *mods_rtrn = rtrn.uval;
+ *flags_inout &= ~XkbSA_UseModMapMods;
return True;
}
static Bool
-HandleSetLatchMods( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleSetLatchMods(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-XkbModAction * act;
-unsigned rtrn;
-unsigned t1,t2;
-
- act= (XkbModAction *)action;
- if (array_ndx!=NULL) {
- switch (field) {
- case F_ClearLocks: case F_LatchToLock:
- case F_Modifiers:
- return ReportActionNotArray(action->type,field);
- }
+ XkbModAction *act;
+ unsigned rtrn;
+ unsigned t1, t2;
+
+ act = (XkbModAction *) action;
+ if (array_ndx != NULL)
+ {
+ switch (field)
+ {
+ case F_ClearLocks:
+ case F_LatchToLock:
+ case F_Modifiers:
+ return ReportActionNotArray(action->type, field);
+ }
}
- switch (field) {
- case F_ClearLocks:
- case F_LatchToLock:
- rtrn= act->flags;
- if (CheckLatchLockFlags(action->type,field,value,&rtrn)) {
- act->flags= rtrn;
- return True;
- }
- return False;
- case F_Modifiers:
- t1= act->flags;
- if (CheckModifierField(xkb,action->type,value,&t1,&t2)) {
- act->flags= t1;
- act->real_mods= act->mask= (t2&0xff);
- t2= (t2>>8)&0xffff;
- XkbSetModActionVMods(act,t2);
- return True;
- }
- return False;
+ switch (field)
+ {
+ case F_ClearLocks:
+ case F_LatchToLock:
+ rtrn = act->flags;
+ if (CheckLatchLockFlags(action->type, field, value, &rtrn))
+ {
+ act->flags = rtrn;
+ return True;
+ }
+ return False;
+ case F_Modifiers:
+ t1 = act->flags;
+ if (CheckModifierField(xkb, action->type, value, &t1, &t2))
+ {
+ act->flags = t1;
+ act->real_mods = act->mask = (t2 & 0xff);
+ t2 = (t2 >> 8) & 0xffff;
+ XkbSetModActionVMods(act, t2);
+ return True;
+ }
+ return False;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleLockMods( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleLockMods(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-XkbModAction * act;
-unsigned t1,t2;
-
- act= (XkbModAction *)action;
- if ((array_ndx!=NULL)&&(field==F_Modifiers))
- return ReportActionNotArray(action->type,field);
- switch (field) {
- case F_Modifiers:
- t1= act->flags;
- if (CheckModifierField(xkb,action->type,value,&t1,&t2)) {
- act->flags= t1;
- act->real_mods= act->mask= (t2&0xff);
- t2= (t2>>8)&0xffff;
- XkbSetModActionVMods(act,t2);
- return True;
- }
- return False;
+ XkbModAction *act;
+ unsigned t1, t2;
+
+ act = (XkbModAction *) action;
+ if ((array_ndx != NULL) && (field == F_Modifiers))
+ return ReportActionNotArray(action->type, field);
+ switch (field)
+ {
+ case F_Modifiers:
+ t1 = act->flags;
+ if (CheckModifierField(xkb, action->type, value, &t1, &t2))
+ {
+ act->flags = t1;
+ act->real_mods = act->mask = (t2 & 0xff);
+ t2 = (t2 >> 8) & 0xffff;
+ XkbSetModActionVMods(act, t2);
+ return True;
+ }
+ return False;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static LookupEntry groupNames[] = {
- { "group1", 1 },
- { "group2", 2 },
- { "group3", 3 },
- { "group4", 4 },
- { "group5", 5 },
- { "group6", 6 },
- { "group7", 7 },
- { "group8", 8 },
- { NULL, 0 },
+ {"group1", 1},
+ {"group2", 2},
+ {"group3", 3},
+ {"group4", 4},
+ {"group5", 5},
+ {"group6", 6},
+ {"group7", 7},
+ {"group8", 8},
+ {NULL, 0},
};
static Bool
-CheckGroupField( unsigned action,
- ExprDef * value,
- unsigned * flags_inout,
- int * grp_rtrn)
+CheckGroupField(unsigned action,
+ ExprDef * value, unsigned *flags_inout, int *grp_rtrn)
{
-ExprDef * spec;
-ExprResult rtrn;
+ ExprDef *spec;
+ ExprResult rtrn;
- if ((value->op==OpNegate)||(value->op==OpUnaryPlus)) {
- *flags_inout&= ~XkbSA_GroupAbsolute;
- spec= value->value.child;
+ if ((value->op == OpNegate) || (value->op == OpUnaryPlus))
+ {
+ *flags_inout &= ~XkbSA_GroupAbsolute;
+ spec = value->value.child;
}
- else {
- *flags_inout|= XkbSA_GroupAbsolute;
- spec= value;
+ else
+ {
+ *flags_inout |= XkbSA_GroupAbsolute;
+ spec = value;
}
- if (!ExprResolveInteger(spec,&rtrn,SimpleLookup,(XPointer)groupNames))
- return ReportMismatch(action,F_Group,"integer (range 1..8)");
- if ((rtrn.ival<1)||(rtrn.ival>XkbNumKbdGroups)) {
- ERROR2("Illegal group %d (must be in the range 1..%d)\n",rtrn.ival,
- XkbNumKbdGroups);
- ACTION1("Action %s definition ignored\n",
- XkbActionTypeText(action,XkbMessage));
- return False;
+ if (!ExprResolveInteger(spec, &rtrn, SimpleLookup, (XPointer) groupNames))
+ return ReportMismatch(action, F_Group, "integer (range 1..8)");
+ if ((rtrn.ival < 1) || (rtrn.ival > XkbNumKbdGroups))
+ {
+ ERROR2("Illegal group %d (must be in the range 1..%d)\n", rtrn.ival,
+ XkbNumKbdGroups);
+ ACTION1("Action %s definition ignored\n",
+ XkbActionTypeText(action, XkbMessage));
+ return False;
}
- if (value->op==OpNegate) *grp_rtrn= -rtrn.ival;
- else if (value->op==OpUnaryPlus) *grp_rtrn= rtrn.ival;
- else *grp_rtrn= rtrn.ival-1;
+ if (value->op == OpNegate)
+ *grp_rtrn = -rtrn.ival;
+ else if (value->op == OpUnaryPlus)
+ *grp_rtrn = rtrn.ival;
+ else
+ *grp_rtrn = rtrn.ival - 1;
return True;
}
static Bool
-HandleSetLatchGroup( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleSetLatchGroup(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-XkbGroupAction * act;
-unsigned rtrn;
-unsigned t1;
-int t2;
-
- act= (XkbGroupAction *)action;
- if (array_ndx!=NULL) {
- switch (field) {
- case F_ClearLocks: case F_LatchToLock:
- case F_Group:
- return ReportActionNotArray(action->type,field);
- }
+ XkbGroupAction *act;
+ unsigned rtrn;
+ unsigned t1;
+ int t2;
+
+ act = (XkbGroupAction *) action;
+ if (array_ndx != NULL)
+ {
+ switch (field)
+ {
+ case F_ClearLocks:
+ case F_LatchToLock:
+ case F_Group:
+ return ReportActionNotArray(action->type, field);
+ }
}
- switch (field) {
- case F_ClearLocks:
- case F_LatchToLock:
- rtrn= act->flags;
- if (CheckLatchLockFlags(action->type,field,value,&rtrn)) {
- act->flags= rtrn;
- return True;
- }
- return False;
- case F_Group:
- t1= act->flags;
- if (CheckGroupField(action->type,value,&t1,&t2)) {
- act->flags= t1;
- XkbSASetGroup(act,t2);
- return True;
- }
- return False;
+ switch (field)
+ {
+ case F_ClearLocks:
+ case F_LatchToLock:
+ rtrn = act->flags;
+ if (CheckLatchLockFlags(action->type, field, value, &rtrn))
+ {
+ act->flags = rtrn;
+ return True;
+ }
+ return False;
+ case F_Group:
+ t1 = act->flags;
+ if (CheckGroupField(action->type, value, &t1, &t2))
+ {
+ act->flags = t1;
+ XkbSASetGroup(act, t2);
+ return True;
+ }
+ return False;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleLockGroup( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleLockGroup(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-XkbGroupAction * act;
-unsigned t1;
-int t2;
-
- act= (XkbGroupAction *)action;
- if ((array_ndx!=NULL) && (field==F_Group))
- return ReportActionNotArray(action->type,field);
- if (field==F_Group) {
- t1= act->flags;
- if (CheckGroupField(action->type,value,&t1,&t2)) {
- act->flags= t1;
- XkbSASetGroup(act,t2);
- return True;
- }
- return False;
+ XkbGroupAction *act;
+ unsigned t1;
+ int t2;
+
+ act = (XkbGroupAction *) action;
+ if ((array_ndx != NULL) && (field == F_Group))
+ return ReportActionNotArray(action->type, field);
+ if (field == F_Group)
+ {
+ t1 = act->flags;
+ if (CheckGroupField(action->type, value, &t1, &t2))
+ {
+ act->flags = t1;
+ XkbSASetGroup(act, t2);
+ return True;
+ }
+ return False;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleMovePtr( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleMovePtr(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbPtrAction * act;
-Bool absolute;
-
- act= (XkbPtrAction *)action;
- if ((array_ndx!=NULL)&&((field==F_X)||(field==F_Y)))
- return ReportActionNotArray(action->type,field);
-
- if ((field==F_X)||(field==F_Y)) {
- if ((value->op==OpNegate)||(value->op==OpUnaryPlus))
- absolute= False;
- else absolute= True;
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer");
- if (field==F_X) {
- if (absolute)
- act->flags|= XkbSA_MoveAbsoluteX;
- XkbSetPtrActionX(act,rtrn.ival);
- }
- else {
- if (absolute)
- act->flags|= XkbSA_MoveAbsoluteY;
- XkbSetPtrActionY(act,rtrn.ival);
- }
- return True;
+ ExprResult rtrn;
+ XkbPtrAction *act;
+ Bool absolute;
+
+ act = (XkbPtrAction *) action;
+ if ((array_ndx != NULL) && ((field == F_X) || (field == F_Y)))
+ return ReportActionNotArray(action->type, field);
+
+ if ((field == F_X) || (field == F_Y))
+ {
+ if ((value->op == OpNegate) || (value->op == OpUnaryPlus))
+ absolute = False;
+ else
+ absolute = True;
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "integer");
+ if (field == F_X)
+ {
+ if (absolute)
+ act->flags |= XkbSA_MoveAbsoluteX;
+ XkbSetPtrActionX(act, rtrn.ival);
+ }
+ else
+ {
+ if (absolute)
+ act->flags |= XkbSA_MoveAbsoluteY;
+ XkbSetPtrActionY(act, rtrn.ival);
+ }
+ return True;
}
- else if (field==F_Accel) {
- if (!ExprResolveBoolean(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"boolean");
- if (rtrn.uval) act->flags&= ~XkbSA_NoAcceleration;
- else act->flags|= XkbSA_NoAcceleration;
+ else if (field == F_Accel)
+ {
+ if (!ExprResolveBoolean(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "boolean");
+ if (rtrn.uval)
+ act->flags &= ~XkbSA_NoAcceleration;
+ else
+ act->flags |= XkbSA_NoAcceleration;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static LookupEntry btnNames[] = {
- { "button1", 1 },
- { "button2", 2 },
- { "button3", 3 },
- { "button4", 4 },
- { "button5", 5 },
- { "default", 0 },
- { NULL, 0 }
+ {"button1", 1},
+ {"button2", 2},
+ {"button3", 3},
+ {"button4", 4},
+ {"button5", 5},
+ {"default", 0},
+ {NULL, 0}
};
static LookupEntry lockWhich[] = {
- { "both", 0 },
- { "lock", XkbSA_LockNoUnlock },
- { "neither", (XkbSA_LockNoLock|XkbSA_LockNoUnlock) },
- { "unlock", XkbSA_LockNoLock },
- { NULL, 0 }
+ {"both", 0},
+ {"lock", XkbSA_LockNoUnlock},
+ {"neither", (XkbSA_LockNoLock | XkbSA_LockNoUnlock)},
+ {"unlock", XkbSA_LockNoLock},
+ {NULL, 0}
};
static Bool
-HandlePtrBtn( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandlePtrBtn(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbPtrBtnAction * act;
-
- act= (XkbPtrBtnAction *)action;
- if (field==F_Button) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveInteger(value,&rtrn,SimpleLookup,(XPointer)btnNames))
- return ReportMismatch(action->type,field,"integer (range 1..5)");
- if ((rtrn.ival<0)||(rtrn.ival>5)) {
- ERROR("Button must specify default or be in the range 1..5\n");
- ACTION1("Illegal button value %d ignored\n",rtrn.ival);
- return False;
- }
- act->button= rtrn.ival;
- return True;
+ ExprResult rtrn;
+ XkbPtrBtnAction *act;
+
+ act = (XkbPtrBtnAction *) action;
+ if (field == F_Button)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveInteger
+ (value, &rtrn, SimpleLookup, (XPointer) btnNames))
+ return ReportMismatch(action->type, field,
+ "integer (range 1..5)");
+ if ((rtrn.ival < 0) || (rtrn.ival > 5))
+ {
+ ERROR("Button must specify default or be in the range 1..5\n");
+ ACTION1("Illegal button value %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->button = rtrn.ival;
+ return True;
}
- else if ((action->type==XkbSA_LockPtrBtn)&&(field==F_Affect)) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveEnum(value,&rtrn,lockWhich))
- return ReportMismatch(action->type,field,"lock or unlock");
- act->flags&= ~(XkbSA_LockNoLock|XkbSA_LockNoUnlock);
- act->flags|= rtrn.ival;
- return True;
+ else if ((action->type == XkbSA_LockPtrBtn) && (field == F_Affect))
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveEnum(value, &rtrn, lockWhich))
+ return ReportMismatch(action->type, field, "lock or unlock");
+ act->flags &= ~(XkbSA_LockNoLock | XkbSA_LockNoUnlock);
+ act->flags |= rtrn.ival;
+ return True;
}
- else if (field==F_Count) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveInteger(value,&rtrn,SimpleLookup,(XPointer)btnNames))
- return ReportMismatch(action->type,field,"integer");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("The count field must have a value in the range 0..255\n");
- ACTION1("Illegal count %d ignored\n",rtrn.ival);
- return False;
- }
- act->count= rtrn.ival;
- return True;
+ else if (field == F_Count)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveInteger
+ (value, &rtrn, SimpleLookup, (XPointer) btnNames))
+ return ReportMismatch(action->type, field, "integer");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("The count field must have a value in the range 0..255\n");
+ ACTION1("Illegal count %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->count = rtrn.ival;
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static LookupEntry ptrDflts[] = {
- { "dfltbtn", XkbSA_AffectDfltBtn },
- { "defaultbutton", XkbSA_AffectDfltBtn },
- { "button", XkbSA_AffectDfltBtn },
- { NULL, 0 }
+ {"dfltbtn", XkbSA_AffectDfltBtn},
+ {"defaultbutton", XkbSA_AffectDfltBtn},
+ {"button", XkbSA_AffectDfltBtn},
+ {NULL, 0}
};
static Bool
-HandleSetPtrDflt( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleSetPtrDflt(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbPtrDfltAction * act;
-
- act= (XkbPtrDfltAction *)action;
- if (field==F_Affect) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveEnum(value,&rtrn,ptrDflts))
- return ReportMismatch(action->type,field,"pointer component");
- act->affect= rtrn.uval;
- return True;
+ ExprResult rtrn;
+ XkbPtrDfltAction *act;
+
+ act = (XkbPtrDfltAction *) action;
+ if (field == F_Affect)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveEnum(value, &rtrn, ptrDflts))
+ return ReportMismatch(action->type, field, "pointer component");
+ act->affect = rtrn.uval;
+ return True;
}
- else if ((field==F_Button)||(field==F_Value)) {
- ExprDef *btn;
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if ((value->op==OpNegate)||(value->op==OpUnaryPlus)) {
- act->flags&= ~XkbSA_DfltBtnAbsolute;
- btn= value->value.child;
- }
- else {
- act->flags|= XkbSA_DfltBtnAbsolute;
- btn= value;
- }
-
- if (!ExprResolveInteger(btn,&rtrn,SimpleLookup,(XPointer)btnNames))
- return ReportMismatch(action->type,field,"integer (range 1..5)");
- if ((rtrn.ival<0)||(rtrn.ival>5)) {
- ERROR("New default button value must be in the range 1..5\n");
- ACTION1("Illegal default button value %d ignored\n",rtrn.ival);
- return False;
- }
- if (rtrn.ival==0) {
- ERROR("Cannot set default pointer button to \"default\"\n");
- ACTION("Illegal default button setting ignored\n");
- return False;
- }
- if (value->op==OpNegate)
- XkbSASetPtrDfltValue(act,-rtrn.ival);
- else XkbSASetPtrDfltValue(act,rtrn.ival);
- return True;
+ else if ((field == F_Button) || (field == F_Value))
+ {
+ ExprDef *btn;
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if ((value->op == OpNegate) || (value->op == OpUnaryPlus))
+ {
+ act->flags &= ~XkbSA_DfltBtnAbsolute;
+ btn = value->value.child;
+ }
+ else
+ {
+ act->flags |= XkbSA_DfltBtnAbsolute;
+ btn = value;
+ }
+
+ if (!ExprResolveInteger
+ (btn, &rtrn, SimpleLookup, (XPointer) btnNames))
+ return ReportMismatch(action->type, field,
+ "integer (range 1..5)");
+ if ((rtrn.ival < 0) || (rtrn.ival > 5))
+ {
+ ERROR("New default button value must be in the range 1..5\n");
+ ACTION1("Illegal default button value %d ignored\n", rtrn.ival);
+ return False;
+ }
+ if (rtrn.ival == 0)
+ {
+ ERROR("Cannot set default pointer button to \"default\"\n");
+ ACTION("Illegal default button setting ignored\n");
+ return False;
+ }
+ if (value->op == OpNegate)
+ XkbSASetPtrDfltValue(act, -rtrn.ival);
+ else
+ XkbSASetPtrDfltValue(act, rtrn.ival);
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
-static LookupEntry isoNames[] = {
- { "mods", XkbSA_ISONoAffectMods },
- { "modifiers", XkbSA_ISONoAffectMods },
- { "group", XkbSA_ISONoAffectGroup },
- { "groups", XkbSA_ISONoAffectGroup },
- { "ptr", XkbSA_ISONoAffectPtr },
- { "pointer", XkbSA_ISONoAffectPtr },
- { "ctrls", XkbSA_ISONoAffectCtrls },
- { "controls", XkbSA_ISONoAffectCtrls },
- { "all", ~((unsigned)0) },
- { "none", 0 },
- { NULL, 0 },
+static LookupEntry isoNames[] = {
+ {"mods", XkbSA_ISONoAffectMods},
+ {"modifiers", XkbSA_ISONoAffectMods},
+ {"group", XkbSA_ISONoAffectGroup},
+ {"groups", XkbSA_ISONoAffectGroup},
+ {"ptr", XkbSA_ISONoAffectPtr},
+ {"pointer", XkbSA_ISONoAffectPtr},
+ {"ctrls", XkbSA_ISONoAffectCtrls},
+ {"controls", XkbSA_ISONoAffectCtrls},
+ {"all", ~((unsigned) 0)},
+ {"none", 0},
+ {NULL, 0},
};
static Bool
-HandleISOLock( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleISOLock(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbISOAction * act;
-unsigned flags,mods;
-int group;
-
- act= (XkbISOAction *)action;
- switch (field) {
- case F_Modifiers:
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- flags= act->flags;
- if (CheckModifierField(xkb,action->type,value,&flags,&mods)) {
- act->flags= flags&(~XkbSA_ISODfltIsGroup);
- act->real_mods= mods&0xff;
- mods= (mods>>8)&0xff;
- XkbSetModActionVMods(act,mods);
- return True;
- }
- return False;
- case F_Group:
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- flags= act->flags;
- if (CheckGroupField(action->type,value,&flags,&group)) {
- act->flags= flags|XkbSA_ISODfltIsGroup;
- XkbSASetGroup(act,group);
- return True;
- }
- return False;
- case F_Affect:
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,(XPointer)isoNames))
- return ReportMismatch(action->type,field,"keyboard component");
- act->affect= (~rtrn.uval)&XkbSA_ISOAffectMask;
- return True;
+ ExprResult rtrn;
+ XkbISOAction *act;
+ unsigned flags, mods;
+ int group;
+
+ act = (XkbISOAction *) action;
+ switch (field)
+ {
+ case F_Modifiers:
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ flags = act->flags;
+ if (CheckModifierField(xkb, action->type, value, &flags, &mods))
+ {
+ act->flags = flags & (~XkbSA_ISODfltIsGroup);
+ act->real_mods = mods & 0xff;
+ mods = (mods >> 8) & 0xff;
+ XkbSetModActionVMods(act, mods);
+ return True;
+ }
+ return False;
+ case F_Group:
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ flags = act->flags;
+ if (CheckGroupField(action->type, value, &flags, &group))
+ {
+ act->flags = flags | XkbSA_ISODfltIsGroup;
+ XkbSASetGroup(act, group);
+ return True;
+ }
+ return False;
+ case F_Affect:
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveMask(value, &rtrn, SimpleLookup, (XPointer) isoNames))
+ return ReportMismatch(action->type, field, "keyboard component");
+ act->affect = (~rtrn.uval) & XkbSA_ISOAffectMask;
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleSwitchScreen( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleSwitchScreen(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbSwitchScreenAction * act;
-
- act= (XkbSwitchScreenAction *)action;
- if (field==F_Screen) {
- ExprDef *scrn;
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if ((value->op==OpNegate)||(value->op==OpUnaryPlus)) {
- act->flags&= ~XkbSA_SwitchAbsolute;
- scrn= value->value.child;
- }
- else {
- act->flags|= XkbSA_SwitchAbsolute;
- scrn= value;
- }
-
- if (!ExprResolveInteger(scrn,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer (0..255)");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("Screen index must be in the range 1..255\n");
- ACTION1("Illegal screen value %d ignored\n",rtrn.ival);
- return False;
- }
- if (value->op==OpNegate)
- XkbSASetScreen(act,-rtrn.ival);
- else XkbSASetScreen(act,rtrn.ival);
- return True;
+ ExprResult rtrn;
+ XkbSwitchScreenAction *act;
+
+ act = (XkbSwitchScreenAction *) action;
+ if (field == F_Screen)
+ {
+ ExprDef *scrn;
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if ((value->op == OpNegate) || (value->op == OpUnaryPlus))
+ {
+ act->flags &= ~XkbSA_SwitchAbsolute;
+ scrn = value->value.child;
+ }
+ else
+ {
+ act->flags |= XkbSA_SwitchAbsolute;
+ scrn = value;
+ }
+
+ if (!ExprResolveInteger(scrn, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "integer (0..255)");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("Screen index must be in the range 1..255\n");
+ ACTION1("Illegal screen value %d ignored\n", rtrn.ival);
+ return False;
+ }
+ if (value->op == OpNegate)
+ XkbSASetScreen(act, -rtrn.ival);
+ else
+ XkbSASetScreen(act, rtrn.ival);
+ return True;
}
- else if (field==F_Same) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveBoolean(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"boolean");
- if (rtrn.uval) act->flags&= ~XkbSA_SwitchApplication;
- else act->flags|= XkbSA_SwitchApplication;
- return True;
+ else if (field == F_Same)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveBoolean(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "boolean");
+ if (rtrn.uval)
+ act->flags &= ~XkbSA_SwitchApplication;
+ else
+ act->flags |= XkbSA_SwitchApplication;
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
-LookupEntry ctrlNames[]= {
- { "repeatkeys", XkbRepeatKeysMask },
- { "repeat", XkbRepeatKeysMask },
- { "autorepeat", XkbRepeatKeysMask },
- { "slowkeys", XkbSlowKeysMask },
- { "bouncekeys", XkbBounceKeysMask },
- { "stickykeys", XkbStickyKeysMask },
- { "mousekeys", XkbMouseKeysMask },
- { "mousekeysaccel", XkbMouseKeysAccelMask },
- { "accessxkeys", XkbAccessXKeysMask },
- { "accessxtimeout", XkbAccessXTimeoutMask },
- { "accessxfeedback", XkbAccessXFeedbackMask },
- { "audiblebell", XkbAudibleBellMask },
- { "overlay1", XkbOverlay1Mask },
- { "overlay2", XkbOverlay2Mask },
- { "ignoregrouplock", XkbIgnoreGroupLockMask },
- { "all", XkbAllBooleanCtrlsMask },
- { "none", 0 },
- { NULL, 0 }
+LookupEntry ctrlNames[] = {
+ {"repeatkeys", XkbRepeatKeysMask}
+ ,
+ {"repeat", XkbRepeatKeysMask}
+ ,
+ {"autorepeat", XkbRepeatKeysMask}
+ ,
+ {"slowkeys", XkbSlowKeysMask}
+ ,
+ {"bouncekeys", XkbBounceKeysMask}
+ ,
+ {"stickykeys", XkbStickyKeysMask}
+ ,
+ {"mousekeys", XkbMouseKeysMask}
+ ,
+ {"mousekeysaccel", XkbMouseKeysAccelMask}
+ ,
+ {"accessxkeys", XkbAccessXKeysMask}
+ ,
+ {"accessxtimeout", XkbAccessXTimeoutMask}
+ ,
+ {"accessxfeedback", XkbAccessXFeedbackMask}
+ ,
+ {"audiblebell", XkbAudibleBellMask}
+ ,
+ {"overlay1", XkbOverlay1Mask}
+ ,
+ {"overlay2", XkbOverlay2Mask}
+ ,
+ {"ignoregrouplock", XkbIgnoreGroupLockMask}
+ ,
+ {"all", XkbAllBooleanCtrlsMask}
+ ,
+ {"none", 0}
+ ,
+ {NULL, 0}
};
static Bool
-HandleSetLockControls( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleSetLockControls(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbCtrlsAction * act;
-
- act= (XkbCtrlsAction *)action;
- if (field==F_Controls) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,(XPointer)ctrlNames))
- return ReportMismatch(action->type,field,"controls mask");
- XkbActionSetCtrls(act,rtrn.uval);
- return True;
+ ExprResult rtrn;
+ XkbCtrlsAction *act;
+
+ act = (XkbCtrlsAction *) action;
+ if (field == F_Controls)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveMask
+ (value, &rtrn, SimpleLookup, (XPointer) ctrlNames))
+ return ReportMismatch(action->type, field, "controls mask");
+ XkbActionSetCtrls(act, rtrn.uval);
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
-static LookupEntry evNames[]= {
- { "press", XkbSA_MessageOnPress },
- { "keypress", XkbSA_MessageOnPress },
- { "release", XkbSA_MessageOnRelease },
- { "keyrelease", XkbSA_MessageOnRelease },
- { "all", XkbSA_MessageOnPress|XkbSA_MessageOnRelease },
- { "none", 0 },
- { NULL, 0 }
+static LookupEntry evNames[] = {
+ {"press", XkbSA_MessageOnPress},
+ {"keypress", XkbSA_MessageOnPress},
+ {"release", XkbSA_MessageOnRelease},
+ {"keyrelease", XkbSA_MessageOnRelease},
+ {"all", XkbSA_MessageOnPress | XkbSA_MessageOnRelease},
+ {"none", 0},
+ {NULL, 0}
};
static Bool
-HandleActionMessage( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleActionMessage(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbMessageAction * act;
-
- act= (XkbMessageAction *)action;
- switch (field) {
- case F_Report:
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,(XPointer)evNames))
- return ReportMismatch(action->type,field,"key event mask");
- act->flags&= ~(XkbSA_MessageOnPress|XkbSA_MessageOnRelease);
- act->flags= rtrn.uval&(XkbSA_MessageOnPress|XkbSA_MessageOnRelease);
- return True;
- case F_GenKeyEvent:
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveBoolean(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"boolean");
- if (rtrn.uval) act->flags|= XkbSA_MessageGenKeyEvent;
- else act->flags&= ~XkbSA_MessageGenKeyEvent;
- return True;
- case F_Data:
- if (array_ndx==NULL) {
- if (!ExprResolveString(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"string");
- else {
- int len= strlen(rtrn.str);
- if ((len<1)||(len>6)) {
- WARN("An action message can hold only 6 bytes\n");
- ACTION1("Extra %d bytes ignored\n",len-6);
- }
- strncpy((char *)act->message,rtrn.str,6);
- }
- return True;
- }
- else {
- unsigned ndx;
- if (!ExprResolveInteger(array_ndx,&rtrn,NULL,NULL)) {
- ERROR("Array subscript must be integer\n");
- ACTION("Illegal subscript ignored\n");
- return False;
- }
- ndx= rtrn.uval;
- if (ndx>5) {
- ERROR("An action message is at most 6 bytes long\n");
- ACTION1("Attempt to use data[%d] ignored\n",ndx);
- return False;
- }
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("Message data must be in the range 0..255\n");
- ACTION1("Illegal datum %d ignored\n",rtrn.ival);
- return False;
- }
- act->message[ndx]= rtrn.uval;
- }
- return True;
+ ExprResult rtrn;
+ XkbMessageAction *act;
+
+ act = (XkbMessageAction *) action;
+ switch (field)
+ {
+ case F_Report:
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveMask(value, &rtrn, SimpleLookup, (XPointer) evNames))
+ return ReportMismatch(action->type, field, "key event mask");
+ act->flags &= ~(XkbSA_MessageOnPress | XkbSA_MessageOnRelease);
+ act->flags =
+ rtrn.uval & (XkbSA_MessageOnPress | XkbSA_MessageOnRelease);
+ return True;
+ case F_GenKeyEvent:
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveBoolean(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "boolean");
+ if (rtrn.uval)
+ act->flags |= XkbSA_MessageGenKeyEvent;
+ else
+ act->flags &= ~XkbSA_MessageGenKeyEvent;
+ return True;
+ case F_Data:
+ if (array_ndx == NULL)
+ {
+ if (!ExprResolveString(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "string");
+ else
+ {
+ int len = strlen(rtrn.str);
+ if ((len < 1) || (len > 6))
+ {
+ WARN("An action message can hold only 6 bytes\n");
+ ACTION1("Extra %d bytes ignored\n", len - 6);
+ }
+ strncpy((char *) act->message, rtrn.str, 6);
+ }
+ return True;
+ }
+ else
+ {
+ unsigned ndx;
+ if (!ExprResolveInteger(array_ndx, &rtrn, NULL, NULL))
+ {
+ ERROR("Array subscript must be integer\n");
+ ACTION("Illegal subscript ignored\n");
+ return False;
+ }
+ ndx = rtrn.uval;
+ if (ndx > 5)
+ {
+ ERROR("An action message is at most 6 bytes long\n");
+ ACTION1("Attempt to use data[%d] ignored\n", ndx);
+ return False;
+ }
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "integer");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("Message data must be in the range 0..255\n");
+ ACTION1("Illegal datum %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->message[ndx] = rtrn.uval;
+ }
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleRedirectKey( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleRedirectKey(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbRedirectKeyAction * act;
-unsigned t1,t2,vmods,vmask;
-unsigned long tmp;
-
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
-
- act= (XkbRedirectKeyAction *)action;
- switch (field) {
- case F_Keycode:
- if (!ExprResolveKeyName(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"key name");
- tmp= KeyNameToLong(rtrn.keyName.name);
- if (!FindNamedKey(xkb,tmp,&t1,True,CreateKeyNames(xkb),0)) {
- return ReportNotFound(action->type,field,"Key",
- XkbKeyNameText(rtrn.keyName.name,XkbMessage));
- }
- act->new_key= t1;
- return True;
- case F_ModsToClear:
- case F_Modifiers:
- t1= 0;
- if (CheckModifierField(xkb,action->type,value,&t1,&t2)) {
- act->mods_mask|= (t2&0xff);
- if (field==F_Modifiers)
- act->mods|= (t2&0xff);
- else act->mods&= ~(t2&0xff);
-
- t2= (t2>>8)&0xffff;
- vmods= XkbSARedirectVMods(act);
- vmask= XkbSARedirectVModsMask(act);
- vmask|= t2;
- if (field==F_Modifiers)
- vmods|= t2;
- else vmods&= ~t2;
- XkbSARedirectSetVMods(act,vmods);
- XkbSARedirectSetVModsMask(act,vmask);
- return True;
- }
- return True;
+ ExprResult rtrn;
+ XkbRedirectKeyAction *act;
+ unsigned t1, t2, vmods, vmask;
+ unsigned long tmp;
+
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+
+ act = (XkbRedirectKeyAction *) action;
+ switch (field)
+ {
+ case F_Keycode:
+ if (!ExprResolveKeyName(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "key name");
+ tmp = KeyNameToLong(rtrn.keyName.name);
+ if (!FindNamedKey(xkb, tmp, &t1, True, CreateKeyNames(xkb), 0))
+ {
+ return ReportNotFound(action->type, field, "Key",
+ XkbKeyNameText(rtrn.keyName.name,
+ XkbMessage));
+ }
+ act->new_key = t1;
+ return True;
+ case F_ModsToClear:
+ case F_Modifiers:
+ t1 = 0;
+ if (CheckModifierField(xkb, action->type, value, &t1, &t2))
+ {
+ act->mods_mask |= (t2 & 0xff);
+ if (field == F_Modifiers)
+ act->mods |= (t2 & 0xff);
+ else
+ act->mods &= ~(t2 & 0xff);
+
+ t2 = (t2 >> 8) & 0xffff;
+ vmods = XkbSARedirectVMods(act);
+ vmask = XkbSARedirectVModsMask(act);
+ vmask |= t2;
+ if (field == F_Modifiers)
+ vmods |= t2;
+ else
+ vmods &= ~t2;
+ XkbSARedirectSetVMods(act, vmods);
+ XkbSARedirectSetVModsMask(act, vmask);
+ return True;
+ }
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleDeviceBtn( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleDeviceBtn(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbDeviceBtnAction * act;
-
- act= (XkbDeviceBtnAction *)action;
- if (field==F_Button) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer (range 1..255)");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("Button must specify default or be in the range 1..255\n");
- ACTION1("Illegal button value %d ignored\n",rtrn.ival);
- return False;
- }
- act->button= rtrn.ival;
- return True;
+ ExprResult rtrn;
+ XkbDeviceBtnAction *act;
+
+ act = (XkbDeviceBtnAction *) action;
+ if (field == F_Button)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field,
+ "integer (range 1..255)");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("Button must specify default or be in the range 1..255\n");
+ ACTION1("Illegal button value %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->button = rtrn.ival;
+ return True;
}
- else if ((action->type==XkbSA_LockDeviceBtn)&&(field==F_Affect)) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveEnum(value,&rtrn,lockWhich))
- return ReportMismatch(action->type,field,"lock or unlock");
- act->flags&= ~(XkbSA_LockNoLock|XkbSA_LockNoUnlock);
- act->flags|= rtrn.ival;
- return True;
+ else if ((action->type == XkbSA_LockDeviceBtn) && (field == F_Affect))
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveEnum(value, &rtrn, lockWhich))
+ return ReportMismatch(action->type, field, "lock or unlock");
+ act->flags &= ~(XkbSA_LockNoLock | XkbSA_LockNoUnlock);
+ act->flags |= rtrn.ival;
+ return True;
}
- else if (field==F_Count) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveInteger(value,&rtrn,SimpleLookup,(XPointer)btnNames))
- return ReportMismatch(action->type,field,"integer");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("The count field must have a value in the range 0..255\n");
- ACTION1("Illegal count %d ignored\n",rtrn.ival);
- return False;
- }
- act->count= rtrn.ival;
- return True;
+ else if (field == F_Count)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveInteger
+ (value, &rtrn, SimpleLookup, (XPointer) btnNames))
+ return ReportMismatch(action->type, field, "integer");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("The count field must have a value in the range 0..255\n");
+ ACTION1("Illegal count %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->count = rtrn.ival;
+ return True;
}
- else if (field==F_Device) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer (range 1..255)");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("Device must specify default or be in the range 1..255\n");
- ACTION1("Illegal device value %d ignored\n",rtrn.ival);
- return False;
- }
- act->device= rtrn.ival;
- return True;
+ else if (field == F_Device)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field,
+ "integer (range 1..255)");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("Device must specify default or be in the range 1..255\n");
+ ACTION1("Illegal device value %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->device = rtrn.ival;
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleDeviceValuator( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleDeviceValuator(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
#if 0
-ExprResult rtrn;
-XkbDeviceValuatorAction * act;
+ ExprResult rtrn;
+ XkbDeviceValuatorAction *act;
- act= (XkbDeviceValuatorAction *)action;
+ act = (XkbDeviceValuatorAction *) action;
/* XXX - Not yet implemented */
#endif
return False;
}
static Bool
-HandlePrivate( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandlePrivate(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-
- switch (field) {
- case F_Type:
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(PrivateAction,field,"integer");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("Private action type must be in the range 0..255\n");
- ACTION1("Illegal type %d ignored\n",rtrn.ival);
- return False;
- }
- action->type= rtrn.uval;
- return True;
- case F_Data:
- if (array_ndx==NULL) {
- if (!ExprResolveString(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"string");
- else {
- int len= strlen(rtrn.str);
- if ((len<1)||(len>7)) {
- WARN("A private action has 7 data bytes\n");
- ACTION1("Extra %d bytes ignored\n",len-6);
- return False;
- }
- strncpy((char *)action->data,rtrn.str,7);
- }
- return True;
- }
- else {
- unsigned ndx;
- if (!ExprResolveInteger(array_ndx,&rtrn,NULL,NULL)) {
- ERROR("Array subscript must be integer\n");
- ACTION("Illegal subscript ignored\n");
- return False;
- }
- ndx= rtrn.uval;
- if (ndx>6) {
- ERROR("The data for a private action is 7 bytes long\n");
- ACTION1("Attempt to use data[%d] ignored\n",ndx);
- return False;
- }
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("All data for a private action must be 0..255\n");
- ACTION1("Illegal datum %d ignored\n",rtrn.ival);
- return False;
- }
- action->data[ndx]= rtrn.uval;
- return True;
- }
+ ExprResult rtrn;
+
+ switch (field)
+ {
+ case F_Type:
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(PrivateAction, field, "integer");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("Private action type must be in the range 0..255\n");
+ ACTION1("Illegal type %d ignored\n", rtrn.ival);
+ return False;
+ }
+ action->type = rtrn.uval;
+ return True;
+ case F_Data:
+ if (array_ndx == NULL)
+ {
+ if (!ExprResolveString(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "string");
+ else
+ {
+ int len = strlen(rtrn.str);
+ if ((len < 1) || (len > 7))
+ {
+ WARN("A private action has 7 data bytes\n");
+ ACTION1("Extra %d bytes ignored\n", len - 6);
+ return False;
+ }
+ strncpy((char *) action->data, rtrn.str, 7);
+ }
+ return True;
+ }
+ else
+ {
+ unsigned ndx;
+ if (!ExprResolveInteger(array_ndx, &rtrn, NULL, NULL))
+ {
+ ERROR("Array subscript must be integer\n");
+ ACTION("Illegal subscript ignored\n");
+ return False;
+ }
+ ndx = rtrn.uval;
+ if (ndx > 6)
+ {
+ ERROR("The data for a private action is 7 bytes long\n");
+ ACTION1("Attempt to use data[%d] ignored\n", ndx);
+ return False;
+ }
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "integer");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("All data for a private action must be 0..255\n");
+ ACTION1("Illegal datum %d ignored\n", rtrn.ival);
+ return False;
+ }
+ action->data[ndx] = rtrn.uval;
+ return True;
+ }
}
- return ReportIllegal(PrivateAction,field);
+ return ReportIllegal(PrivateAction, field);
}
-typedef Bool (*actionHandler)(
- XkbDescPtr /* xkb */,
- XkbAnyAction * /* action */,
- unsigned /* field */,
- ExprDef * /* array_ndx */,
- ExprDef * /* value */
-);
-
-static actionHandler handleAction[XkbSA_NumActions+1] = {
- HandleNoAction /* NoAction */,
- HandleSetLatchMods /* SetMods */,
- HandleSetLatchMods /* LatchMods */,
- HandleLockMods /* LockMods */,
- HandleSetLatchGroup /* SetGroup */,
- HandleSetLatchGroup /* LatchGroup */,
- HandleLockGroup /* LockGroup */,
- HandleMovePtr /* MovePtr */,
- HandlePtrBtn /* PtrBtn */,
- HandlePtrBtn /* LockPtrBtn */,
- HandleSetPtrDflt /* SetPtrDflt */,
- HandleISOLock /* ISOLock */,
- HandleNoAction /* Terminate */,
- HandleSwitchScreen /* SwitchScreen */,
- HandleSetLockControls /* SetControls */,
- HandleSetLockControls /* LockControls */,
- HandleActionMessage /* ActionMessage*/,
- HandleRedirectKey /* RedirectKey */,
- HandleDeviceBtn /* DeviceBtn */,
- HandleDeviceBtn /* LockDeviceBtn*/,
- HandleDeviceValuator /* DeviceValuatr*/,
- HandlePrivate /* Private */
+typedef Bool(*actionHandler) (XkbDescPtr /* xkb */ ,
+ XkbAnyAction * /* action */ ,
+ unsigned /* field */ ,
+ ExprDef * /* array_ndx */ ,
+ ExprDef * /* value */
+ );
+
+static actionHandler handleAction[XkbSA_NumActions + 1] = {
+ HandleNoAction /* NoAction */ ,
+ HandleSetLatchMods /* SetMods */ ,
+ HandleSetLatchMods /* LatchMods */ ,
+ HandleLockMods /* LockMods */ ,
+ HandleSetLatchGroup /* SetGroup */ ,
+ HandleSetLatchGroup /* LatchGroup */ ,
+ HandleLockGroup /* LockGroup */ ,
+ HandleMovePtr /* MovePtr */ ,
+ HandlePtrBtn /* PtrBtn */ ,
+ HandlePtrBtn /* LockPtrBtn */ ,
+ HandleSetPtrDflt /* SetPtrDflt */ ,
+ HandleISOLock /* ISOLock */ ,
+ HandleNoAction /* Terminate */ ,
+ HandleSwitchScreen /* SwitchScreen */ ,
+ HandleSetLockControls /* SetControls */ ,
+ HandleSetLockControls /* LockControls */ ,
+ HandleActionMessage /* ActionMessage */ ,
+ HandleRedirectKey /* RedirectKey */ ,
+ HandleDeviceBtn /* DeviceBtn */ ,
+ HandleDeviceBtn /* LockDeviceBtn */ ,
+ HandleDeviceValuator /* DeviceValuatr */ ,
+ HandlePrivate /* Private */
};
/***====================================================================***/
static void
-ApplyActionFactoryDefaults(XkbAction *action)
+ApplyActionFactoryDefaults(XkbAction * action)
{
- if (action->type==XkbSA_SetPtrDflt) { /* increment default button */
- action->dflt.affect= XkbSA_AffectDfltBtn;
- action->dflt.flags= 0;
- XkbSASetPtrDfltValue(&action->dflt,1);
+ if (action->type == XkbSA_SetPtrDflt)
+ { /* increment default button */
+ action->dflt.affect = XkbSA_AffectDfltBtn;
+ action->dflt.flags = 0;
+ XkbSASetPtrDfltValue(&action->dflt, 1);
}
- else if (action->type==XkbSA_ISOLock) {
- action->iso.real_mods= LockMask;
+ else if (action->type == XkbSA_ISOLock)
+ {
+ action->iso.real_mods = LockMask;
}
return;
}
-int
-HandleActionDef( ExprDef * def,
- XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned mergeMode,
- ActionInfo * info)
+int
+HandleActionDef(ExprDef * def,
+ XkbDescPtr xkb,
+ XkbAnyAction * action, unsigned mergeMode, ActionInfo * info)
{
-ExprDef * arg;
-register char * str;
-unsigned tmp,hndlrType;
+ ExprDef *arg;
+ register char *str;
+ unsigned tmp, hndlrType;
if (!actionsInitialized)
- ActionsInit();
+ ActionsInit();
- if (def->op!=ExprActionDecl) {
- ERROR1("Expected an action definition, found %s\n",exprOpText(def->op));
- return False;
+ if (def->op != ExprActionDecl)
+ {
+ ERROR1("Expected an action definition, found %s\n",
+ exprOpText(def->op));
+ return False;
}
- str= XkbAtomGetString(NULL,def->value.action.name);
- if (!str) {
- WSGO("Missing name in action definition!!\n");
- return False;
+ str = XkbAtomGetString(NULL, def->value.action.name);
+ if (!str)
+ {
+ WSGO("Missing name in action definition!!\n");
+ return False;
}
- if (!stringToAction(str,&tmp)) {
- ERROR1("Unknown action %s\n",str);
- return False;
+ if (!stringToAction(str, &tmp))
+ {
+ ERROR1("Unknown action %s\n", str);
+ return False;
}
- action->type= hndlrType= tmp;
- if (action->type!=XkbSA_NoAction) {
- ApplyActionFactoryDefaults((XkbAction *)action);
- while (info) {
- if ((info->action==XkbSA_NoAction)||(info->action==hndlrType)) {
- if (!(*handleAction[hndlrType])(xkb,action,
- info->field,info->array_ndx,
- info->value)) {
- return False;
- }
- }
- info= info->next;
- }
+ action->type = hndlrType = tmp;
+ if (action->type != XkbSA_NoAction)
+ {
+ ApplyActionFactoryDefaults((XkbAction *) action);
+ while (info)
+ {
+ if ((info->action == XkbSA_NoAction)
+ || (info->action == hndlrType))
+ {
+ if (!(*handleAction[hndlrType]) (xkb, action,
+ info->field,
+ info->array_ndx,
+ info->value))
+ {
+ return False;
+ }
+ }
+ info = info->next;
+ }
}
- for (arg=def->value.action.args;arg!=NULL;arg=(ExprDef*)arg->common.next) {
- ExprDef *field,*value,*arrayRtrn;
- ExprResult elemRtrn,fieldRtrn;
- unsigned fieldNdx;
-
- if (arg->op==OpAssign) {
- field= arg->value.binary.left;
- value= arg->value.binary.right;
- }
- else {
- if ((arg->op==OpNot)||(arg->op==OpInvert)) {
- field= arg->value.child;
- value= &constFalse;
- }
- else {
- field= arg;
- value= &constTrue;
- }
- }
- if (!ExprResolveLhs(field,&elemRtrn,&fieldRtrn,&arrayRtrn))
- return False; /* internal error -- already reported */
-
- if (elemRtrn.str!=NULL) {
- ERROR("Cannot change defaults in an action definition\n");
- ACTION2("Ignoring attempt to change %s.%s\n",elemRtrn.str,
- fieldRtrn.str);
- return False;
- }
- if (!stringToField(fieldRtrn.str,&fieldNdx)) {
- ERROR1("Unknown field name %s\n",uStringText(fieldRtrn.str));
- return False;
- }
- if (!(*handleAction[hndlrType])(xkb,action,fieldNdx,arrayRtrn,value)) {
- return False;
- }
+ for (arg = def->value.action.args; arg != NULL;
+ arg = (ExprDef *) arg->common.next)
+ {
+ ExprDef *field, *value, *arrayRtrn;
+ ExprResult elemRtrn, fieldRtrn;
+ unsigned fieldNdx;
+
+ if (arg->op == OpAssign)
+ {
+ field = arg->value.binary.left;
+ value = arg->value.binary.right;
+ }
+ else
+ {
+ if ((arg->op == OpNot) || (arg->op == OpInvert))
+ {
+ field = arg->value.child;
+ value = &constFalse;
+ }
+ else
+ {
+ field = arg;
+ value = &constTrue;
+ }
+ }
+ if (!ExprResolveLhs(field, &elemRtrn, &fieldRtrn, &arrayRtrn))
+ return False; /* internal error -- already reported */
+
+ if (elemRtrn.str != NULL)
+ {
+ ERROR("Cannot change defaults in an action definition\n");
+ ACTION2("Ignoring attempt to change %s.%s\n", elemRtrn.str,
+ fieldRtrn.str);
+ return False;
+ }
+ if (!stringToField(fieldRtrn.str, &fieldNdx))
+ {
+ ERROR1("Unknown field name %s\n", uStringText(fieldRtrn.str));
+ return False;
+ }
+ if (!(*handleAction[hndlrType])
+ (xkb, action, fieldNdx, arrayRtrn, value))
+ {
+ return False;
+ }
}
return True;
}
/***====================================================================***/
-int
-SetActionField( XkbDescPtr xkb,
- char * elem,
- char * field,
- ExprDef * array_ndx,
- ExprDef * value,
- ActionInfo ** info_rtrn)
+int
+SetActionField(XkbDescPtr xkb,
+ char *elem,
+ char *field,
+ ExprDef * array_ndx, ExprDef * value, ActionInfo ** info_rtrn)
{
-ActionInfo *new,*old;
+ ActionInfo *new, *old;
if (!actionsInitialized)
- ActionsInit();
+ ActionsInit();
- new= uTypedAlloc(ActionInfo);
- if (new==NULL) {
- WSGO("Couldn't allocate space for action default\n");
- return False;
+ new = uTypedAlloc(ActionInfo);
+ if (new == NULL)
+ {
+ WSGO("Couldn't allocate space for action default\n");
+ return False;
}
- if (uStrCaseCmp(elem,"action")==0)
- new->action= XkbSA_NoAction;
- else {
- if (!stringToAction(elem,&new->action))
- return False;
- if (new->action==XkbSA_NoAction) {
- ERROR1("\"%s\" is not a valid field in a NoAction action\n",field);
- return False;
- }
+ if (uStrCaseCmp(elem, "action") == 0)
+ new->action = XkbSA_NoAction;
+ else
+ {
+ if (!stringToAction(elem, &new->action))
+ return False;
+ if (new->action == XkbSA_NoAction)
+ {
+ ERROR1("\"%s\" is not a valid field in a NoAction action\n",
+ field);
+ return False;
+ }
}
- if (!stringToField(field,&new->field)) {
- ERROR1("\"%s\" is not a legal field name\n",field);
- return False;
+ if (!stringToField(field, &new->field))
+ {
+ ERROR1("\"%s\" is not a legal field name\n", field);
+ return False;
}
- new->array_ndx= array_ndx;
- new->value= value;
- new->next= NULL;
- old= *info_rtrn;
- while ((old)&&(old->next))
- old= old->next;
- if (old==NULL) *info_rtrn= new;
- else old->next= new;
+ new->array_ndx = array_ndx;
+ new->value = value;
+ new->next = NULL;
+ old = *info_rtrn;
+ while ((old) && (old->next))
+ old = old->next;
+ if (old == NULL)
+ *info_rtrn = new;
+ else
+ old->next = new;
return True;
}
@@ -1230,21 +1448,21 @@ ActionInfo *new,*old;
void
ActionsInit(void)
{
- if (!actionsInitialized) {
- bzero((char *)&constTrue,sizeof(constTrue));
- bzero((char *)&constFalse,sizeof(constFalse));
- constTrue.common.stmtType= StmtExpr;
- constTrue.common.next= NULL;
- constTrue.op= ExprIdent;
- constTrue.type= TypeBoolean;
- constTrue.value.str= XkbInternAtom(NULL,"true",False);
- constFalse.common.stmtType= StmtExpr;
- constFalse.common.next= NULL;
- constFalse.op= ExprIdent;
- constFalse.type= TypeBoolean;
- constFalse.value.str= XkbInternAtom(NULL,"false",False);
- actionsInitialized= 1;
+ if (!actionsInitialized)
+ {
+ bzero((char *) &constTrue, sizeof(constTrue));
+ bzero((char *) &constFalse, sizeof(constFalse));
+ constTrue.common.stmtType = StmtExpr;
+ constTrue.common.next = NULL;
+ constTrue.op = ExprIdent;
+ constTrue.type = TypeBoolean;
+ constTrue.value.str = XkbInternAtom(NULL, "true", False);
+ constFalse.common.stmtType = StmtExpr;
+ constFalse.common.next = NULL;
+ constFalse.op = ExprIdent;
+ constFalse.type = TypeBoolean;
+ constFalse.value.str = XkbInternAtom(NULL, "false", False);
+ actionsInitialized = 1;
}
return;
}
-
diff --git a/action.h b/action.h
index f4e389d..2fb7a5e 100644
--- a/action.h
+++ b/action.h
@@ -55,34 +55,31 @@
#define PrivateAction (XkbSA_LastAction+1)
-typedef struct _ActionInfo {
- unsigned action;
- unsigned field;
- ExprDef * array_ndx;
- ExprDef * value;
- struct _ActionInfo * next;
+typedef struct _ActionInfo
+{
+ unsigned action;
+ unsigned field;
+ ExprDef *array_ndx;
+ ExprDef *value;
+ struct _ActionInfo *next;
} ActionInfo;
-extern int HandleActionDef(
- ExprDef * /* def */,
- XkbDescPtr /* xkb */,
- XkbAnyAction * /* action */,
- unsigned /* mergeMode */,
- ActionInfo * /* info */
-);
+extern int HandleActionDef(ExprDef * /* def */ ,
+ XkbDescPtr /* xkb */ ,
+ XkbAnyAction * /* action */ ,
+ unsigned /* mergeMode */ ,
+ ActionInfo * /* info */
+ );
-extern int SetActionField(
- XkbDescPtr /* xkb */,
- char * /* elem */,
- char * /* field */,
- ExprDef * /* index */,
- ExprDef * /* value */,
- ActionInfo ** /* info_rtrn */
-);
+extern int SetActionField(XkbDescPtr /* xkb */ ,
+ char * /* elem */ ,
+ char * /* field */ ,
+ ExprDef * /* index */ ,
+ ExprDef * /* value */ ,
+ ActionInfo ** /* info_rtrn */
+ );
-extern void ActionsInit(
- void
-);
+extern void ActionsInit(void);
extern LookupEntry ctrlNames[];
diff --git a/alias.c b/alias.c
index 748eafe..ba55d3d 100644
--- a/alias.c
+++ b/alias.c
@@ -32,228 +32,258 @@
#include <X11/extensions/XKBgeom.h>
static void
-HandleCollision(AliasInfo *old,AliasInfo *new)
+HandleCollision(AliasInfo * old, AliasInfo * new)
{
- if (strncmp(new->real,old->real,XkbKeyNameLength)==0) {
- if (((new->def.fileID==old->def.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN2("Alias of %s for %s declared more than once\n",
- XkbKeyNameText(new->alias,XkbMessage),
- XkbKeyNameText(new->real,XkbMessage));
- ACTION("First definition ignored\n");
- }
+ if (strncmp(new->real, old->real, XkbKeyNameLength) == 0)
+ {
+ if (((new->def.fileID == old->def.fileID) && (warningLevel > 0)) ||
+ (warningLevel > 9))
+ {
+ WARN2("Alias of %s for %s declared more than once\n",
+ XkbKeyNameText(new->alias, XkbMessage),
+ XkbKeyNameText(new->real, XkbMessage));
+ ACTION("First definition ignored\n");
+ }
}
- else {
- char *use,*ignore;
- if (new->def.merge==MergeAugment) {
- use= old->real;
- ignore= new->real;
- }
- else {
- use= new->real;
- ignore= old->real;
- }
- if (((old->def.fileID==new->def.fileID)&&(warningLevel>0))||
- (warningLevel>9)){
- WARN1("Multiple definitions for alias %s\n",
- XkbKeyNameText(old->alias,XkbMessage));
- ACTION2("Using %s, ignoring %s\n", XkbKeyNameText(use,XkbMessage),
- XkbKeyNameText(ignore,XkbMessage));
- }
- if (use!=old->real)
- memcpy(old->real,use,XkbKeyNameLength);
+ else
+ {
+ char *use, *ignore;
+ if (new->def.merge == MergeAugment)
+ {
+ use = old->real;
+ ignore = new->real;
+ }
+ else
+ {
+ use = new->real;
+ ignore = old->real;
+ }
+ if (((old->def.fileID == new->def.fileID) && (warningLevel > 0)) ||
+ (warningLevel > 9))
+ {
+ WARN1("Multiple definitions for alias %s\n",
+ XkbKeyNameText(old->alias, XkbMessage));
+ ACTION2("Using %s, ignoring %s\n",
+ XkbKeyNameText(use, XkbMessage),
+ XkbKeyNameText(ignore, XkbMessage));
+ }
+ if (use != old->real)
+ memcpy(old->real, use, XkbKeyNameLength);
}
- old->def.fileID= new->def.fileID;
- old->def.merge= new->def.merge;
+ old->def.fileID = new->def.fileID;
+ old->def.merge = new->def.merge;
return;
}
static void
-InitAliasInfo( AliasInfo * info,
- unsigned merge,
- unsigned file_id,
- char * alias,
- char * real)
+InitAliasInfo(AliasInfo * info,
+ unsigned merge, unsigned file_id, char *alias, char *real)
{
- bzero(info,sizeof(AliasInfo));
- info->def.merge= merge;
- info->def.fileID= file_id;
- strncpy(info->alias,alias,XkbKeyNameLength);
- strncpy(info->real,real,XkbKeyNameLength);
+ bzero(info, sizeof(AliasInfo));
+ info->def.merge = merge;
+ info->def.fileID = file_id;
+ strncpy(info->alias, alias, XkbKeyNameLength);
+ strncpy(info->real, real, XkbKeyNameLength);
return;
}
-int
-HandleAliasDef( KeyAliasDef * def,
- unsigned merge,
- unsigned file_id,
- AliasInfo ** info_in)
+int
+HandleAliasDef(KeyAliasDef * def,
+ unsigned merge, unsigned file_id, AliasInfo ** info_in)
{
-AliasInfo * info;
+ AliasInfo *info;
- for (info= *info_in;info!=NULL;info= (AliasInfo *)info->def.next) {
- if (strncmp(info->alias,def->alias,XkbKeyNameLength)==0) {
- AliasInfo new;
- InitAliasInfo(&new,merge,file_id,def->alias,def->real);
- HandleCollision(info,&new);
- return True;
- }
+ for (info = *info_in; info != NULL; info = (AliasInfo *) info->def.next)
+ {
+ if (strncmp(info->alias, def->alias, XkbKeyNameLength) == 0)
+ {
+ AliasInfo new;
+ InitAliasInfo(&new, merge, file_id, def->alias, def->real);
+ HandleCollision(info, &new);
+ return True;
+ }
}
- info= uTypedCalloc(1,AliasInfo);
- if (info==NULL) {
- WSGO("Allocation failure in HandleAliasDef\n");
- return False;
+ info = uTypedCalloc(1, AliasInfo);
+ if (info == NULL)
+ {
+ WSGO("Allocation failure in HandleAliasDef\n");
+ return False;
}
- info->def.fileID= file_id;
- info->def.merge= merge;
- info->def.next= (CommonInfo *)*info_in;
- memcpy(info->alias,def->alias,XkbKeyNameLength);
- memcpy(info->real,def->real,XkbKeyNameLength);
- *info_in= (AliasInfo *)AddCommonInfo(&(*info_in)->def,&info->def);
+ info->def.fileID = file_id;
+ info->def.merge = merge;
+ info->def.next = (CommonInfo *) * info_in;
+ memcpy(info->alias, def->alias, XkbKeyNameLength);
+ memcpy(info->real, def->real, XkbKeyNameLength);
+ *info_in = (AliasInfo *) AddCommonInfo(&(*info_in)->def, &info->def);
return True;
}
void
-ClearAliases(AliasInfo **info_in)
+ClearAliases(AliasInfo ** info_in)
{
- if ((info_in)&&(*info_in))
- ClearCommonInfo(&(*info_in)->def);
+ if ((info_in) && (*info_in))
+ ClearCommonInfo(&(*info_in)->def);
return;
}
Bool
-MergeAliases(AliasInfo **into,AliasInfo **merge,unsigned how_merge)
+MergeAliases(AliasInfo ** into, AliasInfo ** merge, unsigned how_merge)
{
-AliasInfo * tmp;
-KeyAliasDef def;
+ AliasInfo *tmp;
+ KeyAliasDef def;
- if ((*merge)==NULL)
- return True;
- if ((*into)==NULL) {
- *into= *merge;
- *merge= NULL;
- return True;
- }
- bzero((char *)&def,sizeof(KeyAliasDef));
- for (tmp= *merge;tmp!=NULL;tmp= (AliasInfo *)tmp->def.next) {
- if (how_merge==MergeDefault)
- def.merge= tmp->def.merge;
- else def.merge= how_merge;
- memcpy(def.alias,tmp->alias,XkbKeyNameLength);
- memcpy(def.real,tmp->real,XkbKeyNameLength);
- if (!HandleAliasDef(&def,def.merge,tmp->def.fileID,into))
- return False;
+ if ((*merge) == NULL)
+ return True;
+ if ((*into) == NULL)
+ {
+ *into = *merge;
+ *merge = NULL;
+ return True;
+ }
+ bzero((char *) &def, sizeof(KeyAliasDef));
+ for (tmp = *merge; tmp != NULL; tmp = (AliasInfo *) tmp->def.next)
+ {
+ if (how_merge == MergeDefault)
+ def.merge = tmp->def.merge;
+ else
+ def.merge = how_merge;
+ memcpy(def.alias, tmp->alias, XkbKeyNameLength);
+ memcpy(def.real, tmp->real, XkbKeyNameLength);
+ if (!HandleAliasDef(&def, def.merge, tmp->def.fileID, into))
+ return False;
}
return True;
}
int
-ApplyAliases(XkbDescPtr xkb,Bool toGeom,AliasInfo **info_in)
+ApplyAliases(XkbDescPtr xkb, Bool toGeom, AliasInfo ** info_in)
{
-register int i;
-XkbKeyAliasPtr old,a;
-AliasInfo * info;
-int nNew,nOld;
-Status status;
+ register int i;
+ XkbKeyAliasPtr old, a;
+ AliasInfo *info;
+ int nNew, nOld;
+ Status status;
- if (*info_in==NULL)
- return True;
- if (toGeom) {
- nOld= (xkb->geom?xkb->geom->num_key_aliases:0);
- old= (xkb->geom?xkb->geom->key_aliases:NULL);
+ if (*info_in == NULL)
+ return True;
+ if (toGeom)
+ {
+ nOld = (xkb->geom ? xkb->geom->num_key_aliases : 0);
+ old = (xkb->geom ? xkb->geom->key_aliases : NULL);
}
- else {
- nOld= (xkb->names?xkb->names->num_key_aliases:0);
- old= (xkb->names?xkb->names->key_aliases:NULL);
+ else
+ {
+ nOld = (xkb->names ? xkb->names->num_key_aliases : 0);
+ old = (xkb->names ? xkb->names->key_aliases : NULL);
}
- for (nNew=0,info= *info_in;info!=NULL;info= (AliasInfo *)info->def.next) {
- unsigned long lname;
- unsigned int kc;
+ for (nNew = 0, info = *info_in; info != NULL;
+ info = (AliasInfo *) info->def.next)
+ {
+ unsigned long lname;
+ unsigned int kc;
- lname= KeyNameToLong(info->real);
- if (!FindNamedKey(xkb,lname,&kc,False,CreateKeyNames(xkb),0)) {
- if (warningLevel>4) {
- WARN2("Attempt to alias %s to non-existent key %s\n",
- XkbKeyNameText(info->alias,XkbMessage),
- XkbKeyNameText(info->real,XkbMessage));
- ACTION("Ignored\n");
- }
- info->alias[0]= '\0';
- continue;
- }
- lname= KeyNameToLong(info->alias);
- if (FindNamedKey(xkb,lname,&kc,False,False,0)) {
- if (warningLevel>4) {
- WARN("Attempt to create alias with the name of a real key\n");
- ACTION2("Alias \"%s = %s\" ignored\n",
- XkbKeyNameText(info->alias,XkbMessage),
- XkbKeyNameText(info->real,XkbMessage));
- }
- info->alias[0]= '\0';
- continue;
- }
- nNew++;
- if ( old ) {
- for (i=0,a=old;i<nOld;i++,a++) {
- if (strncmp(a->alias,info->alias,XkbKeyNameLength)==0) {
- AliasInfo old;
- InitAliasInfo(&old,MergeAugment,0,a->alias,a->real);
- HandleCollision(&old,info);
- memcpy(old.real,a->real,XkbKeyNameLength);
- info->alias[0]= '\0';
- nNew--;
- break;
- }
- }
- }
+ lname = KeyNameToLong(info->real);
+ if (!FindNamedKey(xkb, lname, &kc, False, CreateKeyNames(xkb), 0))
+ {
+ if (warningLevel > 4)
+ {
+ WARN2("Attempt to alias %s to non-existent key %s\n",
+ XkbKeyNameText(info->alias, XkbMessage),
+ XkbKeyNameText(info->real, XkbMessage));
+ ACTION("Ignored\n");
+ }
+ info->alias[0] = '\0';
+ continue;
+ }
+ lname = KeyNameToLong(info->alias);
+ if (FindNamedKey(xkb, lname, &kc, False, False, 0))
+ {
+ if (warningLevel > 4)
+ {
+ WARN("Attempt to create alias with the name of a real key\n");
+ ACTION2("Alias \"%s = %s\" ignored\n",
+ XkbKeyNameText(info->alias, XkbMessage),
+ XkbKeyNameText(info->real, XkbMessage));
+ }
+ info->alias[0] = '\0';
+ continue;
+ }
+ nNew++;
+ if (old)
+ {
+ for (i = 0, a = old; i < nOld; i++, a++)
+ {
+ if (strncmp(a->alias, info->alias, XkbKeyNameLength) == 0)
+ {
+ AliasInfo old;
+ InitAliasInfo(&old, MergeAugment, 0, a->alias, a->real);
+ HandleCollision(&old, info);
+ memcpy(old.real, a->real, XkbKeyNameLength);
+ info->alias[0] = '\0';
+ nNew--;
+ break;
+ }
+ }
+ }
}
- if (nNew==0) {
- ClearCommonInfo(&(*info_in)->def);
- *info_in= NULL;
- return True;
+ if (nNew == 0)
+ {
+ ClearCommonInfo(&(*info_in)->def);
+ *info_in = NULL;
+ return True;
}
- status= Success;
- if (toGeom) {
- if (!xkb->geom) {
- XkbGeometrySizesRec sizes;
- bzero((char *)&sizes,sizeof(XkbGeometrySizesRec));
- sizes.which= XkbGeomKeyAliasesMask;
- sizes.num_key_aliases= nOld+nNew;
- status= XkbAllocGeometry(xkb,&sizes);
- }
- else {
- status= XkbAllocGeomKeyAliases(xkb->geom,nOld+nNew);
- }
- if (xkb->geom)
- old= xkb->geom->key_aliases;
+ status = Success;
+ if (toGeom)
+ {
+ if (!xkb->geom)
+ {
+ XkbGeometrySizesRec sizes;
+ bzero((char *) &sizes, sizeof(XkbGeometrySizesRec));
+ sizes.which = XkbGeomKeyAliasesMask;
+ sizes.num_key_aliases = nOld + nNew;
+ status = XkbAllocGeometry(xkb, &sizes);
+ }
+ else
+ {
+ status = XkbAllocGeomKeyAliases(xkb->geom, nOld + nNew);
+ }
+ if (xkb->geom)
+ old = xkb->geom->key_aliases;
}
- else {
- status= XkbAllocNames(xkb,XkbKeyAliasesMask,0,nOld+nNew);
- if (xkb->names)
- old= xkb->names->key_aliases;
+ else
+ {
+ status = XkbAllocNames(xkb, XkbKeyAliasesMask, 0, nOld + nNew);
+ if (xkb->names)
+ old = xkb->names->key_aliases;
}
- if (status!=Success) {
- WSGO("Allocation failure in ApplyAliases\n");
- return False;
+ if (status != Success)
+ {
+ WSGO("Allocation failure in ApplyAliases\n");
+ return False;
}
- if (toGeom)
- a= &xkb->geom->key_aliases[nOld];
- else a= &xkb->names->key_aliases[nOld];
- for (info= *info_in;info!=NULL;info= (AliasInfo *)info->def.next) {
- if (info->alias[0]!='\0') {
- strncpy(a->alias,info->alias,XkbKeyNameLength);
- strncpy(a->real,info->real,XkbKeyNameLength);
- a++;
- }
+ if (toGeom)
+ a = &xkb->geom->key_aliases[nOld];
+ else
+ a = &xkb->names->key_aliases[nOld];
+ for (info = *info_in; info != NULL; info = (AliasInfo *) info->def.next)
+ {
+ if (info->alias[0] != '\0')
+ {
+ strncpy(a->alias, info->alias, XkbKeyNameLength);
+ strncpy(a->real, info->real, XkbKeyNameLength);
+ a++;
+ }
}
#ifdef DEBUG
- if ((a-old)!=(nOld+nNew)) {
- WSGO2("Expected %d aliases total but created %d\n",nOld+nNew,a-old);
+ if ((a - old) != (nOld + nNew))
+ {
+ WSGO2("Expected %d aliases total but created %d\n", nOld + nNew,
+ a - old);
}
#endif
- if (toGeom)
- xkb->geom->num_key_aliases+= nNew;
+ if (toGeom)
+ xkb->geom->num_key_aliases += nNew;
ClearCommonInfo(&(*info_in)->def);
- *info_in= NULL;
+ *info_in = NULL;
return True;
}
diff --git a/alias.h b/alias.h
index 4e241f4..b6fac5b 100644
--- a/alias.h
+++ b/alias.h
@@ -27,33 +27,30 @@
#ifndef ALIAS_H
#define ALIAS_H 1
-typedef struct _AliasInfo {
- CommonInfo def;
- char alias[XkbKeyNameLength+1];
- char real[XkbKeyNameLength+1];
+typedef struct _AliasInfo
+{
+ CommonInfo def;
+ char alias[XkbKeyNameLength + 1];
+ char real[XkbKeyNameLength + 1];
} AliasInfo;
-extern int HandleAliasDef(
- KeyAliasDef * /* def */,
- unsigned /* merge */,
- unsigned /* file_id */,
- AliasInfo ** /* info */
-);
-
-extern void ClearAliases(
- AliasInfo ** /* info */
-);
-
-extern Bool MergeAliases(
- AliasInfo ** /* into */,
- AliasInfo ** /* merge */,
- unsigned /* how_merge */
-);
-
-extern int ApplyAliases(
- XkbDescPtr /* xkb */,
- Bool /* toGeom */,
- AliasInfo ** /* info */
-);
+extern int HandleAliasDef(KeyAliasDef * /* def */ ,
+ unsigned /* merge */ ,
+ unsigned /* file_id */ ,
+ AliasInfo ** /* info */
+ );
+
+extern void ClearAliases(AliasInfo ** /* info */
+ );
+
+extern Bool MergeAliases(AliasInfo ** /* into */ ,
+ AliasInfo ** /* merge */ ,
+ unsigned /* how_merge */
+ );
+
+extern int ApplyAliases(XkbDescPtr /* xkb */ ,
+ Bool /* toGeom */ ,
+ AliasInfo ** /* info */
+ );
#endif /* ALIAS_H */
diff --git a/compat.c b/compat.c
index b1ab121..b20610b 100644
--- a/compat.c
+++ b/compat.c
@@ -33,9 +33,10 @@
#include "indicators.h"
#include "action.h"
-typedef struct _SymInterpInfo {
- CommonInfo defs;
- XkbSymInterpretRec interp;
+typedef struct _SymInterpInfo
+{
+ CommonInfo defs;
+ XkbSymInterpretRec interp;
} SymInterpInfo;
#define _SI_VirtualMod (1<<0)
@@ -44,26 +45,28 @@ typedef struct _SymInterpInfo {
#define _SI_LockingKey (1<<3)
#define _SI_LevelOneOnly (1<<4)
-typedef struct _GroupCompatInfo {
- unsigned char fileID;
- unsigned char merge;
- unsigned char real_mods;
- unsigned short vmods;
+typedef struct _GroupCompatInfo
+{
+ unsigned char fileID;
+ unsigned char merge;
+ unsigned char real_mods;
+ unsigned short vmods;
} GroupCompatInfo;
-typedef struct _CompatInfo {
- char * name;
- unsigned fileID;
- int errorCount;
- int nInterps;
- SymInterpInfo * interps;
- SymInterpInfo dflt;
- LEDInfo ledDflt;
- GroupCompatInfo groupCompat[XkbNumKbdGroups];
- LEDInfo * leds;
- VModInfo vmods;
- ActionInfo * act;
- XkbDescPtr xkb;
+typedef struct _CompatInfo
+{
+ char *name;
+ unsigned fileID;
+ int errorCount;
+ int nInterps;
+ SymInterpInfo *interps;
+ SymInterpInfo dflt;
+ LEDInfo ledDflt;
+ GroupCompatInfo groupCompat[XkbNumKbdGroups];
+ LEDInfo *leds;
+ VModInfo vmods;
+ ActionInfo *act;
+ XkbDescPtr xkb;
} CompatInfo;
/***====================================================================***/
@@ -76,234 +79,264 @@ typedef struct _CompatInfo {
/***====================================================================***/
static char *
-siText(SymInterpInfo * si,CompatInfo * info)
+siText(SymInterpInfo * si, CompatInfo * info)
{
-static char buf[128];
+ static char buf[128];
- if (si==&info->dflt) {
- sprintf(buf,"default");
+ if (si == &info->dflt)
+ {
+ sprintf(buf, "default");
}
- else {
- sprintf(buf,"%s+%s(%s)",XkbKeysymText(si->interp.sym,XkbMessage),
- XkbSIMatchText(si->interp.match,XkbMessage),
- XkbModMaskText(si->interp.mods,XkbMessage));
+ else
+ {
+ sprintf(buf, "%s+%s(%s)", XkbKeysymText(si->interp.sym, XkbMessage),
+ XkbSIMatchText(si->interp.match, XkbMessage),
+ XkbModMaskText(si->interp.mods, XkbMessage));
}
return buf;
}
static void
-InitCompatInfo(CompatInfo *info,XkbDescPtr xkb)
+InitCompatInfo(CompatInfo * info, XkbDescPtr xkb)
{
-register int i;
-
- info->xkb= xkb;
- info->name= NULL;
- info->fileID= 0;
- info->errorCount= 0;
- info->nInterps= 0;
- info->interps= NULL;
- info->act= NULL;
- info->dflt.defs.fileID= info->fileID;
- info->dflt.defs.defined= 0;
- info->dflt.defs.merge= MergeOverride;
- info->dflt.interp.flags= 0;
- info->dflt.interp.virtual_mod= XkbNoModifier;
- info->dflt.interp.act.type= XkbSA_NoAction;
- for (i=0;i<XkbAnyActionDataSize;i++) {
- info->dflt.interp.act.data[i]= 0;
- }
- ClearIndicatorMapInfo(xkb->dpy,&info->ledDflt);
- info->ledDflt.defs.fileID= info->fileID;
- info->ledDflt.defs.defined= 0;
- info->ledDflt.defs.merge= MergeOverride;
- bzero((char *)&info->groupCompat[0],XkbNumKbdGroups*sizeof(GroupCompatInfo));
- info->leds= NULL;
- InitVModInfo(&info->vmods,xkb);
+ register int i;
+
+ info->xkb = xkb;
+ info->name = NULL;
+ info->fileID = 0;
+ info->errorCount = 0;
+ info->nInterps = 0;
+ info->interps = NULL;
+ info->act = NULL;
+ info->dflt.defs.fileID = info->fileID;
+ info->dflt.defs.defined = 0;
+ info->dflt.defs.merge = MergeOverride;
+ info->dflt.interp.flags = 0;
+ info->dflt.interp.virtual_mod = XkbNoModifier;
+ info->dflt.interp.act.type = XkbSA_NoAction;
+ for (i = 0; i < XkbAnyActionDataSize; i++)
+ {
+ info->dflt.interp.act.data[i] = 0;
+ }
+ ClearIndicatorMapInfo(xkb->dpy, &info->ledDflt);
+ info->ledDflt.defs.fileID = info->fileID;
+ info->ledDflt.defs.defined = 0;
+ info->ledDflt.defs.merge = MergeOverride;
+ bzero((char *) &info->groupCompat[0],
+ XkbNumKbdGroups * sizeof(GroupCompatInfo));
+ info->leds = NULL;
+ InitVModInfo(&info->vmods, xkb);
return;
}
static void
-ClearCompatInfo(CompatInfo *info,XkbDescPtr xkb)
+ClearCompatInfo(CompatInfo * info, XkbDescPtr xkb)
{
-register int i;
-
- if (info->name!=NULL)
- uFree(info->name);
- info->name= NULL;
- info->dflt.defs.defined= 0;
- info->dflt.defs.merge= MergeAugment;
- info->dflt.interp.flags= 0;
- info->dflt.interp.virtual_mod= XkbNoModifier;
- info->dflt.interp.act.type= XkbSA_NoAction;
- for (i=0;i<XkbAnyActionDataSize;i++) {
- info->dflt.interp.act.data[i]= 0;
- }
- ClearIndicatorMapInfo(xkb->dpy,&info->ledDflt);
- info->nInterps= 0;
- info->interps= (SymInterpInfo *)ClearCommonInfo(&info->interps->defs);
- bzero((char *)&info->groupCompat[0],XkbNumKbdGroups*sizeof(GroupCompatInfo));
- info->leds= (LEDInfo *)ClearCommonInfo(&info->leds->defs);
+ register int i;
+
+ if (info->name != NULL)
+ uFree(info->name);
+ info->name = NULL;
+ info->dflt.defs.defined = 0;
+ info->dflt.defs.merge = MergeAugment;
+ info->dflt.interp.flags = 0;
+ info->dflt.interp.virtual_mod = XkbNoModifier;
+ info->dflt.interp.act.type = XkbSA_NoAction;
+ for (i = 0; i < XkbAnyActionDataSize; i++)
+ {
+ info->dflt.interp.act.data[i] = 0;
+ }
+ ClearIndicatorMapInfo(xkb->dpy, &info->ledDflt);
+ info->nInterps = 0;
+ info->interps = (SymInterpInfo *) ClearCommonInfo(&info->interps->defs);
+ bzero((char *) &info->groupCompat[0],
+ XkbNumKbdGroups * sizeof(GroupCompatInfo));
+ info->leds = (LEDInfo *) ClearCommonInfo(&info->leds->defs);
/* 3/30/94 (ef) -- XXX! Should free action info here */
- ClearVModInfo(&info->vmods,xkb);
+ ClearVModInfo(&info->vmods, xkb);
return;
}
static SymInterpInfo *
-NextInterp(CompatInfo *info)
+NextInterp(CompatInfo * info)
{
-SymInterpInfo * si;
+ SymInterpInfo *si;
- si= uTypedAlloc(SymInterpInfo);
- if (si) {
- bzero((char *)si,sizeof(SymInterpInfo));
- info->interps= (SymInterpInfo *)AddCommonInfo(&info->interps->defs,
- (CommonInfo *)si);
- info->nInterps++;
+ si = uTypedAlloc(SymInterpInfo);
+ if (si)
+ {
+ bzero((char *) si, sizeof(SymInterpInfo));
+ info->interps =
+ (SymInterpInfo *) AddCommonInfo(&info->interps->defs,
+ (CommonInfo *) si);
+ info->nInterps++;
}
return si;
}
static SymInterpInfo *
-FindMatchingInterp(CompatInfo *info,SymInterpInfo *new)
+FindMatchingInterp(CompatInfo * info, SymInterpInfo * new)
{
-SymInterpInfo * old;
-
- for (old= info->interps;old!=NULL;old=(SymInterpInfo *)old->defs.next) {
- if ((old->interp.sym==new->interp.sym)&&
- (old->interp.mods==new->interp.mods)&&
- (old->interp.match==new->interp.match)) {
- return old;
- }
+ SymInterpInfo *old;
+
+ for (old = info->interps; old != NULL;
+ old = (SymInterpInfo *) old->defs.next)
+ {
+ if ((old->interp.sym == new->interp.sym) &&
+ (old->interp.mods == new->interp.mods) &&
+ (old->interp.match == new->interp.match))
+ {
+ return old;
+ }
}
return NULL;
}
static Bool
-AddInterp(CompatInfo *info,SymInterpInfo *new)
+AddInterp(CompatInfo * info, SymInterpInfo * new)
{
-unsigned collide;
-SymInterpInfo * old;
-
- collide= 0;
- old= FindMatchingInterp(info,new);
- if (old!=NULL) {
- if (new->defs.merge==MergeReplace) {
- SymInterpInfo *next= (SymInterpInfo *)old->defs.next;
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple definitions for \"%s\"\n",siText(new,info));
- ACTION("Earlier interpretation ignored\n");
- }
- *old= *new;
- old->defs.next= &next->defs;
- return True;
- }
- if (UseNewField(_SI_VirtualMod,&old->defs,&new->defs,&collide)) {
- old->interp.virtual_mod= new->interp.virtual_mod;
- old->defs.defined|= _SI_VirtualMod;
- }
- if (UseNewField(_SI_Action,&old->defs,&new->defs,&collide)) {
- old->interp.act= new->interp.act;
- old->defs.defined|= _SI_Action;
- }
- if (UseNewField(_SI_AutoRepeat,&old->defs,&new->defs,&collide)) {
- old->interp.flags&= ~XkbSI_AutoRepeat;
- old->interp.flags|= (new->interp.flags&XkbSI_AutoRepeat);
- old->defs.defined|= _SI_AutoRepeat;
- }
- if (UseNewField(_SI_LockingKey,&old->defs,&new->defs,&collide)) {
- old->interp.flags&= ~XkbSI_LockingKey;
- old->interp.flags|= (new->interp.flags&XkbSI_LockingKey);
- old->defs.defined|= _SI_LockingKey;
- }
- if (UseNewField(_SI_LevelOneOnly,&old->defs,&new->defs,&collide)) {
- old->interp.match&= ~XkbSI_LevelOneOnly;
- old->interp.match|= (new->interp.match&XkbSI_LevelOneOnly);
- old->defs.defined|= _SI_LevelOneOnly;
- }
- if (collide) {
- WARN1("Multiple interpretations of \"%s\"\n",siText(new,info));
- ACTION1("Using %s definition for duplicate fields\n",
- (new->defs.merge!=MergeAugment?"last":"first"));
- }
- return True;
- }
- old= new;
- if ((new= NextInterp(info))==NULL)
- return False;
- *new= *old;
- new->defs.next= NULL;
+ unsigned collide;
+ SymInterpInfo *old;
+
+ collide = 0;
+ old = FindMatchingInterp(info, new);
+ if (old != NULL)
+ {
+ if (new->defs.merge == MergeReplace)
+ {
+ SymInterpInfo *next = (SymInterpInfo *) old->defs.next;
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Multiple definitions for \"%s\"\n", siText(new, info));
+ ACTION("Earlier interpretation ignored\n");
+ }
+ *old = *new;
+ old->defs.next = &next->defs;
+ return True;
+ }
+ if (UseNewField(_SI_VirtualMod, &old->defs, &new->defs, &collide))
+ {
+ old->interp.virtual_mod = new->interp.virtual_mod;
+ old->defs.defined |= _SI_VirtualMod;
+ }
+ if (UseNewField(_SI_Action, &old->defs, &new->defs, &collide))
+ {
+ old->interp.act = new->interp.act;
+ old->defs.defined |= _SI_Action;
+ }
+ if (UseNewField(_SI_AutoRepeat, &old->defs, &new->defs, &collide))
+ {
+ old->interp.flags &= ~XkbSI_AutoRepeat;
+ old->interp.flags |= (new->interp.flags & XkbSI_AutoRepeat);
+ old->defs.defined |= _SI_AutoRepeat;
+ }
+ if (UseNewField(_SI_LockingKey, &old->defs, &new->defs, &collide))
+ {
+ old->interp.flags &= ~XkbSI_LockingKey;
+ old->interp.flags |= (new->interp.flags & XkbSI_LockingKey);
+ old->defs.defined |= _SI_LockingKey;
+ }
+ if (UseNewField(_SI_LevelOneOnly, &old->defs, &new->defs, &collide))
+ {
+ old->interp.match &= ~XkbSI_LevelOneOnly;
+ old->interp.match |= (new->interp.match & XkbSI_LevelOneOnly);
+ old->defs.defined |= _SI_LevelOneOnly;
+ }
+ if (collide)
+ {
+ WARN1("Multiple interpretations of \"%s\"\n", siText(new, info));
+ ACTION1("Using %s definition for duplicate fields\n",
+ (new->defs.merge != MergeAugment ? "last" : "first"));
+ }
+ return True;
+ }
+ old = new;
+ if ((new = NextInterp(info)) == NULL)
+ return False;
+ *new = *old;
+ new->defs.next = NULL;
return True;
}
static Bool
-AddGroupCompat(CompatInfo *info,unsigned group,GroupCompatInfo *newGC)
+AddGroupCompat(CompatInfo * info, unsigned group, GroupCompatInfo * newGC)
{
-GroupCompatInfo * gc;
-unsigned merge;
-
- merge= newGC->merge;
- gc= &info->groupCompat[group];
- if (((gc->real_mods==newGC->real_mods)&&(gc->vmods==newGC->vmods))) {
- return True;
- }
- if (((gc->fileID==newGC->fileID)&&(warningLevel>0))||(warningLevel>9)) {
- WARN1("Compat map for group %d redefined\n",group+1);
- ACTION1("Using %s definition\n",(merge==MergeAugment?"old":"new"));
- }
- if (merge!=MergeAugment)
- *gc= *newGC;
+ GroupCompatInfo *gc;
+ unsigned merge;
+
+ merge = newGC->merge;
+ gc = &info->groupCompat[group];
+ if (((gc->real_mods == newGC->real_mods) && (gc->vmods == newGC->vmods)))
+ {
+ return True;
+ }
+ if (((gc->fileID == newGC->fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Compat map for group %d redefined\n", group + 1);
+ ACTION1("Using %s definition\n",
+ (merge == MergeAugment ? "old" : "new"));
+ }
+ if (merge != MergeAugment)
+ *gc = *newGC;
return True;
}
/***====================================================================***/
static Bool
-ResolveStateAndPredicate( ExprDef * expr,
- unsigned * pred_rtrn,
- unsigned * mods_rtrn,
- CompatInfo * info)
+ResolveStateAndPredicate(ExprDef * expr,
+ unsigned *pred_rtrn,
+ unsigned *mods_rtrn, CompatInfo * info)
{
-ExprResult result;
-
- if (expr==NULL) {
- *pred_rtrn= XkbSI_AnyOfOrNone;
- *mods_rtrn= ~0;
- return True;
- }
-
- *pred_rtrn= XkbSI_Exactly;
- if (expr->op==ExprActionDecl) {
- char *pred_txt= XkbAtomText(NULL,expr->value.action.name,XkbMessage);
- if (uStrCaseCmp(pred_txt,"noneof")==0)
- *pred_rtrn= XkbSI_NoneOf;
- else if (uStrCaseCmp(pred_txt,"anyofornone")==0)
- *pred_rtrn= XkbSI_AnyOfOrNone;
- else if (uStrCaseCmp(pred_txt,"anyof")==0)
- *pred_rtrn= XkbSI_AnyOf;
- else if (uStrCaseCmp(pred_txt,"allof")==0)
- *pred_rtrn= XkbSI_AllOf;
- else if (uStrCaseCmp(pred_txt,"exactly")==0)
- *pred_rtrn= XkbSI_Exactly;
- else {
- ERROR1("Illegal modifier predicate \"%s\"\n",pred_txt);
- ACTION("Ignored\n");
- return False;
- }
- expr= expr->value.action.args;
- }
- else if (expr->op==ExprIdent) {
- char *pred_txt= XkbAtomText(NULL,expr->value.str,XkbMessage);
- if ((pred_txt)&&(uStrCaseCmp(pred_txt,"any")==0)) {
- *pred_rtrn= XkbSI_AnyOf;
- *mods_rtrn= 0xff;
- return True;
- }
- }
-
- if (ExprResolveModMask(expr,&result,NULL,NULL)) {
- *mods_rtrn= result.uval;
- return True;
+ ExprResult result;
+
+ if (expr == NULL)
+ {
+ *pred_rtrn = XkbSI_AnyOfOrNone;
+ *mods_rtrn = ~0;
+ return True;
+ }
+
+ *pred_rtrn = XkbSI_Exactly;
+ if (expr->op == ExprActionDecl)
+ {
+ char *pred_txt =
+ XkbAtomText(NULL, expr->value.action.name, XkbMessage);
+ if (uStrCaseCmp(pred_txt, "noneof") == 0)
+ *pred_rtrn = XkbSI_NoneOf;
+ else if (uStrCaseCmp(pred_txt, "anyofornone") == 0)
+ *pred_rtrn = XkbSI_AnyOfOrNone;
+ else if (uStrCaseCmp(pred_txt, "anyof") == 0)
+ *pred_rtrn = XkbSI_AnyOf;
+ else if (uStrCaseCmp(pred_txt, "allof") == 0)
+ *pred_rtrn = XkbSI_AllOf;
+ else if (uStrCaseCmp(pred_txt, "exactly") == 0)
+ *pred_rtrn = XkbSI_Exactly;
+ else
+ {
+ ERROR1("Illegal modifier predicate \"%s\"\n", pred_txt);
+ ACTION("Ignored\n");
+ return False;
+ }
+ expr = expr->value.action.args;
+ }
+ else if (expr->op == ExprIdent)
+ {
+ char *pred_txt = XkbAtomText(NULL, expr->value.str, XkbMessage);
+ if ((pred_txt) && (uStrCaseCmp(pred_txt, "any") == 0))
+ {
+ *pred_rtrn = XkbSI_AnyOf;
+ *mods_rtrn = 0xff;
+ return True;
+ }
+ }
+
+ if (ExprResolveModMask(expr, &result, NULL, NULL))
+ {
+ *mods_rtrn = result.uval;
+ return True;
}
return False;
}
@@ -311,468 +344,535 @@ ExprResult result;
/***====================================================================***/
static void
-MergeIncludedCompatMaps( CompatInfo * into,
- CompatInfo * from,
- unsigned merge)
+MergeIncludedCompatMaps(CompatInfo * into, CompatInfo * from, unsigned merge)
{
-SymInterpInfo * si;
-LEDInfo * led,*rtrn,*next;
-GroupCompatInfo * gcm;
-register int i;
-
- if (from->errorCount>0) {
- into->errorCount+= from->errorCount;
- return;
- }
- if (into->name==NULL) {
- into->name= from->name;
- from->name= NULL;
- }
- for (si=from->interps;si;si=(SymInterpInfo *)si->defs.next) {
- if (merge!=MergeDefault)
- si->defs.merge= merge;
- if (!AddInterp(into,si))
- into->errorCount++;
- }
- for (i=0,gcm=&from->groupCompat[0];i<XkbNumKbdGroups;i++,gcm++) {
- if (merge!=MergeDefault)
- gcm->merge= merge;
- if (!AddGroupCompat(into,i,gcm))
- into->errorCount++;
- }
- for (led=from->leds;led!=NULL;led=next) {
- next= (LEDInfo *)led->defs.next;
- if (merge!=MergeDefault)
- led->defs.merge= merge;
- rtrn= AddIndicatorMap(into->leds,led);
- if (rtrn!=NULL)
- into->leds= rtrn;
- else into->errorCount++;
+ SymInterpInfo *si;
+ LEDInfo *led, *rtrn, *next;
+ GroupCompatInfo *gcm;
+ register int i;
+
+ if (from->errorCount > 0)
+ {
+ into->errorCount += from->errorCount;
+ return;
+ }
+ if (into->name == NULL)
+ {
+ into->name = from->name;
+ from->name = NULL;
+ }
+ for (si = from->interps; si; si = (SymInterpInfo *) si->defs.next)
+ {
+ if (merge != MergeDefault)
+ si->defs.merge = merge;
+ if (!AddInterp(into, si))
+ into->errorCount++;
+ }
+ for (i = 0, gcm = &from->groupCompat[0]; i < XkbNumKbdGroups; i++, gcm++)
+ {
+ if (merge != MergeDefault)
+ gcm->merge = merge;
+ if (!AddGroupCompat(into, i, gcm))
+ into->errorCount++;
+ }
+ for (led = from->leds; led != NULL; led = next)
+ {
+ next = (LEDInfo *) led->defs.next;
+ if (merge != MergeDefault)
+ led->defs.merge = merge;
+ rtrn = AddIndicatorMap(into->leds, led);
+ if (rtrn != NULL)
+ into->leds = rtrn;
+ else
+ into->errorCount++;
}
return;
}
-typedef void (*FileHandler)(
- XkbFile * /* rtrn */,
- XkbDescPtr /* xkb */,
- unsigned /* merge */,
- CompatInfo * /* info */
-);
+typedef void (*FileHandler) (XkbFile * /* rtrn */ ,
+ XkbDescPtr /* xkb */ ,
+ unsigned /* merge */ ,
+ CompatInfo * /* info */
+ );
static Bool
-HandleIncludeCompatMap( IncludeStmt * stmt,
- XkbDescPtr xkb,
- CompatInfo * info,
- FileHandler hndlr)
+HandleIncludeCompatMap(IncludeStmt * stmt,
+ XkbDescPtr xkb, CompatInfo * info, FileHandler hndlr)
{
-unsigned newMerge;
-XkbFile * rtrn;
-CompatInfo included;
-Bool haveSelf;
-
- haveSelf= False;
- if ((stmt->file==NULL)&&(stmt->map==NULL)) {
- haveSelf= True;
- included= *info;
- bzero(info,sizeof(CompatInfo));
- }
- else if (ProcessIncludeFile(stmt,XkmCompatMapIndex,&rtrn,&newMerge)) {
- InitCompatInfo(&included,xkb);
- included.fileID= rtrn->id;
- included.dflt= info->dflt;
- included.dflt.defs.fileID= rtrn->id;
- included.dflt.defs.merge= newMerge;
- included.ledDflt.defs.fileID= rtrn->id;
- included.ledDflt.defs.merge= newMerge;
- included.act= info->act;
- (*hndlr)(rtrn,xkb,MergeOverride,&included);
- if (stmt->stmt!=NULL) {
- if (included.name!=NULL)
- uFree(included.name);
- included.name= stmt->stmt;
- stmt->stmt= NULL;
- }
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- if ((stmt->next!=NULL)&&(included.errorCount<1)) {
- IncludeStmt * next;
- unsigned op;
- CompatInfo next_incl;
-
- for (next=stmt->next;next!=NULL;next=next->next) {
- if ((next->file==NULL)&&(next->map==NULL)) {
- haveSelf= True;
- MergeIncludedCompatMaps(&included,info,next->merge);
- ClearCompatInfo(info,xkb);
- }
- else if (ProcessIncludeFile(next,XkmCompatMapIndex,&rtrn,&op)) {
- InitCompatInfo(&next_incl,xkb);
- next_incl.fileID= rtrn->id;
- next_incl.dflt= info->dflt;
- next_incl.dflt.defs.fileID= rtrn->id;
- next_incl.dflt.defs.merge= op;
- next_incl.ledDflt.defs.fileID= rtrn->id;
- next_incl.ledDflt.defs.merge= op;
- next_incl.act= info->act;
- (*hndlr)(rtrn,xkb,MergeOverride,&next_incl);
- MergeIncludedCompatMaps(&included,&next_incl,op);
- ClearCompatInfo(&next_incl,xkb);
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- }
+ unsigned newMerge;
+ XkbFile *rtrn;
+ CompatInfo included;
+ Bool haveSelf;
+
+ haveSelf = False;
+ if ((stmt->file == NULL) && (stmt->map == NULL))
+ {
+ haveSelf = True;
+ included = *info;
+ bzero(info, sizeof(CompatInfo));
+ }
+ else if (ProcessIncludeFile(stmt, XkmCompatMapIndex, &rtrn, &newMerge))
+ {
+ InitCompatInfo(&included, xkb);
+ included.fileID = rtrn->id;
+ included.dflt = info->dflt;
+ included.dflt.defs.fileID = rtrn->id;
+ included.dflt.defs.merge = newMerge;
+ included.ledDflt.defs.fileID = rtrn->id;
+ included.ledDflt.defs.merge = newMerge;
+ included.act = info->act;
+ (*hndlr) (rtrn, xkb, MergeOverride, &included);
+ if (stmt->stmt != NULL)
+ {
+ if (included.name != NULL)
+ uFree(included.name);
+ included.name = stmt->stmt;
+ stmt->stmt = NULL;
+ }
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ if ((stmt->next != NULL) && (included.errorCount < 1))
+ {
+ IncludeStmt *next;
+ unsigned op;
+ CompatInfo next_incl;
+
+ for (next = stmt->next; next != NULL; next = next->next)
+ {
+ if ((next->file == NULL) && (next->map == NULL))
+ {
+ haveSelf = True;
+ MergeIncludedCompatMaps(&included, info, next->merge);
+ ClearCompatInfo(info, xkb);
+ }
+ else if (ProcessIncludeFile(next, XkmCompatMapIndex, &rtrn, &op))
+ {
+ InitCompatInfo(&next_incl, xkb);
+ next_incl.fileID = rtrn->id;
+ next_incl.dflt = info->dflt;
+ next_incl.dflt.defs.fileID = rtrn->id;
+ next_incl.dflt.defs.merge = op;
+ next_incl.ledDflt.defs.fileID = rtrn->id;
+ next_incl.ledDflt.defs.merge = op;
+ next_incl.act = info->act;
+ (*hndlr) (rtrn, xkb, MergeOverride, &next_incl);
+ MergeIncludedCompatMaps(&included, &next_incl, op);
+ ClearCompatInfo(&next_incl, xkb);
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ }
}
if (haveSelf)
- *info= included;
- else {
- MergeIncludedCompatMaps(info,&included,newMerge);
- ClearCompatInfo(&included,xkb);
+ *info = included;
+ else
+ {
+ MergeIncludedCompatMaps(info, &included, newMerge);
+ ClearCompatInfo(&included, xkb);
}
- return (info->errorCount==0);
+ return (info->errorCount == 0);
}
static LookupEntry useModMapValues[] = {
- { "levelone", 1 },
- { "level1", 1 },
- { "anylevel", 0 },
- { "any", 0 },
- { NULL, 0 }
+ {"levelone", 1},
+ {"level1", 1},
+ {"anylevel", 0},
+ {"any", 0},
+ {NULL, 0}
};
static int
-SetInterpField( SymInterpInfo * si,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- CompatInfo * info)
+SetInterpField(SymInterpInfo * si,
+ XkbDescPtr xkb,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, CompatInfo * info)
{
-int ok= 1;
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"action")==0) {
- if (arrayNdx!=NULL)
- return ReportSINotArray(si,field,info);
- ok= HandleActionDef(value,xkb,&si->interp.act,si->defs.merge,info->act);
- if (ok)
- si->defs.defined|= _SI_Action;
- }
- else if ((uStrCaseCmp(field,"virtualmodifier")==0)||
- (uStrCaseCmp(field,"virtualmod")==0)) {
- if (arrayNdx!=NULL)
- return ReportSINotArray(si,field,info);
- ok= ResolveVirtualModifier(value,&tmp,&info->vmods);
- if (ok) {
- si->interp.virtual_mod= tmp.uval;
- si->defs.defined|= _SI_VirtualMod;
- }
- else return ReportSIBadType(si,field,"virtual modifier",info);
- }
- else if (uStrCaseCmp(field,"repeat")==0) {
- if (arrayNdx!=NULL)
- return ReportSINotArray(si,field,info);
- ok= ExprResolveBoolean(value,&tmp,NULL,NULL);
- if (ok) {
- if (tmp.uval) si->interp.flags|= XkbSI_AutoRepeat;
- else si->interp.flags&= ~XkbSI_AutoRepeat;
- si->defs.defined|= _SI_AutoRepeat;
- }
- else return ReportSIBadType(si,field,"boolean",info);
- }
- else if (uStrCaseCmp(field,"locking")==0) {
- if (arrayNdx!=NULL)
- return ReportSINotArray(si,field,info);
- ok= ExprResolveBoolean(value,&tmp,NULL,NULL);
- if (ok) {
- if (tmp.uval) si->interp.flags|= XkbSI_LockingKey;
- else si->interp.flags&= ~XkbSI_LockingKey;
- si->defs.defined|= _SI_LockingKey;
- }
- else return ReportSIBadType(si,field,"boolean",info);
- }
- else if ((uStrCaseCmp(field,"usemodmap")==0)||
- (uStrCaseCmp(field,"usemodmapmods")==0)) {
- if (arrayNdx!=NULL)
- return ReportSINotArray(si,field,info);
- ok= ExprResolveEnum(value,&tmp,useModMapValues);
- if (ok) {
- if (tmp.uval) si->interp.match|= XkbSI_LevelOneOnly;
- else si->interp.match&= ~XkbSI_LevelOneOnly;
- si->defs.defined|= _SI_LevelOneOnly;
- }
- else return ReportSIBadType(si,field,"level specification",info);
- }
- else {
- ok= ReportBadField("symbol interpretation",field,siText(si,info));
+ int ok = 1;
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "action") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportSINotArray(si, field, info);
+ ok = HandleActionDef(value, xkb, &si->interp.act, si->defs.merge,
+ info->act);
+ if (ok)
+ si->defs.defined |= _SI_Action;
+ }
+ else if ((uStrCaseCmp(field, "virtualmodifier") == 0) ||
+ (uStrCaseCmp(field, "virtualmod") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportSINotArray(si, field, info);
+ ok = ResolveVirtualModifier(value, &tmp, &info->vmods);
+ if (ok)
+ {
+ si->interp.virtual_mod = tmp.uval;
+ si->defs.defined |= _SI_VirtualMod;
+ }
+ else
+ return ReportSIBadType(si, field, "virtual modifier", info);
+ }
+ else if (uStrCaseCmp(field, "repeat") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportSINotArray(si, field, info);
+ ok = ExprResolveBoolean(value, &tmp, NULL, NULL);
+ if (ok)
+ {
+ if (tmp.uval)
+ si->interp.flags |= XkbSI_AutoRepeat;
+ else
+ si->interp.flags &= ~XkbSI_AutoRepeat;
+ si->defs.defined |= _SI_AutoRepeat;
+ }
+ else
+ return ReportSIBadType(si, field, "boolean", info);
+ }
+ else if (uStrCaseCmp(field, "locking") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportSINotArray(si, field, info);
+ ok = ExprResolveBoolean(value, &tmp, NULL, NULL);
+ if (ok)
+ {
+ if (tmp.uval)
+ si->interp.flags |= XkbSI_LockingKey;
+ else
+ si->interp.flags &= ~XkbSI_LockingKey;
+ si->defs.defined |= _SI_LockingKey;
+ }
+ else
+ return ReportSIBadType(si, field, "boolean", info);
+ }
+ else if ((uStrCaseCmp(field, "usemodmap") == 0) ||
+ (uStrCaseCmp(field, "usemodmapmods") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportSINotArray(si, field, info);
+ ok = ExprResolveEnum(value, &tmp, useModMapValues);
+ if (ok)
+ {
+ if (tmp.uval)
+ si->interp.match |= XkbSI_LevelOneOnly;
+ else
+ si->interp.match &= ~XkbSI_LevelOneOnly;
+ si->defs.defined |= _SI_LevelOneOnly;
+ }
+ else
+ return ReportSIBadType(si, field, "level specification", info);
+ }
+ else
+ {
+ ok = ReportBadField("symbol interpretation", field, siText(si, info));
}
return ok;
}
-LookupEntry groupNames[]= {
- { "group1", 0x01 },
- { "group2", 0x02 },
- { "group3", 0x04 },
- { "group4", 0x08 },
- { "group5", 0x10 },
- { "group6", 0x20 },
- { "group7", 0x40 },
- { "group8", 0x80 },
- { "none", 0x00 },
- { "all", 0xff },
- { NULL, 0 }
+LookupEntry groupNames[] = {
+ {"group1", 0x01}
+ ,
+ {"group2", 0x02}
+ ,
+ {"group3", 0x04}
+ ,
+ {"group4", 0x08}
+ ,
+ {"group5", 0x10}
+ ,
+ {"group6", 0x20}
+ ,
+ {"group7", 0x40}
+ ,
+ {"group8", 0x80}
+ ,
+ {"none", 0x00}
+ ,
+ {"all", 0xff}
+ ,
+ {NULL, 0}
};
static int
-HandleInterpVar(VarDef *stmt,XkbDescPtr xkb,CompatInfo *info)
+HandleInterpVar(VarDef * stmt, XkbDescPtr xkb, CompatInfo * info)
{
-ExprResult elem,field;
-ExprDef * ndx;
-
- if (ExprResolveLhs(stmt->name,&elem,&field,&ndx)==0)
- return 0; /* internal error, already reported */
- if (elem.str&&(uStrCaseCmp(elem.str,"interpret")==0))
- return SetInterpField(&info->dflt,xkb,field.str,ndx,stmt->value,info);
- if (elem.str&&(uStrCaseCmp(elem.str,"indicator")==0)) {
- return SetIndicatorMapField(&info->ledDflt,xkb,field.str,ndx,
- stmt->value);
- }
- return SetActionField(xkb,elem.str,field.str,ndx,stmt->value,&info->act);
+ ExprResult elem, field;
+ ExprDef *ndx;
+
+ if (ExprResolveLhs(stmt->name, &elem, &field, &ndx) == 0)
+ return 0; /* internal error, already reported */
+ if (elem.str && (uStrCaseCmp(elem.str, "interpret") == 0))
+ return SetInterpField(&info->dflt, xkb, field.str, ndx, stmt->value,
+ info);
+ if (elem.str && (uStrCaseCmp(elem.str, "indicator") == 0))
+ {
+ return SetIndicatorMapField(&info->ledDflt, xkb, field.str, ndx,
+ stmt->value);
+ }
+ return SetActionField(xkb, elem.str, field.str, ndx, stmt->value,
+ &info->act);
}
static int
-HandleInterpBody(VarDef *def,XkbDescPtr xkb,SymInterpInfo *si,CompatInfo *info)
+HandleInterpBody(VarDef * def, XkbDescPtr xkb, SymInterpInfo * si,
+ CompatInfo * info)
{
-int ok= 1;
-ExprResult tmp,field;
-ExprDef * arrayNdx;
-
- for (;def!=NULL;def= (VarDef *)def->common.next) {
- if ((def->name)&&(def->name->type==ExprFieldRef)) {
- ok= HandleInterpVar(def,xkb,info);
- continue;
- }
- ok= ExprResolveLhs(def->name,&tmp,&field,&arrayNdx);
- if (ok)
- ok= SetInterpField(si,xkb,field.str,arrayNdx,def->value,info);
+ int ok = 1;
+ ExprResult tmp, field;
+ ExprDef *arrayNdx;
+
+ for (; def != NULL; def = (VarDef *) def->common.next)
+ {
+ if ((def->name) && (def->name->type == ExprFieldRef))
+ {
+ ok = HandleInterpVar(def, xkb, info);
+ continue;
+ }
+ ok = ExprResolveLhs(def->name, &tmp, &field, &arrayNdx);
+ if (ok)
+ ok = SetInterpField(si, xkb, field.str, arrayNdx, def->value,
+ info);
}
return ok;
}
static int
-HandleInterpDef(InterpDef *def,XkbDescPtr xkb,unsigned merge,CompatInfo *info)
+HandleInterpDef(InterpDef * def, XkbDescPtr xkb, unsigned merge,
+ CompatInfo * info)
{
-unsigned pred,mods;
-SymInterpInfo si;
-
- if (!ResolveStateAndPredicate(def->match,&pred,&mods,info)) {
- ERROR("Couldn't determine matching modifiers\n");
- ACTION("Symbol interpretation ignored\n");
- return False;
- }
- if (def->merge!=MergeDefault)
- merge= def->merge;
-
- si= info->dflt;
- si.defs.merge= merge;
- si.interp.sym= def->sym;
- si.interp.match= pred & XkbSI_OpMask;
- si.interp.mods= mods;
- if (!HandleInterpBody(def->def,xkb,&si,info)) {
- info->errorCount++;
- return False;
- }
-
- if (!AddInterp(info,&si)) {
- info->errorCount++;
- return False;
+ unsigned pred, mods;
+ SymInterpInfo si;
+
+ if (!ResolveStateAndPredicate(def->match, &pred, &mods, info))
+ {
+ ERROR("Couldn't determine matching modifiers\n");
+ ACTION("Symbol interpretation ignored\n");
+ return False;
+ }
+ if (def->merge != MergeDefault)
+ merge = def->merge;
+
+ si = info->dflt;
+ si.defs.merge = merge;
+ si.interp.sym = def->sym;
+ si.interp.match = pred & XkbSI_OpMask;
+ si.interp.mods = mods;
+ if (!HandleInterpBody(def->def, xkb, &si, info))
+ {
+ info->errorCount++;
+ return False;
+ }
+
+ if (!AddInterp(info, &si))
+ {
+ info->errorCount++;
+ return False;
}
return True;
}
static int
-HandleGroupCompatDef( GroupCompatDef * def,
- XkbDescPtr xkb,
- unsigned merge,
- CompatInfo * info)
+HandleGroupCompatDef(GroupCompatDef * def,
+ XkbDescPtr xkb, unsigned merge, CompatInfo * info)
{
-ExprResult val;
-GroupCompatInfo tmp;
-
- if (def->merge!=MergeDefault)
- merge= def->merge;
- if (!XkbIsLegalGroup(def->group-1)) {
- ERROR1("Keyboard group must be in the range 1..%d\n",XkbNumKbdGroups+1);
- ACTION1("Compatibility map for illegal group %d ignored\n",def->group);
- return False;
- }
- tmp.fileID= info->fileID;
- tmp.merge= merge;
- if (!ExprResolveModMask(def->def,&val,LookupVModMask,(XPointer)xkb)) {
- ERROR("Expected a modifier mask in group compatibility definition\n");
- ACTION1("Ignoring illegal compatibility map for group %d\n",def->group);
- return False;
- }
- tmp.real_mods= val.uval&0xff;
- tmp.vmods= (val.uval>>8)&0xffff;
- return AddGroupCompat(info,def->group-1,&tmp);
+ ExprResult val;
+ GroupCompatInfo tmp;
+
+ if (def->merge != MergeDefault)
+ merge = def->merge;
+ if (!XkbIsLegalGroup(def->group - 1))
+ {
+ ERROR1("Keyboard group must be in the range 1..%d\n",
+ XkbNumKbdGroups + 1);
+ ACTION1("Compatibility map for illegal group %d ignored\n",
+ def->group);
+ return False;
+ }
+ tmp.fileID = info->fileID;
+ tmp.merge = merge;
+ if (!ExprResolveModMask(def->def, &val, LookupVModMask, (XPointer) xkb))
+ {
+ ERROR("Expected a modifier mask in group compatibility definition\n");
+ ACTION1("Ignoring illegal compatibility map for group %d\n",
+ def->group);
+ return False;
+ }
+ tmp.real_mods = val.uval & 0xff;
+ tmp.vmods = (val.uval >> 8) & 0xffff;
+ return AddGroupCompat(info, def->group - 1, &tmp);
}
static void
-HandleCompatMapFile( XkbFile * file,
- XkbDescPtr xkb,
- unsigned merge,
- CompatInfo * info)
+HandleCompatMapFile(XkbFile * file,
+ XkbDescPtr xkb, unsigned merge, CompatInfo * info)
{
-ParseCommon *stmt;
-
- if (merge==MergeDefault)
- merge= MergeAugment;
- info->name= uStringDup(file->name);
- stmt= file->defs;
- while (stmt) {
- switch (stmt->stmtType) {
- case StmtInclude:
- if (!HandleIncludeCompatMap((IncludeStmt *)stmt,xkb,info,
- HandleCompatMapFile))
- info->errorCount++;
- break;
- case StmtInterpDef:
- if (!HandleInterpDef((InterpDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtGroupCompatDef:
- if (!HandleGroupCompatDef((GroupCompatDef*)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtIndicatorMapDef:
- {
- LEDInfo *rtrn;
- rtrn= HandleIndicatorMapDef((IndicatorMapDef *)stmt,xkb,
- &info->ledDflt,info->leds,
- merge);
- if (rtrn!=NULL)
- info->leds= rtrn;
- else info->errorCount++;
- }
- break;
- case StmtVarDef:
- if (!HandleInterpVar((VarDef *)stmt,xkb,info))
- info->errorCount++;
- break;
- case StmtVModDef:
- if (!HandleVModDef((VModDef *)stmt,merge,&info->vmods))
- info->errorCount++;
- break;
- case StmtKeycodeDef:
- ERROR("Interpretation files may not include other types\n");
- ACTION("Ignoring definition of key name\n");
- info->errorCount++;
- break;
- default:
- WSGO1("Unexpected statement type %d in HandleCompatMapFile\n",
- stmt->stmtType);
- break;
- }
- stmt= stmt->next;
- if (info->errorCount>10) {
+ ParseCommon *stmt;
+
+ if (merge == MergeDefault)
+ merge = MergeAugment;
+ info->name = uStringDup(file->name);
+ stmt = file->defs;
+ while (stmt)
+ {
+ switch (stmt->stmtType)
+ {
+ case StmtInclude:
+ if (!HandleIncludeCompatMap((IncludeStmt *) stmt, xkb, info,
+ HandleCompatMapFile))
+ info->errorCount++;
+ break;
+ case StmtInterpDef:
+ if (!HandleInterpDef((InterpDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtGroupCompatDef:
+ if (!HandleGroupCompatDef
+ ((GroupCompatDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtIndicatorMapDef:
+ {
+ LEDInfo *rtrn;
+ rtrn = HandleIndicatorMapDef((IndicatorMapDef *) stmt, xkb,
+ &info->ledDflt, info->leds, merge);
+ if (rtrn != NULL)
+ info->leds = rtrn;
+ else
+ info->errorCount++;
+ }
+ break;
+ case StmtVarDef:
+ if (!HandleInterpVar((VarDef *) stmt, xkb, info))
+ info->errorCount++;
+ break;
+ case StmtVModDef:
+ if (!HandleVModDef((VModDef *) stmt, merge, &info->vmods))
+ info->errorCount++;
+ break;
+ case StmtKeycodeDef:
+ ERROR("Interpretation files may not include other types\n");
+ ACTION("Ignoring definition of key name\n");
+ info->errorCount++;
+ break;
+ default:
+ WSGO1("Unexpected statement type %d in HandleCompatMapFile\n",
+ stmt->stmtType);
+ break;
+ }
+ stmt = stmt->next;
+ if (info->errorCount > 10)
+ {
#ifdef NOISY
- ERROR("Too many errors\n");
+ ERROR("Too many errors\n");
#endif
- ACTION1("Abandoning compatibility map \"%s\"\n",file->topName);
- break;
- }
+ ACTION1("Abandoning compatibility map \"%s\"\n", file->topName);
+ break;
+ }
}
return;
}
static void
-CopyInterps( CompatInfo * info,
- XkbCompatMapPtr compat,
- Bool needSymbol,
- unsigned pred)
+CopyInterps(CompatInfo * info,
+ XkbCompatMapPtr compat, Bool needSymbol, unsigned pred)
{
-SymInterpInfo * si;
-
- for (si=info->interps;si;si=(SymInterpInfo *)si->defs.next) {
- if (((si->interp.match&XkbSI_OpMask)!=pred)||
- (needSymbol&&(si->interp.sym==NoSymbol))||
- ((!needSymbol)&&(si->interp.sym!=NoSymbol)))
- continue;
- if (compat->num_si>=compat->size_si) {
- WSGO("No room to merge symbol interpretations\n");
- ACTION("Symbol interpretations lost\n");
- return;
- }
- compat->sym_interpret[compat->num_si++]= si->interp;
+ SymInterpInfo *si;
+
+ for (si = info->interps; si; si = (SymInterpInfo *) si->defs.next)
+ {
+ if (((si->interp.match & XkbSI_OpMask) != pred) ||
+ (needSymbol && (si->interp.sym == NoSymbol)) ||
+ ((!needSymbol) && (si->interp.sym != NoSymbol)))
+ continue;
+ if (compat->num_si >= compat->size_si)
+ {
+ WSGO("No room to merge symbol interpretations\n");
+ ACTION("Symbol interpretations lost\n");
+ return;
+ }
+ compat->sym_interpret[compat->num_si++] = si->interp;
}
return;
}
Bool
-CompileCompatMap( XkbFile * file,
- XkbFileInfo * result,
- unsigned merge,
- LEDInfo ** unboundLEDs)
+CompileCompatMap(XkbFile * file,
+ XkbFileInfo * result, unsigned merge, LEDInfo ** unboundLEDs)
{
-int i;
-CompatInfo info;
-XkbDescPtr xkb;
-GroupCompatInfo * gcm;
-
- xkb= result->xkb;
- InitCompatInfo(&info,xkb);
- info.dflt.defs.merge= merge;
- info.ledDflt.defs.merge= merge;
- HandleCompatMapFile(file,xkb,merge,&info);
-
- if (info.errorCount==0) {
- int size;
- if (XkbAllocCompatMap(xkb,XkbAllCompatMask,info.nInterps)!=Success) {
- WSGO("Couldn't allocate compatibility map\n");
- ACTION("Exiting\n");
- return False;
- }
- if (info.name!=NULL) {
- if (XkbAllocNames(xkb,XkbCompatNameMask,0,0)==Success)
- xkb->names->compat= XkbInternAtom(xkb->dpy,info.name,False);
- else {
- WSGO("Couldn't allocate space for compat name\n");
- ACTION2("Name \"%s\" (from %s) NOT assigned\n",scanFile,
- info.name);
- }
- }
- size= info.nInterps*sizeof(XkbSymInterpretRec);
- if (size>0) {
- CopyInterps(&info,xkb->compat,True,XkbSI_Exactly);
- CopyInterps(&info,xkb->compat,True,XkbSI_AllOf|XkbSI_NoneOf);
- CopyInterps(&info,xkb->compat,True,XkbSI_AnyOf);
- CopyInterps(&info,xkb->compat,True,XkbSI_AnyOfOrNone);
- CopyInterps(&info,xkb->compat,False,XkbSI_Exactly);
- CopyInterps(&info,xkb->compat,False,XkbSI_AllOf|XkbSI_NoneOf);
- CopyInterps(&info,xkb->compat,False,XkbSI_AnyOf);
- CopyInterps(&info,xkb->compat,False,XkbSI_AnyOfOrNone);
- }
- for (i=0,gcm=&info.groupCompat[0];i<XkbNumKbdGroups;i++,gcm++) {
- if ((gcm->fileID!=0)||(gcm->real_mods!=0)||(gcm->vmods!=0)) {
- xkb->compat->groups[i].mask= gcm->real_mods;
- xkb->compat->groups[i].real_mods= gcm->real_mods;
- xkb->compat->groups[i].vmods= gcm->vmods;
- }
- }
- if (info.leds!=NULL) {
- if (!CopyIndicatorMapDefs(result,info.leds,unboundLEDs))
- info.errorCount++;
- info.leds= NULL;
- }
- ClearCompatInfo(&info,xkb);
- return True;
- }
- if (info.interps!=NULL)
- uFree(info.interps);
+ int i;
+ CompatInfo info;
+ XkbDescPtr xkb;
+ GroupCompatInfo *gcm;
+
+ xkb = result->xkb;
+ InitCompatInfo(&info, xkb);
+ info.dflt.defs.merge = merge;
+ info.ledDflt.defs.merge = merge;
+ HandleCompatMapFile(file, xkb, merge, &info);
+
+ if (info.errorCount == 0)
+ {
+ int size;
+ if (XkbAllocCompatMap(xkb, XkbAllCompatMask, info.nInterps) !=
+ Success)
+ {
+ WSGO("Couldn't allocate compatibility map\n");
+ ACTION("Exiting\n");
+ return False;
+ }
+ if (info.name != NULL)
+ {
+ if (XkbAllocNames(xkb, XkbCompatNameMask, 0, 0) == Success)
+ xkb->names->compat =
+ XkbInternAtom(xkb->dpy, info.name, False);
+ else
+ {
+ WSGO("Couldn't allocate space for compat name\n");
+ ACTION2("Name \"%s\" (from %s) NOT assigned\n",
+ scanFile, info.name);
+ }
+ }
+ size = info.nInterps * sizeof(XkbSymInterpretRec);
+ if (size > 0)
+ {
+ CopyInterps(&info, xkb->compat, True, XkbSI_Exactly);
+ CopyInterps(&info, xkb->compat, True, XkbSI_AllOf | XkbSI_NoneOf);
+ CopyInterps(&info, xkb->compat, True, XkbSI_AnyOf);
+ CopyInterps(&info, xkb->compat, True, XkbSI_AnyOfOrNone);
+ CopyInterps(&info, xkb->compat, False, XkbSI_Exactly);
+ CopyInterps(&info, xkb->compat, False,
+ XkbSI_AllOf | XkbSI_NoneOf);
+ CopyInterps(&info, xkb->compat, False, XkbSI_AnyOf);
+ CopyInterps(&info, xkb->compat, False, XkbSI_AnyOfOrNone);
+ }
+ for (i = 0, gcm = &info.groupCompat[0]; i < XkbNumKbdGroups;
+ i++, gcm++)
+ {
+ if ((gcm->fileID != 0) || (gcm->real_mods != 0)
+ || (gcm->vmods != 0))
+ {
+ xkb->compat->groups[i].mask = gcm->real_mods;
+ xkb->compat->groups[i].real_mods = gcm->real_mods;
+ xkb->compat->groups[i].vmods = gcm->vmods;
+ }
+ }
+ if (info.leds != NULL)
+ {
+ if (!CopyIndicatorMapDefs(result, info.leds, unboundLEDs))
+ info.errorCount++;
+ info.leds = NULL;
+ }
+ ClearCompatInfo(&info, xkb);
+ return True;
+ }
+ if (info.interps != NULL)
+ uFree(info.interps);
return False;
}
diff --git a/expr.c b/expr.c
index a1b69af..60ea443 100644
--- a/expr.c
+++ b/expr.c
@@ -35,789 +35,868 @@
char *
exprOpText(unsigned type)
{
-static char buf[32];
-
- switch (type) {
- case ExprValue:
- strcpy(buf,"literal");
- break;
- case ExprIdent:
- strcpy(buf,"identifier");
- break;
- case ExprActionDecl:
- strcpy(buf,"action declaration");
- break;
- case ExprFieldRef:
- strcpy(buf,"field reference");
- break;
- case ExprArrayRef:
- strcpy(buf,"array reference");
- break;
- case ExprKeysymList:
- strcpy(buf,"list of keysyms");
- break;
- case ExprActionList:
- strcpy(buf,"list of actions");
- break;
- case OpAdd:
- strcpy(buf,"addition");
- break;
- case OpSubtract:
- strcpy(buf,"subtraction");
- break;
- case OpMultiply:
- strcpy(buf,"multiplication");
- break;
- case OpDivide:
- strcpy(buf,"division");
- break;
- case OpAssign:
- strcpy(buf,"assignment");
- break;
- case OpNot:
- strcpy(buf,"logical not");
- break;
- case OpNegate:
- strcpy(buf,"arithmetic negation");
- break;
- case OpInvert:
- strcpy(buf,"bitwise inversion");
- break;
- case OpUnaryPlus:
- strcpy(buf,"plus sign");
- break;
- default:
- sprintf(buf,"illegal(%d)",type);
- break;
- }
- return buf;
+ static char buf[32];
+
+ switch (type)
+ {
+ case ExprValue:
+ strcpy(buf, "literal");
+ break;
+ case ExprIdent:
+ strcpy(buf, "identifier");
+ break;
+ case ExprActionDecl:
+ strcpy(buf, "action declaration");
+ break;
+ case ExprFieldRef:
+ strcpy(buf, "field reference");
+ break;
+ case ExprArrayRef:
+ strcpy(buf, "array reference");
+ break;
+ case ExprKeysymList:
+ strcpy(buf, "list of keysyms");
+ break;
+ case ExprActionList:
+ strcpy(buf, "list of actions");
+ break;
+ case OpAdd:
+ strcpy(buf, "addition");
+ break;
+ case OpSubtract:
+ strcpy(buf, "subtraction");
+ break;
+ case OpMultiply:
+ strcpy(buf, "multiplication");
+ break;
+ case OpDivide:
+ strcpy(buf, "division");
+ break;
+ case OpAssign:
+ strcpy(buf, "assignment");
+ break;
+ case OpNot:
+ strcpy(buf, "logical not");
+ break;
+ case OpNegate:
+ strcpy(buf, "arithmetic negation");
+ break;
+ case OpInvert:
+ strcpy(buf, "bitwise inversion");
+ break;
+ case OpUnaryPlus:
+ strcpy(buf, "plus sign");
+ break;
+ default:
+ sprintf(buf, "illegal(%d)", type);
+ break;
+ }
+ return buf;
}
char *
exprTypeText(unsigned type)
{
-static char buf[20];
-
- switch (type) {
- case TypeUnknown:
- strcpy(buf,"unknown");
- break;
- case TypeBoolean:
- strcpy(buf,"boolean");
- break;
- case TypeInt:
- strcpy(buf,"int");
- break;
- case TypeString:
- strcpy(buf,"string");
- break;
- case TypeAction:
- strcpy(buf,"action");
- break;
- case TypeKeyName:
- strcpy(buf,"keyname");
- break;
- default:
- sprintf(buf,"illegal(%d)",type);
- break;
- }
- return buf;
+ static char buf[20];
+
+ switch (type)
+ {
+ case TypeUnknown:
+ strcpy(buf, "unknown");
+ break;
+ case TypeBoolean:
+ strcpy(buf, "boolean");
+ break;
+ case TypeInt:
+ strcpy(buf, "int");
+ break;
+ case TypeString:
+ strcpy(buf, "string");
+ break;
+ case TypeAction:
+ strcpy(buf, "action");
+ break;
+ case TypeKeyName:
+ strcpy(buf, "keyname");
+ break;
+ default:
+ sprintf(buf, "illegal(%d)", type);
+ break;
+ }
+ return buf;
}
int
-ExprResolveLhs( ExprDef * expr,
- ExprResult * elem_rtrn,
- ExprResult * field_rtrn,
- ExprDef ** index_rtrn)
+ExprResolveLhs(ExprDef * expr,
+ ExprResult * elem_rtrn,
+ ExprResult * field_rtrn, ExprDef ** index_rtrn)
{
- switch (expr->op) {
- case ExprIdent:
- elem_rtrn->str= NULL;
- field_rtrn->str= XkbAtomGetString(NULL,expr->value.str);
- *index_rtrn= NULL;
- return True;
- case ExprFieldRef:
- elem_rtrn->str= XkbAtomGetString(NULL,expr->value.field.element);
- field_rtrn->str= XkbAtomGetString(NULL,expr->value.field.field);
- *index_rtrn= NULL;
- return True;
- case ExprArrayRef:
- elem_rtrn->str= XkbAtomGetString(NULL,expr->value.array.element);
- field_rtrn->str= XkbAtomGetString(NULL,expr->value.array.field);
- *index_rtrn= expr->value.array.entry;
- return True;
+ switch (expr->op)
+ {
+ case ExprIdent:
+ elem_rtrn->str = NULL;
+ field_rtrn->str = XkbAtomGetString(NULL, expr->value.str);
+ *index_rtrn = NULL;
+ return True;
+ case ExprFieldRef:
+ elem_rtrn->str = XkbAtomGetString(NULL, expr->value.field.element);
+ field_rtrn->str = XkbAtomGetString(NULL, expr->value.field.field);
+ *index_rtrn = NULL;
+ return True;
+ case ExprArrayRef:
+ elem_rtrn->str = XkbAtomGetString(NULL, expr->value.array.element);
+ field_rtrn->str = XkbAtomGetString(NULL, expr->value.array.field);
+ *index_rtrn = expr->value.array.entry;
+ return True;
}
- WSGO1("Unexpected operator %d in ResolveLhs\n",expr->op);
+ WSGO1("Unexpected operator %d in ResolveLhs\n", expr->op);
return False;
}
Bool
-SimpleLookup( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+SimpleLookup(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
-LookupEntry * entry;
-register char * str;
+ LookupEntry *entry;
+ register char *str;
- if ((priv==NULL)||
- (field==None)||(elem!=None)||
- ((type!=TypeInt)&&(type!=TypeFloat))) {
- return False;
+ if ((priv == NULL) ||
+ (field == None) || (elem != None) ||
+ ((type != TypeInt) && (type != TypeFloat)))
+ {
+ return False;
}
- str= XkbAtomGetString(NULL,field);
- for (entry=(LookupEntry *)priv;(entry!=NULL)&&(entry->name!=NULL);entry++) {
- if (uStrCaseCmp(str,entry->name)==0) {
- val_rtrn->uval= entry->result;
- if (type==TypeFloat)
- val_rtrn->uval*= XkbGeomPtsPerMM;
- return True;
- }
+ str = XkbAtomGetString(NULL, field);
+ for (entry = (LookupEntry *) priv;
+ (entry != NULL) && (entry->name != NULL); entry++)
+ {
+ if (uStrCaseCmp(str, entry->name) == 0)
+ {
+ val_rtrn->uval = entry->result;
+ if (type == TypeFloat)
+ val_rtrn->uval *= XkbGeomPtsPerMM;
+ return True;
+ }
}
return False;
}
Bool
-RadioLookup( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+RadioLookup(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
-register char * str;
-int rg;
-
- if ((field==None)||(elem!=None)||(type!=TypeInt))
- return False;
- str= XkbAtomGetString(NULL,field);
- if (str) {
- if (uStrCasePrefix("group",str))
- str+= strlen("group");
- else if (uStrCasePrefix("radiogroup",str))
- str+= strlen("radiogroup");
- else if (uStrCasePrefix("rg",str))
- str+= strlen("rg");
- else if (!isdigit(str[0]))
- str= NULL;
+ register char *str;
+ int rg;
+
+ if ((field == None) || (elem != None) || (type != TypeInt))
+ return False;
+ str = XkbAtomGetString(NULL, field);
+ if (str)
+ {
+ if (uStrCasePrefix("group", str))
+ str += strlen("group");
+ else if (uStrCasePrefix("radiogroup", str))
+ str += strlen("radiogroup");
+ else if (uStrCasePrefix("rg", str))
+ str += strlen("rg");
+ else if (!isdigit(str[0]))
+ str = NULL;
}
- if ((!str)||(sscanf(str,"%i",&rg)<1)||(rg<1)||(rg>XkbMaxRadioGroups))
- return False;
- val_rtrn->uval= rg;
+ if ((!str) || (sscanf(str, "%i", &rg) < 1) || (rg < 1)
+ || (rg > XkbMaxRadioGroups))
+ return False;
+ val_rtrn->uval = rg;
return True;
}
int
-TableLookup( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+TableLookup(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
-LookupTable * tbl= (LookupTable *)priv;
-register char * str;
-
- if ((priv==NULL)||(field==None)||(type!=TypeInt))
- return False;
- str= XkbAtomGetString(NULL,elem);
- while (tbl) {
- if (((str==NULL)&&(tbl->element==NULL))||
- ((str!=NULL)&&(tbl->element!=NULL)&&
- (uStrCaseCmp(str,tbl->element)==0))) {
- break;
- }
- tbl= tbl->nextElement;
+ LookupTable *tbl = (LookupTable *) priv;
+ register char *str;
+
+ if ((priv == NULL) || (field == None) || (type != TypeInt))
+ return False;
+ str = XkbAtomGetString(NULL, elem);
+ while (tbl)
+ {
+ if (((str == NULL) && (tbl->element == NULL)) ||
+ ((str != NULL) && (tbl->element != NULL) &&
+ (uStrCaseCmp(str, tbl->element) == 0)))
+ {
+ break;
+ }
+ tbl = tbl->nextElement;
}
- if (tbl==NULL) /* didn't find a matching element */
- return False;
- priv= (XPointer)tbl->entries;
- return SimpleLookup(priv,(Atom)None,field,type,val_rtrn);
+ if (tbl == NULL) /* didn't find a matching element */
+ return False;
+ priv = (XPointer) tbl->entries;
+ return SimpleLookup(priv, (Atom) None, field, type, val_rtrn);
}
static LookupEntry modIndexNames[] = {
- { "shift", ShiftMapIndex },
- { "control", ControlMapIndex },
- { "lock", LockMapIndex },
- { "mod1", Mod1MapIndex },
- { "mod2", Mod2MapIndex },
- { "mod3", Mod3MapIndex },
- { "mod4", Mod4MapIndex },
- { "mod5", Mod5MapIndex },
- { "none", XkbNoModifier },
- { NULL, 0 }
+ {"shift", ShiftMapIndex},
+ {"control", ControlMapIndex},
+ {"lock", LockMapIndex},
+ {"mod1", Mod1MapIndex},
+ {"mod2", Mod2MapIndex},
+ {"mod3", Mod3MapIndex},
+ {"mod4", Mod4MapIndex},
+ {"mod5", Mod5MapIndex},
+ {"none", XkbNoModifier},
+ {NULL, 0}
};
int
-LookupModIndex( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+LookupModIndex(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
- return SimpleLookup((XPointer)modIndexNames,elem,field,type,val_rtrn);
+ return SimpleLookup((XPointer) modIndexNames, elem, field, type,
+ val_rtrn);
}
int
-LookupModMask( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+LookupModMask(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
-char *str;
-
- if ((elem!=None)||(type!=TypeInt))
- return False;
- str= XkbAtomGetString(NULL,field);
- if (str==NULL)
- return False;
- if (uStrCaseCmp(str,"all")==0)
- val_rtrn->uval= 0xff;
- else if (uStrCaseCmp(str,"none")==0)
- val_rtrn->uval= 0;
- else if (LookupModIndex(priv,elem,field,type,val_rtrn))
- val_rtrn->uval= (1<<val_rtrn->uval);
- else if (priv != NULL) {
- LookupPriv *lpriv= (LookupPriv *)priv;
- if ((lpriv->chain==NULL)||
- (!(*lpriv->chain)(lpriv->chainPriv,elem,field,type,val_rtrn)))
- return False;
+ char *str;
+
+ if ((elem != None) || (type != TypeInt))
+ return False;
+ str = XkbAtomGetString(NULL, field);
+ if (str == NULL)
+ return False;
+ if (uStrCaseCmp(str, "all") == 0)
+ val_rtrn->uval = 0xff;
+ else if (uStrCaseCmp(str, "none") == 0)
+ val_rtrn->uval = 0;
+ else if (LookupModIndex(priv, elem, field, type, val_rtrn))
+ val_rtrn->uval = (1 << val_rtrn->uval);
+ else if (priv != NULL)
+ {
+ LookupPriv *lpriv = (LookupPriv *) priv;
+ if ((lpriv->chain == NULL) ||
+ (!(*lpriv->chain) (lpriv->chainPriv, elem, field, type,
+ val_rtrn)))
+ return False;
}
- else return False;
+ else
+ return False;
return True;
}
int
-ExprResolveModIndex( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveModIndex(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-char *bogus= NULL;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type!=TypeInt) {
- ERROR1("Found constant of type %s where a modifier mask was expected\n",
- exprTypeText(expr->type));
- return False;
- }
- else if ((expr->value.ival>=XkbNumModifiers)||(expr->value.ival<0)){
- ERROR2("Illegal modifier index (%d, must be 0..%d)\n",
- expr->value.ival,XkbNumModifiers-1);
- return False;
- }
- val_rtrn->ival= expr->value.ival;
- return True;
- case ExprIdent:
- if (LookupModIndex(lookupPriv,(Atom)None,expr->value.str,
- (unsigned)TypeInt,val_rtrn)) {
- return True;
- }
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeInt,val_rtrn);
- }
- if (!ok)
- ERROR1("Cannot determine modifier index for \"%s\"\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- break;
- case ExprFieldRef:
- bogus= "field reference";
- break;
- case ExprArrayRef:
- bogus= "array reference";
- break;
- case ExprActionDecl:
- bogus= "function";
- break;
- case OpAdd:
- case OpSubtract:
- case OpMultiply:
- case OpDivide:
- case OpInvert:
- case OpNegate:
- case OpNot:
- case OpUnaryPlus:
- bogus= "arithmetic operations";
- break;
- case OpAssign:
- bogus= "assignment";
- break;
- default:
- WSGO1("Unknown operator %d in ResolveModIndex\n",expr->op);
- return False;
+ int ok = 0;
+ char *bogus = NULL;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type != TypeInt)
+ {
+ ERROR1
+ ("Found constant of type %s where a modifier mask was expected\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ else if ((expr->value.ival >= XkbNumModifiers)
+ || (expr->value.ival < 0))
+ {
+ ERROR2("Illegal modifier index (%d, must be 0..%d)\n",
+ expr->value.ival, XkbNumModifiers - 1);
+ return False;
+ }
+ val_rtrn->ival = expr->value.ival;
+ return True;
+ case ExprIdent:
+ if (LookupModIndex(lookupPriv, (Atom) None, expr->value.str,
+ (unsigned) TypeInt, val_rtrn))
+ {
+ return True;
+ }
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeInt, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Cannot determine modifier index for \"%s\"\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ break;
+ case ExprFieldRef:
+ bogus = "field reference";
+ break;
+ case ExprArrayRef:
+ bogus = "array reference";
+ break;
+ case ExprActionDecl:
+ bogus = "function";
+ break;
+ case OpAdd:
+ case OpSubtract:
+ case OpMultiply:
+ case OpDivide:
+ case OpInvert:
+ case OpNegate:
+ case OpNot:
+ case OpUnaryPlus:
+ bogus = "arithmetic operations";
+ break;
+ case OpAssign:
+ bogus = "assignment";
+ break;
+ default:
+ WSGO1("Unknown operator %d in ResolveModIndex\n", expr->op);
+ return False;
}
- if (bogus) {
- ERROR1("Modifier index must be a name or number, %s ignored\n",bogus);
- return False;
+ if (bogus)
+ {
+ ERROR1("Modifier index must be a name or number, %s ignored\n",
+ bogus);
+ return False;
}
return ok;
}
int
-ExprResolveModMask( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveModMask(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-LookupPriv priv;
+ LookupPriv priv;
- priv.priv= NULL;
- priv.chain= lookup;
- priv.chainPriv= lookupPriv;
- return ExprResolveMask(expr,val_rtrn,LookupModMask,(XPointer)&priv);
+ priv.priv = NULL;
+ priv.chain = lookup;
+ priv.chainPriv = lookupPriv;
+ return ExprResolveMask(expr, val_rtrn, LookupModMask, (XPointer) & priv);
}
int
-ExprResolveBoolean( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveBoolean(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-char * bogus= NULL;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type!=TypeBoolean) {
- ERROR1("Found constant of type %s where boolean was expected\n",
- exprTypeText(expr->type));
- return False;
- }
- val_rtrn->ival= expr->value.ival;
- return True;
- case ExprIdent:
- bogus= XkbAtomGetString(NULL,expr->value.str);
- if (bogus) {
- if ((uStrCaseCmp(bogus,"true")==0)||
- (uStrCaseCmp(bogus,"yes")==0)||
- (uStrCaseCmp(bogus,"on")==0)) {
- val_rtrn->uval= 1;
- return True;
- }
- else if ((uStrCaseCmp(bogus,"false")==0)||
- (uStrCaseCmp(bogus,"no")==0)||
- (uStrCaseCmp(bogus,"off")==0)) {
- val_rtrn->uval= 0;
- return True;
- }
- }
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeBoolean,val_rtrn);
- }
- if (!ok)
- ERROR1("Identifier \"%s\" of type int is unknown\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeBoolean,val_rtrn);
- }
- if (!ok)
- ERROR2("Default \"%s.%s\" of type boolean is unknown\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case OpInvert:
- case OpNot:
- ok= ExprResolveBoolean(expr,val_rtrn,lookup,lookupPriv);
- if (ok)
- val_rtrn->uval= !val_rtrn->uval;
- return ok;
- case OpAdd: if (bogus==NULL) bogus= "Addition";
- case OpSubtract: if (bogus==NULL) bogus= "Subtraction";
- case OpMultiply: if (bogus==NULL) bogus= "Multiplication";
- case OpDivide: if (bogus==NULL) bogus= "Division";
- case OpAssign: if (bogus==NULL) bogus= "Assignment";
- case OpNegate: if (bogus==NULL) bogus= "Negation";
- ERROR1("%s of boolean values not permitted\n",bogus);
- break;
- case OpUnaryPlus:
- ERROR("Unary \"+\" operator not permitted for boolean values\n");
- break;
- default:
- WSGO1("Unknown operator %d in ResolveBoolean\n",expr->op);
- break;
+ int ok = 0;
+ char *bogus = NULL;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type != TypeBoolean)
+ {
+ ERROR1
+ ("Found constant of type %s where boolean was expected\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ val_rtrn->ival = expr->value.ival;
+ return True;
+ case ExprIdent:
+ bogus = XkbAtomGetString(NULL, expr->value.str);
+ if (bogus)
+ {
+ if ((uStrCaseCmp(bogus, "true") == 0) ||
+ (uStrCaseCmp(bogus, "yes") == 0) ||
+ (uStrCaseCmp(bogus, "on") == 0))
+ {
+ val_rtrn->uval = 1;
+ return True;
+ }
+ else if ((uStrCaseCmp(bogus, "false") == 0) ||
+ (uStrCaseCmp(bogus, "no") == 0) ||
+ (uStrCaseCmp(bogus, "off") == 0))
+ {
+ val_rtrn->uval = 0;
+ return True;
+ }
+ }
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeBoolean, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Identifier \"%s\" of type int is unknown\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeBoolean, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Default \"%s.%s\" of type boolean is unknown\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case OpInvert:
+ case OpNot:
+ ok = ExprResolveBoolean(expr, val_rtrn, lookup, lookupPriv);
+ if (ok)
+ val_rtrn->uval = !val_rtrn->uval;
+ return ok;
+ case OpAdd:
+ if (bogus == NULL)
+ bogus = "Addition";
+ case OpSubtract:
+ if (bogus == NULL)
+ bogus = "Subtraction";
+ case OpMultiply:
+ if (bogus == NULL)
+ bogus = "Multiplication";
+ case OpDivide:
+ if (bogus == NULL)
+ bogus = "Division";
+ case OpAssign:
+ if (bogus == NULL)
+ bogus = "Assignment";
+ case OpNegate:
+ if (bogus == NULL)
+ bogus = "Negation";
+ ERROR1("%s of boolean values not permitted\n", bogus);
+ break;
+ case OpUnaryPlus:
+ ERROR("Unary \"+\" operator not permitted for boolean values\n");
+ break;
+ default:
+ WSGO1("Unknown operator %d in ResolveBoolean\n", expr->op);
+ break;
}
return False;
}
int
-ExprResolveFloat( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveFloat(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-ExprResult leftRtrn,rightRtrn;
-ExprDef *left,*right;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type==TypeString) {
- register char *str;
- str= XkbAtomGetString(NULL,expr->value.str);
- if ((str!=None)&&(strlen(str)==1)) {
- val_rtrn->uval= str[0]*XkbGeomPtsPerMM;
- return True;
- }
- }
- if ((expr->type!=TypeInt)&&(expr->type!=TypeFloat)) {
- ERROR1("Found constant of type %s, expected a number\n",
- exprTypeText(expr->type));
- return False;
- }
- val_rtrn->ival= expr->value.ival;
- if (expr->type==TypeInt)
- val_rtrn->ival*= XkbGeomPtsPerMM;
- return True;
- case ExprIdent:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeFloat,val_rtrn);
- }
- if (!ok)
- ERROR1("Numeric identifier \"%s\" unknown\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeFloat,val_rtrn);
- }
- if (!ok)
- ERROR2("Numeric default \"%s.%s\" unknown\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case OpAdd:
- case OpSubtract:
- case OpMultiply:
- case OpDivide:
- left= expr->value.binary.left;
- right= expr->value.binary.right;
- if (ExprResolveFloat(left,&leftRtrn,lookup,lookupPriv)&&
- ExprResolveFloat(right,&rightRtrn,lookup,lookupPriv)) {
- switch (expr->op) {
- case OpAdd:
- val_rtrn->ival= leftRtrn.ival+rightRtrn.ival;
- break;
- case OpSubtract:
- val_rtrn->ival= leftRtrn.ival-rightRtrn.ival;
- break;
- case OpMultiply:
- val_rtrn->ival= leftRtrn.ival*rightRtrn.ival;
- break;
- case OpDivide:
- val_rtrn->ival= leftRtrn.ival/rightRtrn.ival;
- break;
- }
- return True;
- }
- return False;
- case OpAssign:
- WSGO("Assignment operator not implemented yet\n");
- break;
- case OpNot:
- left= expr->value.child;
- if (ExprResolveFloat(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The ! operator cannot be applied to a number\n");
- }
- return False;
- case OpInvert:
- case OpNegate:
- left= expr->value.child;
- if (ExprResolveFloat(left,&leftRtrn,lookup,lookupPriv)) {
- if (expr->op==OpNegate)
- val_rtrn->ival= -leftRtrn.ival;
- else val_rtrn->ival= ~leftRtrn.ival;
- return True;
- }
- return False;
- case OpUnaryPlus:
- left= expr->value.child;
- return ExprResolveFloat(left,val_rtrn,lookup,lookupPriv);
- default:
- WSGO1("Unknown operator %d in ResolveFloat\n",expr->op);
- break;
+ int ok = 0;
+ ExprResult leftRtrn, rightRtrn;
+ ExprDef *left, *right;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type == TypeString)
+ {
+ register char *str;
+ str = XkbAtomGetString(NULL, expr->value.str);
+ if ((str != None) && (strlen(str) == 1))
+ {
+ val_rtrn->uval = str[0] * XkbGeomPtsPerMM;
+ return True;
+ }
+ }
+ if ((expr->type != TypeInt) && (expr->type != TypeFloat))
+ {
+ ERROR1("Found constant of type %s, expected a number\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ val_rtrn->ival = expr->value.ival;
+ if (expr->type == TypeInt)
+ val_rtrn->ival *= XkbGeomPtsPerMM;
+ return True;
+ case ExprIdent:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeFloat, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Numeric identifier \"%s\" unknown\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeFloat, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Numeric default \"%s.%s\" unknown\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case OpAdd:
+ case OpSubtract:
+ case OpMultiply:
+ case OpDivide:
+ left = expr->value.binary.left;
+ right = expr->value.binary.right;
+ if (ExprResolveFloat(left, &leftRtrn, lookup, lookupPriv) &&
+ ExprResolveFloat(right, &rightRtrn, lookup, lookupPriv))
+ {
+ switch (expr->op)
+ {
+ case OpAdd:
+ val_rtrn->ival = leftRtrn.ival + rightRtrn.ival;
+ break;
+ case OpSubtract:
+ val_rtrn->ival = leftRtrn.ival - rightRtrn.ival;
+ break;
+ case OpMultiply:
+ val_rtrn->ival = leftRtrn.ival * rightRtrn.ival;
+ break;
+ case OpDivide:
+ val_rtrn->ival = leftRtrn.ival / rightRtrn.ival;
+ break;
+ }
+ return True;
+ }
+ return False;
+ case OpAssign:
+ WSGO("Assignment operator not implemented yet\n");
+ break;
+ case OpNot:
+ left = expr->value.child;
+ if (ExprResolveFloat(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The ! operator cannot be applied to a number\n");
+ }
+ return False;
+ case OpInvert:
+ case OpNegate:
+ left = expr->value.child;
+ if (ExprResolveFloat(left, &leftRtrn, lookup, lookupPriv))
+ {
+ if (expr->op == OpNegate)
+ val_rtrn->ival = -leftRtrn.ival;
+ else
+ val_rtrn->ival = ~leftRtrn.ival;
+ return True;
+ }
+ return False;
+ case OpUnaryPlus:
+ left = expr->value.child;
+ return ExprResolveFloat(left, val_rtrn, lookup, lookupPriv);
+ default:
+ WSGO1("Unknown operator %d in ResolveFloat\n", expr->op);
+ break;
}
return False;
}
int
-ExprResolveInteger( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveInteger(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-ExprResult leftRtrn,rightRtrn;
-ExprDef *left,*right;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type==TypeString) {
- register char *str;
- str= XkbAtomGetString(NULL,expr->value.str);
- if (str!=None)
- switch (strlen(str)) {
- case 0:
- val_rtrn->uval= 0;
- return True;
- case 1:
- val_rtrn->uval= str[0];
- return True;
- default:
- break;
- }
- }
- if ((expr->type!=TypeInt)&&(expr->type!=TypeFloat)) {
- ERROR1("Found constant of type %s where an int was expected\n",
- exprTypeText(expr->type));
- return False;
- }
- val_rtrn->ival= expr->value.ival;
- if (expr->type==TypeFloat)
- val_rtrn->ival/= XkbGeomPtsPerMM;
- return True;
- case ExprIdent:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeInt,val_rtrn);
- }
- if (!ok)
- ERROR1("Identifier \"%s\" of type int is unknown\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeInt,val_rtrn);
- }
- if (!ok)
- ERROR2("Default \"%s.%s\" of type int is unknown\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case OpAdd:
- case OpSubtract:
- case OpMultiply:
- case OpDivide:
- left= expr->value.binary.left;
- right= expr->value.binary.right;
- if (ExprResolveInteger(left,&leftRtrn,lookup,lookupPriv)&&
- ExprResolveInteger(right,&rightRtrn,lookup,lookupPriv)) {
- switch (expr->op) {
- case OpAdd:
- val_rtrn->ival= leftRtrn.ival+rightRtrn.ival;
- break;
- case OpSubtract:
- val_rtrn->ival= leftRtrn.ival-rightRtrn.ival;
- break;
- case OpMultiply:
- val_rtrn->ival= leftRtrn.ival*rightRtrn.ival;
- break;
- case OpDivide:
- val_rtrn->ival= leftRtrn.ival/rightRtrn.ival;
- break;
- }
- return True;
- }
- return False;
- case OpAssign:
- WSGO("Assignment operator not implemented yet\n");
- break;
- case OpNot:
- left= expr->value.child;
- if (ExprResolveInteger(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The ! operator cannot be applied to an integer\n");
- }
- return False;
- case OpInvert:
- case OpNegate:
- left= expr->value.child;
- if (ExprResolveInteger(left,&leftRtrn,lookup,lookupPriv)) {
- if (expr->op==OpNegate)
- val_rtrn->ival= -leftRtrn.ival;
- else val_rtrn->ival= ~leftRtrn.ival;
- return True;
- }
- return False;
- case OpUnaryPlus:
- left= expr->value.child;
- return ExprResolveInteger(left,val_rtrn,lookup,lookupPriv);
- default:
- WSGO1("Unknown operator %d in ResolveInteger\n",expr->op);
- break;
+ int ok = 0;
+ ExprResult leftRtrn, rightRtrn;
+ ExprDef *left, *right;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type == TypeString)
+ {
+ register char *str;
+ str = XkbAtomGetString(NULL, expr->value.str);
+ if (str != None)
+ switch (strlen(str))
+ {
+ case 0:
+ val_rtrn->uval = 0;
+ return True;
+ case 1:
+ val_rtrn->uval = str[0];
+ return True;
+ default:
+ break;
+ }
+ }
+ if ((expr->type != TypeInt) && (expr->type != TypeFloat))
+ {
+ ERROR1
+ ("Found constant of type %s where an int was expected\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ val_rtrn->ival = expr->value.ival;
+ if (expr->type == TypeFloat)
+ val_rtrn->ival /= XkbGeomPtsPerMM;
+ return True;
+ case ExprIdent:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeInt, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Identifier \"%s\" of type int is unknown\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeInt, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Default \"%s.%s\" of type int is unknown\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case OpAdd:
+ case OpSubtract:
+ case OpMultiply:
+ case OpDivide:
+ left = expr->value.binary.left;
+ right = expr->value.binary.right;
+ if (ExprResolveInteger(left, &leftRtrn, lookup, lookupPriv) &&
+ ExprResolveInteger(right, &rightRtrn, lookup, lookupPriv))
+ {
+ switch (expr->op)
+ {
+ case OpAdd:
+ val_rtrn->ival = leftRtrn.ival + rightRtrn.ival;
+ break;
+ case OpSubtract:
+ val_rtrn->ival = leftRtrn.ival - rightRtrn.ival;
+ break;
+ case OpMultiply:
+ val_rtrn->ival = leftRtrn.ival * rightRtrn.ival;
+ break;
+ case OpDivide:
+ val_rtrn->ival = leftRtrn.ival / rightRtrn.ival;
+ break;
+ }
+ return True;
+ }
+ return False;
+ case OpAssign:
+ WSGO("Assignment operator not implemented yet\n");
+ break;
+ case OpNot:
+ left = expr->value.child;
+ if (ExprResolveInteger(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The ! operator cannot be applied to an integer\n");
+ }
+ return False;
+ case OpInvert:
+ case OpNegate:
+ left = expr->value.child;
+ if (ExprResolveInteger(left, &leftRtrn, lookup, lookupPriv))
+ {
+ if (expr->op == OpNegate)
+ val_rtrn->ival = -leftRtrn.ival;
+ else
+ val_rtrn->ival = ~leftRtrn.ival;
+ return True;
+ }
+ return False;
+ case OpUnaryPlus:
+ left = expr->value.child;
+ return ExprResolveInteger(left, val_rtrn, lookup, lookupPriv);
+ default:
+ WSGO1("Unknown operator %d in ResolveInteger\n", expr->op);
+ break;
}
return False;
}
int
-ExprResolveString( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveString(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-ExprResult leftRtrn,rightRtrn;
-ExprDef * left;
-ExprDef * right;
-char * bogus= NULL;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type!=TypeString) {
- ERROR1("Found constant of type %s, expected a string\n",
- exprTypeText(expr->type));
- return False;
- }
- val_rtrn->str= XkbAtomGetString(NULL,expr->value.str);
- if (val_rtrn->str==NULL) {
- static char *empty= "";
- val_rtrn->str= empty;
- }
- return True;
- case ExprIdent:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeString,val_rtrn);
- }
- if (!ok)
- ERROR1("Identifier \"%s\" of type string not found\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeString,val_rtrn);
- }
- if (!ok)
- ERROR2("Default \"%s.%s\" of type string not found\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case OpAdd:
- left= expr->value.binary.left;
- right= expr->value.binary.right;
- if (ExprResolveString(left,&leftRtrn,lookup,lookupPriv)&&
- ExprResolveString(right,&rightRtrn,lookup,lookupPriv)) {
- int len;
- char *new;
- len= strlen(leftRtrn.str)+strlen(rightRtrn.str)+1;
- new= (char *)uAlloc(len);
- if (new) {
- sprintf(new,"%s%s",leftRtrn.str,rightRtrn.str);
- val_rtrn->str= new;
- return True;
- }
- }
- return False;
- case OpSubtract: if (bogus==NULL) bogus= "Subtraction";
- case OpMultiply: if (bogus==NULL) bogus= "Multiplication";
- case OpDivide: if (bogus==NULL) bogus= "Division";
- case OpAssign: if (bogus==NULL) bogus= "Assignment";
- case OpNegate: if (bogus==NULL) bogus= "Negation";
- case OpInvert: if (bogus==NULL) bogus= "Bitwise complement";
- ERROR1("%s of string values not permitted\n",bogus);
- return False;
- case OpNot:
- left= expr->value.child;
- if (ExprResolveString(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The ! operator cannot be applied to a string\n");
- }
- return False;
- case OpUnaryPlus:
- left= expr->value.child;
- if (ExprResolveString(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The + operator cannot be applied to a string\n");
- }
- return False;
- default:
- WSGO1("Unknown operator %d in ResolveString\n",expr->op);
- break;
+ int ok = 0;
+ ExprResult leftRtrn, rightRtrn;
+ ExprDef *left;
+ ExprDef *right;
+ char *bogus = NULL;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type != TypeString)
+ {
+ ERROR1("Found constant of type %s, expected a string\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ val_rtrn->str = XkbAtomGetString(NULL, expr->value.str);
+ if (val_rtrn->str == NULL)
+ {
+ static char *empty = "";
+ val_rtrn->str = empty;
+ }
+ return True;
+ case ExprIdent:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeString, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Identifier \"%s\" of type string not found\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeString, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Default \"%s.%s\" of type string not found\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case OpAdd:
+ left = expr->value.binary.left;
+ right = expr->value.binary.right;
+ if (ExprResolveString(left, &leftRtrn, lookup, lookupPriv) &&
+ ExprResolveString(right, &rightRtrn, lookup, lookupPriv))
+ {
+ int len;
+ char *new;
+ len = strlen(leftRtrn.str) + strlen(rightRtrn.str) + 1;
+ new = (char *) uAlloc(len);
+ if (new)
+ {
+ sprintf(new, "%s%s", leftRtrn.str, rightRtrn.str);
+ val_rtrn->str = new;
+ return True;
+ }
+ }
+ return False;
+ case OpSubtract:
+ if (bogus == NULL)
+ bogus = "Subtraction";
+ case OpMultiply:
+ if (bogus == NULL)
+ bogus = "Multiplication";
+ case OpDivide:
+ if (bogus == NULL)
+ bogus = "Division";
+ case OpAssign:
+ if (bogus == NULL)
+ bogus = "Assignment";
+ case OpNegate:
+ if (bogus == NULL)
+ bogus = "Negation";
+ case OpInvert:
+ if (bogus == NULL)
+ bogus = "Bitwise complement";
+ ERROR1("%s of string values not permitted\n", bogus);
+ return False;
+ case OpNot:
+ left = expr->value.child;
+ if (ExprResolveString(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The ! operator cannot be applied to a string\n");
+ }
+ return False;
+ case OpUnaryPlus:
+ left = expr->value.child;
+ if (ExprResolveString(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The + operator cannot be applied to a string\n");
+ }
+ return False;
+ default:
+ WSGO1("Unknown operator %d in ResolveString\n", expr->op);
+ break;
}
return False;
}
int
-ExprResolveKeyName( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveKeyName(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-ExprDef * left;
-ExprResult leftRtrn;
-char * bogus= NULL;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type!=TypeKeyName) {
- ERROR1("Found constant of type %s, expected a key name\n",
- exprTypeText(expr->type));
- return False;
- }
- memcpy(val_rtrn->keyName.name,expr->value.keyName,XkbKeyNameLength);
- return True;
- case ExprIdent:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeString,val_rtrn);
- }
- if (!ok)
- ERROR1("Identifier \"%s\" of type string not found\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeString,val_rtrn);
- }
- if (!ok)
- ERROR2("Default \"%s.%s\" of type key name not found\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case OpAdd: if (bogus==NULL) bogus= "Addition";
- case OpSubtract: if (bogus==NULL) bogus= "Subtraction";
- case OpMultiply: if (bogus==NULL) bogus= "Multiplication";
- case OpDivide: if (bogus==NULL) bogus= "Division";
- case OpAssign: if (bogus==NULL) bogus= "Assignment";
- case OpNegate: if (bogus==NULL) bogus= "Negation";
- case OpInvert: if (bogus==NULL) bogus= "Bitwise complement";
- ERROR1("%s of key name values not permitted\n",bogus);
- return False;
- case OpNot:
- left= expr->value.binary.left;
- if (ExprResolveString(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The ! operator cannot be applied to a key name\n");
- }
- return False;
- case OpUnaryPlus:
- left= expr->value.binary.left;
- if (ExprResolveString(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The + operator cannot be applied to a key name\n");
- }
- return False;
- default:
- WSGO1("Unknown operator %d in ResolveKeyName\n",expr->op);
- break;
+ int ok = 0;
+ ExprDef *left;
+ ExprResult leftRtrn;
+ char *bogus = NULL;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type != TypeKeyName)
+ {
+ ERROR1("Found constant of type %s, expected a key name\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ memcpy(val_rtrn->keyName.name, expr->value.keyName, XkbKeyNameLength);
+ return True;
+ case ExprIdent:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeString, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Identifier \"%s\" of type string not found\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeString, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Default \"%s.%s\" of type key name not found\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case OpAdd:
+ if (bogus == NULL)
+ bogus = "Addition";
+ case OpSubtract:
+ if (bogus == NULL)
+ bogus = "Subtraction";
+ case OpMultiply:
+ if (bogus == NULL)
+ bogus = "Multiplication";
+ case OpDivide:
+ if (bogus == NULL)
+ bogus = "Division";
+ case OpAssign:
+ if (bogus == NULL)
+ bogus = "Assignment";
+ case OpNegate:
+ if (bogus == NULL)
+ bogus = "Negation";
+ case OpInvert:
+ if (bogus == NULL)
+ bogus = "Bitwise complement";
+ ERROR1("%s of key name values not permitted\n", bogus);
+ return False;
+ case OpNot:
+ left = expr->value.binary.left;
+ if (ExprResolveString(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The ! operator cannot be applied to a key name\n");
+ }
+ return False;
+ case OpUnaryPlus:
+ left = expr->value.binary.left;
+ if (ExprResolveString(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The + operator cannot be applied to a key name\n");
+ }
+ return False;
+ default:
+ WSGO1("Unknown operator %d in ResolveKeyName\n", expr->op);
+ break;
}
return False;
}
@@ -825,149 +904,162 @@ char * bogus= NULL;
/***====================================================================***/
int
-ExprResolveEnum(ExprDef *expr,ExprResult *val_rtrn,LookupEntry *values)
+ExprResolveEnum(ExprDef * expr, ExprResult * val_rtrn, LookupEntry * values)
{
- if (expr->op!=ExprIdent) {
- ERROR1("Found a %s where an enumerated value was expected\n",
- exprOpText(expr->op));
- return False;
+ if (expr->op != ExprIdent)
+ {
+ ERROR1("Found a %s where an enumerated value was expected\n",
+ exprOpText(expr->op));
+ return False;
}
- if (!SimpleLookup((XPointer)values,(Atom)None,expr->value.str,
- (unsigned)TypeInt,val_rtrn)) {
- int nOut=0;
- ERROR1("Illegal identifier %s (expected one of: ",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- while (values && values->name) {
- if (nOut!=0) INFO1(", %s",values->name);
- else INFO1("%s",values->name);
- values++;
- nOut++;
- }
- INFO(")\n");
- return False;
+ if (!SimpleLookup((XPointer) values, (Atom) None, expr->value.str,
+ (unsigned) TypeInt, val_rtrn))
+ {
+ int nOut = 0;
+ ERROR1("Illegal identifier %s (expected one of: ",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ while (values && values->name)
+ {
+ if (nOut != 0)
+ INFO1(", %s", values->name);
+ else
+ INFO1("%s", values->name);
+ values++;
+ nOut++;
+ }
+ INFO(")\n");
+ return False;
}
return True;
}
int
-ExprResolveMask( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveMask(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-ExprResult leftRtrn,rightRtrn;
-ExprDef *left,*right;
-char * bogus= NULL;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type!=TypeInt) {
- ERROR1("Found constant of type %s where a mask was expected\n",
- exprTypeText(expr->type));
- return False;
- }
- val_rtrn->ival= expr->value.ival;
- return True;
- case ExprIdent:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeInt,val_rtrn);
- }
- if (!ok)
- ERROR1("Identifier \"%s\" of type int is unknown\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeInt,val_rtrn);
- }
- if (!ok)
- ERROR2("Default \"%s.%s\" of type int is unknown\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case ExprArrayRef:
- bogus= "array reference";
- case ExprActionDecl:
- if (bogus==NULL)
- bogus= "function use";
- ERROR1("Unexpected %s in mask expression\n",bogus);
- ACTION("Expression ignored\n");
- return False;
- case OpAdd:
- case OpSubtract:
- case OpMultiply:
- case OpDivide:
- left= expr->value.binary.left;
- right= expr->value.binary.right;
- if (ExprResolveMask(left,&leftRtrn,lookup,lookupPriv)&&
- ExprResolveMask(right,&rightRtrn,lookup,lookupPriv)) {
- switch (expr->op) {
- case OpAdd:
- val_rtrn->ival= leftRtrn.ival|rightRtrn.ival;
- break;
- case OpSubtract:
- val_rtrn->ival= leftRtrn.ival&(~rightRtrn.ival);
- break;
- case OpMultiply:
- case OpDivide:
- ERROR1("Cannot %s masks\n",
- expr->op==OpDivide?"divide":"multiply");
- ACTION("Illegal operation ignored\n");
- return False;
- }
- return True;
- }
- return False;
- case OpAssign:
- WSGO("Assignment operator not implemented yet\n");
- break;
- case OpInvert:
- left= expr->value.child;
- if (ExprResolveInteger(left,&leftRtrn,lookup,lookupPriv)) {
- val_rtrn->ival= ~leftRtrn.ival;
- return True;
- }
- return False;
- case OpUnaryPlus:
- case OpNegate:
- case OpNot:
- left= expr->value.child;
- if (ExprResolveInteger(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR1("The %s operator cannot be used with a mask\n",
- (expr->op==OpNegate?"-":"!"));
- }
- return False;
- default:
- WSGO1("Unknown operator %d in ResolveMask\n",expr->op);
- break;
+ int ok = 0;
+ ExprResult leftRtrn, rightRtrn;
+ ExprDef *left, *right;
+ char *bogus = NULL;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type != TypeInt)
+ {
+ ERROR1
+ ("Found constant of type %s where a mask was expected\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ val_rtrn->ival = expr->value.ival;
+ return True;
+ case ExprIdent:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeInt, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Identifier \"%s\" of type int is unknown\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeInt, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Default \"%s.%s\" of type int is unknown\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case ExprArrayRef:
+ bogus = "array reference";
+ case ExprActionDecl:
+ if (bogus == NULL)
+ bogus = "function use";
+ ERROR1("Unexpected %s in mask expression\n", bogus);
+ ACTION("Expression ignored\n");
+ return False;
+ case OpAdd:
+ case OpSubtract:
+ case OpMultiply:
+ case OpDivide:
+ left = expr->value.binary.left;
+ right = expr->value.binary.right;
+ if (ExprResolveMask(left, &leftRtrn, lookup, lookupPriv) &&
+ ExprResolveMask(right, &rightRtrn, lookup, lookupPriv))
+ {
+ switch (expr->op)
+ {
+ case OpAdd:
+ val_rtrn->ival = leftRtrn.ival | rightRtrn.ival;
+ break;
+ case OpSubtract:
+ val_rtrn->ival = leftRtrn.ival & (~rightRtrn.ival);
+ break;
+ case OpMultiply:
+ case OpDivide:
+ ERROR1("Cannot %s masks\n",
+ expr->op == OpDivide ? "divide" : "multiply");
+ ACTION("Illegal operation ignored\n");
+ return False;
+ }
+ return True;
+ }
+ return False;
+ case OpAssign:
+ WSGO("Assignment operator not implemented yet\n");
+ break;
+ case OpInvert:
+ left = expr->value.child;
+ if (ExprResolveInteger(left, &leftRtrn, lookup, lookupPriv))
+ {
+ val_rtrn->ival = ~leftRtrn.ival;
+ return True;
+ }
+ return False;
+ case OpUnaryPlus:
+ case OpNegate:
+ case OpNot:
+ left = expr->value.child;
+ if (ExprResolveInteger(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR1("The %s operator cannot be used with a mask\n",
+ (expr->op == OpNegate ? "-" : "!"));
+ }
+ return False;
+ default:
+ WSGO1("Unknown operator %d in ResolveMask\n", expr->op);
+ break;
}
return False;
}
int
-ExprResolveKeySym( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveKeySym(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-KeySym sym;
-
- if (expr->op==ExprIdent) {
- char *str;
- str= XkbAtomGetString(NULL,expr->value.str);
- if ((str!=NULL)&&((sym= XStringToKeysym(str))!=NoSymbol)) {
- val_rtrn->uval= sym;
- return True;
- }
+ int ok = 0;
+ KeySym sym;
+
+ if (expr->op == ExprIdent)
+ {
+ char *str;
+ str = XkbAtomGetString(NULL, expr->value.str);
+ if ((str != NULL) && ((sym = XStringToKeysym(str)) != NoSymbol))
+ {
+ val_rtrn->uval = sym;
+ return True;
+ }
}
- ok= ExprResolveInteger(expr,val_rtrn,lookup,lookupPriv);
- if ((ok)&&(val_rtrn->uval<10))
- val_rtrn->uval+= '0';
+ ok = ExprResolveInteger(expr, val_rtrn, lookup, lookupPriv);
+ if ((ok) && (val_rtrn->uval < 10))
+ val_rtrn->uval += '0';
return ok;
}
diff --git a/expr.h b/expr.h
index 327f2b3..02519f9 100644
--- a/expr.h
+++ b/expr.h
@@ -27,161 +27,146 @@
#ifndef EXPR_H
#define EXPR_H 1
-typedef union _ExprResult {
- char * str;
- int ival;
- unsigned uval;
- XkbKeyNameRec keyName;
+typedef union _ExprResult
+{
+ char *str;
+ int ival;
+ unsigned uval;
+ XkbKeyNameRec keyName;
} ExprResult;
-typedef Bool (*IdentLookupFunc)(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern char *exprTypeText(
- unsigned /* type */
-);
-
-extern int ExprResolveLhs(
- ExprDef * /* expr */,
- ExprResult * /* elem_rtrn */,
- ExprResult * /* field_rtrn */,
- ExprDef ** /* index_rtrn */
-);
-
-typedef struct _LookupPriv {
- XPointer priv;
- IdentLookupFunc chain;
- XPointer chainPriv;
+typedef Bool(*IdentLookupFunc) (XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern char *exprTypeText(unsigned /* type */
+ );
+
+extern int ExprResolveLhs(ExprDef * /* expr */ ,
+ ExprResult * /* elem_rtrn */ ,
+ ExprResult * /* field_rtrn */ ,
+ ExprDef ** /* index_rtrn */
+ );
+
+typedef struct _LookupPriv
+{
+ XPointer priv;
+ IdentLookupFunc chain;
+ XPointer chainPriv;
} LookupPriv;
-typedef struct _LookupEntry {
+typedef struct _LookupEntry
+{
const char *name;
- unsigned result;
+ unsigned result;
} LookupEntry;
-typedef struct _LookupTable {
- char * element;
- LookupEntry * entries;
- struct _LookupTable * nextElement;
+typedef struct _LookupTable
+{
+ char *element;
+ LookupEntry *entries;
+ struct _LookupTable *nextElement;
} LookupTable;
-extern char *exprOpText(
- unsigned /* type */
-);
-
-extern int RadioLookup(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern int SimpleLookup(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern int TableLookup(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern int LookupModIndex(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern int LookupModMask(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern int ExprResolveModIndex(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveModMask(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* priv */
-);
-
-extern int ExprResolveBoolean(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveInteger(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveFloat(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveString(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveKeyName(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveEnum(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- LookupEntry * /* values */
-);
-
-extern int ExprResolveMask(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveKeySym(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
+extern char *exprOpText(unsigned /* type */
+ );
+
+extern int RadioLookup(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern int SimpleLookup(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern int TableLookup(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern int LookupModIndex(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern int LookupModMask(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern int ExprResolveModIndex(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveModMask(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* priv */
+ );
+
+extern int ExprResolveBoolean(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveInteger(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveFloat(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveString(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveKeyName(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveEnum(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ LookupEntry * /* values */
+ );
+
+extern int ExprResolveMask(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveKeySym(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
#endif /* EXPR_H */
diff --git a/geometry.c b/geometry.c
index baf79e8..6eb3fb8 100644
--- a/geometry.c
+++ b/geometry.c
@@ -44,25 +44,27 @@
#define DFLT_ENCODING "iso8859-1"
#define DFLT_SIZE 120
-typedef struct _PropertyInfo {
- CommonInfo defs;
- char * name;
- char * value;
+typedef struct _PropertyInfo
+{
+ CommonInfo defs;
+ char *name;
+ char *value;
} PropertyInfo;
#define _GSh_Outlines (1<<1)
#define _GSh_Approx (1<<2)
#define _GSh_Primary (1<<3)
-typedef struct _ShapeInfo {
- CommonInfo defs;
- Atom name;
- short index;
- unsigned short nOutlines;
- unsigned short szOutlines;
- XkbOutlinePtr outlines;
- XkbOutlinePtr approx;
- XkbOutlinePtr primary;
- int dfltCornerRadius;
+typedef struct _ShapeInfo
+{
+ CommonInfo defs;
+ Atom name;
+ short index;
+ unsigned short nOutlines;
+ unsigned short szOutlines;
+ XkbOutlinePtr outlines;
+ XkbOutlinePtr approx;
+ XkbOutlinePtr primary;
+ int dfltCornerRadius;
} ShapeInfo;
#define shText(d,s) \
@@ -73,12 +75,12 @@ typedef struct _ShapeInfo {
#define _GD_Left (1<<2)
#define _GD_Angle (1<<3)
#define _GD_Shape (1<<4)
-#define _GD_FontVariant (1<<4) /* CHEATING */
+#define _GD_FontVariant (1<<4) /* CHEATING */
#define _GD_Corner (1<<5)
-#define _GD_Width (1<<5) /* CHEATING */
+#define _GD_Width (1<<5) /* CHEATING */
#define _GD_Color (1<<6)
#define _GD_OffColor (1<<7)
-#define _GD_Height (1<<7) /* CHEATING */
+#define _GD_Height (1<<7) /* CHEATING */
#define _GD_Text (1<<8)
#define _GD_Font (1<<9)
#define _GD_FontSlant (1<<10)
@@ -91,30 +93,31 @@ typedef struct _ShapeInfo {
#define _GD_FontParts (_GD_Font|_GD_FontSlant|_GD_FontWeight|_GD_FontSetWidth|_GD_FontSize|_GD_FontEncoding|_GD_FontVariant)
-typedef struct _DoodadInfo {
- CommonInfo defs;
- Atom name;
- unsigned char type;
- unsigned char priority;
- short top;
- short left;
- short angle;
- unsigned short corner;
- unsigned short width;
- unsigned short height;
- Atom shape;
- Atom color;
- Atom offColor;
- Atom text;
- Atom font;
- Atom fontSlant;
- Atom fontWeight;
- Atom fontSetWidth;
- Atom fontVariant;
- unsigned short fontSize;
- Atom fontEncoding;
- Atom fontSpec;
- char * logoName;
+typedef struct _DoodadInfo
+{
+ CommonInfo defs;
+ Atom name;
+ unsigned char type;
+ unsigned char priority;
+ short top;
+ short left;
+ short angle;
+ unsigned short corner;
+ unsigned short width;
+ unsigned short height;
+ Atom shape;
+ Atom color;
+ Atom offColor;
+ Atom text;
+ Atom font;
+ Atom fontSlant;
+ Atom fontWeight;
+ Atom fontSetWidth;
+ Atom fontVariant;
+ unsigned short fontSize;
+ Atom fontEncoding;
+ Atom fontSpec;
+ char *logoName;
struct _SectionInfo *section;
} DoodadInfo;
@@ -127,14 +130,15 @@ typedef struct _DoodadInfo {
#define _GK_Gap (1<<2)
#define _GK_Shape (1<<3)
#define _GK_Color (1<<4)
-typedef struct _KeyInfo {
- CommonInfo defs;
- char name[8];
- short gap;
- short index;
- Atom shape;
- Atom color;
- struct _RowInfo * row;
+typedef struct _KeyInfo
+{
+ CommonInfo defs;
+ char name[8];
+ short gap;
+ short index;
+ Atom shape;
+ Atom color;
+ struct _RowInfo *row;
} KeyInfo;
#define keyText(k) ((k)&&(k)->name[0]?(k)->name:"default")
@@ -142,35 +146,38 @@ typedef struct _KeyInfo {
#define _GR_Vertical (1<<1)
#define _GR_Top (1<<2)
#define _GR_Left (1<<3)
-typedef struct _RowInfo {
- CommonInfo defs;
- unsigned short top;
- unsigned short left;
- short index;
- Bool vertical;
- unsigned short nKeys;
- KeyInfo * keys;
- KeyInfo dfltKey;
+typedef struct _RowInfo
+{
+ CommonInfo defs;
+ unsigned short top;
+ unsigned short left;
+ short index;
+ Bool vertical;
+ unsigned short nKeys;
+ KeyInfo *keys;
+ KeyInfo dfltKey;
struct _SectionInfo *section;
} RowInfo;
#define rowText(d,r) \
((r)?XkbAtomText((d),(r)->section->name,XkbMessage):"default")
#define _GOK_UnknownRow -1
-typedef struct _OverlayKeyInfo {
- CommonInfo defs;
- short sectionRow;
- short overlayRow;
- char over[XkbKeyNameLength+1];
- char under[XkbKeyNameLength+1];
+typedef struct _OverlayKeyInfo
+{
+ CommonInfo defs;
+ short sectionRow;
+ short overlayRow;
+ char over[XkbKeyNameLength + 1];
+ char under[XkbKeyNameLength + 1];
} OverlayKeyInfo;
-typedef struct _OverlayInfo {
- CommonInfo defs;
- Atom name;
- unsigned short nRows;
- unsigned short nKeys;
- OverlayKeyInfo *keys;
+typedef struct _OverlayInfo
+{
+ CommonInfo defs;
+ Atom name;
+ unsigned short nRows;
+ unsigned short nKeys;
+ OverlayKeyInfo *keys;
} OverlayInfo;
#define oiText(d,o) ((o)?XkbAtomText((d),(o)->name,XkbMessage):"default")
@@ -183,434 +190,472 @@ typedef struct _OverlayInfo {
#define _GS_Height (1<<5)
#define _GS_Angle (1<<6)
#define _GS_Priority (1<<7)
-typedef struct _SectionInfo {
- CommonInfo defs;
- Atom name;
- unsigned short top;
- unsigned short left;
- unsigned short width;
- unsigned short height;
- unsigned short angle;
- unsigned short nRows;
- unsigned short nDoodads;
- unsigned short nOverlays;
- unsigned char priority;
- unsigned char nextDoodadPriority;
- RowInfo * rows;
- DoodadInfo * doodads;
- RowInfo dfltRow;
- DoodadInfo * dfltDoodads;
- OverlayInfo * overlays;
+typedef struct _SectionInfo
+{
+ CommonInfo defs;
+ Atom name;
+ unsigned short top;
+ unsigned short left;
+ unsigned short width;
+ unsigned short height;
+ unsigned short angle;
+ unsigned short nRows;
+ unsigned short nDoodads;
+ unsigned short nOverlays;
+ unsigned char priority;
+ unsigned char nextDoodadPriority;
+ RowInfo *rows;
+ DoodadInfo *doodads;
+ RowInfo dfltRow;
+ DoodadInfo *dfltDoodads;
+ OverlayInfo *overlays;
struct _GeometryInfo *geometry;
} SectionInfo;
#define scText(d,s) ((s)?XkbAtomText((d),(s)->name,XkbMessage):"default")
-typedef struct _GeometryInfo {
- char * name;
- Display * dpy;
- unsigned fileID;
- unsigned merge;
- int errorCount;
- unsigned nextPriority;
- int nProps;
- int nShapes;
- int nSections;
- int nDoodads;
- PropertyInfo * props;
- ShapeInfo * shapes;
- SectionInfo * sections;
- DoodadInfo * doodads;
- int widthMM;
- int heightMM;
- Atom font;
- Atom fontSlant;
- Atom fontWeight;
- Atom fontSetWidth;
- Atom fontVariant;
- unsigned fontSize;
- Atom fontEncoding;
- Atom fontSpec;
- Atom baseColor;
- Atom labelColor;
- int dfltCornerRadius;
- SectionInfo dfltSection;
- DoodadInfo * dfltDoodads;
- AliasInfo * aliases;
+typedef struct _GeometryInfo
+{
+ char *name;
+ Display *dpy;
+ unsigned fileID;
+ unsigned merge;
+ int errorCount;
+ unsigned nextPriority;
+ int nProps;
+ int nShapes;
+ int nSections;
+ int nDoodads;
+ PropertyInfo *props;
+ ShapeInfo *shapes;
+ SectionInfo *sections;
+ DoodadInfo *doodads;
+ int widthMM;
+ int heightMM;
+ Atom font;
+ Atom fontSlant;
+ Atom fontWeight;
+ Atom fontSetWidth;
+ Atom fontVariant;
+ unsigned fontSize;
+ Atom fontEncoding;
+ Atom fontSpec;
+ Atom baseColor;
+ Atom labelColor;
+ int dfltCornerRadius;
+ SectionInfo dfltSection;
+ DoodadInfo *dfltDoodads;
+ AliasInfo *aliases;
} GeometryInfo;
static char *
-ddText(Display *dpy,DoodadInfo *di)
+ddText(Display * dpy, DoodadInfo * di)
{
-static char buf[64];
+ static char buf[64];
- if (di==NULL) {
- strcpy(buf,"default");
- return buf;
+ if (di == NULL)
+ {
+ strcpy(buf, "default");
+ return buf;
}
- if (di->section) {
- sprintf(buf,"%s in section %s",XkbAtomText(dpy,di->name,XkbMessage),
- scText(dpy,di->section));
- return buf;
+ if (di->section)
+ {
+ sprintf(buf, "%s in section %s",
+ XkbAtomText(dpy, di->name, XkbMessage), scText(dpy,
+ di->section));
+ return buf;
}
- return XkbAtomText(dpy,di->name,XkbMessage);
+ return XkbAtomText(dpy, di->name, XkbMessage);
}
/***====================================================================***/
static void
-InitPropertyInfo(PropertyInfo *pi,GeometryInfo *info)
+InitPropertyInfo(PropertyInfo * pi, GeometryInfo * info)
{
- pi->defs.defined= 0;
- pi->defs.fileID= info->fileID;
- pi->defs.merge= info->merge;
- pi->name= pi->value= NULL;
+ pi->defs.defined = 0;
+ pi->defs.fileID = info->fileID;
+ pi->defs.merge = info->merge;
+ pi->name = pi->value = NULL;
return;
}
static void
-FreeProperties(PropertyInfo *pi,GeometryInfo *info)
-{
-PropertyInfo * tmp;
-PropertyInfo * next;
-
- if (info->props==pi) {
- info->props= NULL;
- info->nProps= 0;
- }
- for (tmp=pi;tmp!=NULL;tmp=next) {
- if (tmp->name)
- uFree(tmp->name);
- if (tmp->value)
- uFree(tmp->value);
- tmp->name= tmp->value=NULL;
- next= (PropertyInfo *)tmp->defs.next;
- uFree(tmp);
+FreeProperties(PropertyInfo * pi, GeometryInfo * info)
+{
+ PropertyInfo *tmp;
+ PropertyInfo *next;
+
+ if (info->props == pi)
+ {
+ info->props = NULL;
+ info->nProps = 0;
+ }
+ for (tmp = pi; tmp != NULL; tmp = next)
+ {
+ if (tmp->name)
+ uFree(tmp->name);
+ if (tmp->value)
+ uFree(tmp->value);
+ tmp->name = tmp->value = NULL;
+ next = (PropertyInfo *) tmp->defs.next;
+ uFree(tmp);
}
return;
}
static void
-InitKeyInfo(KeyInfo *key,RowInfo *row,GeometryInfo *info)
+InitKeyInfo(KeyInfo * key, RowInfo * row, GeometryInfo * info)
{
- if (key!=&row->dfltKey) {
- *key= row->dfltKey;
- strcpy(key->name,"unknown");
- key->defs.defined&= ~_GK_Default;
+ if (key != &row->dfltKey)
+ {
+ *key = row->dfltKey;
+ strcpy(key->name, "unknown");
+ key->defs.defined &= ~_GK_Default;
}
- else {
- bzero(key,sizeof(KeyInfo));
- strcpy(key->name,"default");
- key->defs.defined= _GK_Default;
- key->defs.fileID= info->fileID;
- key->defs.merge= info->merge;
- key->defs.next= NULL;
- key->row= row;
+ else
+ {
+ bzero(key, sizeof(KeyInfo));
+ strcpy(key->name, "default");
+ key->defs.defined = _GK_Default;
+ key->defs.fileID = info->fileID;
+ key->defs.merge = info->merge;
+ key->defs.next = NULL;
+ key->row = row;
}
return;
}
static void
-ClearKeyInfo(KeyInfo *key)
+ClearKeyInfo(KeyInfo * key)
{
- key->defs.defined&= ~_GK_Default;
- strcpy(key->name,"default");
- key->gap= 0;
- key->shape= None;
- key->color= None;
+ key->defs.defined &= ~_GK_Default;
+ strcpy(key->name, "default");
+ key->gap = 0;
+ key->shape = None;
+ key->color = None;
return;
}
static void
-FreeKeys(KeyInfo *key,RowInfo *row,GeometryInfo *info)
+FreeKeys(KeyInfo * key, RowInfo * row, GeometryInfo * info)
{
-KeyInfo * tmp;
-KeyInfo * next;
+ KeyInfo *tmp;
+ KeyInfo *next;
- if (row->keys==key) {
- row->nKeys= 0;
- row->keys= NULL;
+ if (row->keys == key)
+ {
+ row->nKeys = 0;
+ row->keys = NULL;
}
- for (tmp=key;tmp!=NULL;tmp=next) {
- ClearKeyInfo(tmp);
- next= (KeyInfo *)tmp->defs.next;
- uFree(tmp);
+ for (tmp = key; tmp != NULL; tmp = next)
+ {
+ ClearKeyInfo(tmp);
+ next = (KeyInfo *) tmp->defs.next;
+ uFree(tmp);
}
return;
}
static void
-InitRowInfo(RowInfo *row,SectionInfo *section,GeometryInfo *info)
-{
- if (row!= &section->dfltRow) {
- *row= section->dfltRow;
- row->defs.defined&= ~_GR_Default;
- }
- else {
- bzero(row,sizeof(RowInfo *));
- row->defs.defined= _GR_Default;
- row->defs.fileID= info->fileID;
- row->defs.merge= info->merge;
- row->defs.next= NULL;
- row->section= section;
- row->nKeys= 0;
- row->keys= NULL;
- InitKeyInfo(&row->dfltKey,row,info);
+InitRowInfo(RowInfo * row, SectionInfo * section, GeometryInfo * info)
+{
+ if (row != &section->dfltRow)
+ {
+ *row = section->dfltRow;
+ row->defs.defined &= ~_GR_Default;
+ }
+ else
+ {
+ bzero(row, sizeof(RowInfo *));
+ row->defs.defined = _GR_Default;
+ row->defs.fileID = info->fileID;
+ row->defs.merge = info->merge;
+ row->defs.next = NULL;
+ row->section = section;
+ row->nKeys = 0;
+ row->keys = NULL;
+ InitKeyInfo(&row->dfltKey, row, info);
}
return;
}
static void
-ClearRowInfo(RowInfo *row,GeometryInfo *info)
+ClearRowInfo(RowInfo * row, GeometryInfo * info)
{
- row->defs.defined&= ~_GR_Default;
- row->top= row->left= 0;
- row->vertical= False;
- row->nKeys= 0;
+ row->defs.defined &= ~_GR_Default;
+ row->top = row->left = 0;
+ row->vertical = False;
+ row->nKeys = 0;
if (row->keys)
- FreeKeys(row->keys,row,info);
+ FreeKeys(row->keys, row, info);
ClearKeyInfo(&row->dfltKey);
- row->dfltKey.defs.defined|= _GK_Default;
+ row->dfltKey.defs.defined |= _GK_Default;
return;
}
static void
-FreeRows(RowInfo *row,SectionInfo *section,GeometryInfo *info)
+FreeRows(RowInfo * row, SectionInfo * section, GeometryInfo * info)
{
-RowInfo * next;
-RowInfo * tmp;
+ RowInfo *next;
+ RowInfo *tmp;
- if (row==section->rows) {
- section->nRows= 0;
- section->rows= NULL;
+ if (row == section->rows)
+ {
+ section->nRows = 0;
+ section->rows = NULL;
}
- for (tmp=row;tmp!=NULL;tmp=next) {
- ClearRowInfo(tmp,info);
- next= (RowInfo *)tmp->defs.next;
- uFree(tmp);
+ for (tmp = row; tmp != NULL; tmp = next)
+ {
+ ClearRowInfo(tmp, info);
+ next = (RowInfo *) tmp->defs.next;
+ uFree(tmp);
}
return;
}
static DoodadInfo *
-FindDoodadByType(DoodadInfo *di,unsigned type)
+FindDoodadByType(DoodadInfo * di, unsigned type)
{
- while (di) {
- if (di->type==type)
- return di;
- di= (DoodadInfo *)di->defs.next;
+ while (di)
+ {
+ if (di->type == type)
+ return di;
+ di = (DoodadInfo *) di->defs.next;
}
return NULL;
}
static DoodadInfo *
-FindDoodadByName(DoodadInfo *di,Atom name)
+FindDoodadByName(DoodadInfo * di, Atom name)
{
- while (di) {
- if (di->name==name)
- return di;
- di= (DoodadInfo *)di->defs.next;
+ while (di)
+ {
+ if (di->name == name)
+ return di;
+ di = (DoodadInfo *) di->defs.next;
}
return NULL;
}
static void
-InitDoodadInfo(DoodadInfo *di,unsigned type,SectionInfo *si,GeometryInfo *info)
+InitDoodadInfo(DoodadInfo * di, unsigned type, SectionInfo * si,
+ GeometryInfo * info)
{
-DoodadInfo * dflt;
+ DoodadInfo *dflt;
- dflt= NULL;
+ dflt = NULL;
if (si && si->dfltDoodads)
- dflt= FindDoodadByType(si->dfltDoodads,type);
- if ((dflt==NULL)&&(info->dfltDoodads))
- dflt= FindDoodadByType(info->dfltDoodads,type);
- if (dflt!=NULL) {
- *di= *dflt;
- di->defs.next= NULL;
- }
- else {
- bzero(di,sizeof(DoodadInfo));
- di->defs.fileID= info->fileID;
- di->type= type;
- }
- di->section= si;
- if (si!=NULL) {
- di->priority= si->nextDoodadPriority++;
+ dflt = FindDoodadByType(si->dfltDoodads, type);
+ if ((dflt == NULL) && (info->dfltDoodads))
+ dflt = FindDoodadByType(info->dfltDoodads, type);
+ if (dflt != NULL)
+ {
+ *di = *dflt;
+ di->defs.next = NULL;
+ }
+ else
+ {
+ bzero(di, sizeof(DoodadInfo));
+ di->defs.fileID = info->fileID;
+ di->type = type;
+ }
+ di->section = si;
+ if (si != NULL)
+ {
+ di->priority = si->nextDoodadPriority++;
#if XkbGeomMaxPriority < 255
- if (si->nextDoodadPriority>XkbGeomMaxPriority)
- si->nextDoodadPriority= XkbGeomMaxPriority;
+ if (si->nextDoodadPriority > XkbGeomMaxPriority)
+ si->nextDoodadPriority = XkbGeomMaxPriority;
#endif
}
- else {
- di->priority= info->nextPriority++;
- if (info->nextPriority>XkbGeomMaxPriority)
- info->nextPriority= XkbGeomMaxPriority;
+ else
+ {
+ di->priority = info->nextPriority++;
+ if (info->nextPriority > XkbGeomMaxPriority)
+ info->nextPriority = XkbGeomMaxPriority;
}
return;
}
static void
-ClearDoodadInfo(DoodadInfo *di)
+ClearDoodadInfo(DoodadInfo * di)
{
-CommonInfo defs;
+ CommonInfo defs;
- defs= di->defs;
- bzero(di,sizeof(DoodadInfo));
- di->defs= defs;
- di->defs.defined= 0;
+ defs = di->defs;
+ bzero(di, sizeof(DoodadInfo));
+ di->defs = defs;
+ di->defs.defined = 0;
return;
}
static void
-ClearOverlayInfo(OverlayInfo *ol)
+ClearOverlayInfo(OverlayInfo * ol)
{
- if (ol && ol->keys) {
- ol->keys= (OverlayKeyInfo *)ClearCommonInfo(&ol->keys->defs);
- ol->nKeys= 0;
+ if (ol && ol->keys)
+ {
+ ol->keys = (OverlayKeyInfo *) ClearCommonInfo(&ol->keys->defs);
+ ol->nKeys = 0;
}
return;
}
static void
-FreeDoodads(DoodadInfo *di,SectionInfo *si,GeometryInfo *info)
-{
-DoodadInfo * tmp;
-DoodadInfo * next;
-
- if (si) {
- if (si->doodads==di) {
- si->doodads= NULL;
- si->nDoodads= 0;
- }
- if (si->dfltDoodads==di)
- si->dfltDoodads= NULL;
- }
- if (info->doodads==di) {
- info->doodads= NULL;
- info->nDoodads= 0;
- }
- if (info->dfltDoodads==di)
- info->dfltDoodads= NULL;
- for (tmp=di;tmp!=NULL;tmp=next) {
- next= (DoodadInfo *)tmp->defs.next;
- ClearDoodadInfo(tmp);
- uFree(tmp);
+FreeDoodads(DoodadInfo * di, SectionInfo * si, GeometryInfo * info)
+{
+ DoodadInfo *tmp;
+ DoodadInfo *next;
+
+ if (si)
+ {
+ if (si->doodads == di)
+ {
+ si->doodads = NULL;
+ si->nDoodads = 0;
+ }
+ if (si->dfltDoodads == di)
+ si->dfltDoodads = NULL;
+ }
+ if (info->doodads == di)
+ {
+ info->doodads = NULL;
+ info->nDoodads = 0;
+ }
+ if (info->dfltDoodads == di)
+ info->dfltDoodads = NULL;
+ for (tmp = di; tmp != NULL; tmp = next)
+ {
+ next = (DoodadInfo *) tmp->defs.next;
+ ClearDoodadInfo(tmp);
+ uFree(tmp);
}
return;
}
static void
-InitSectionInfo(SectionInfo *si,GeometryInfo *info)
-{
- if (si!=&info->dfltSection) {
- *si= info->dfltSection;
- si->defs.defined&= ~_GS_Default;
- si->name= XkbInternAtom(info->dpy,"unknown",False);
- si->priority= info->nextPriority++;
- if (info->nextPriority>XkbGeomMaxPriority)
- info->nextPriority= XkbGeomMaxPriority;
- }
- else {
- bzero(si,sizeof(SectionInfo));
- si->defs.fileID= info->fileID;
- si->defs.merge= info->merge;
- si->defs.next= NULL;
- si->geometry= info;
- si->name= XkbInternAtom(info->dpy,"default",False);
- InitRowInfo(&si->dfltRow,si,info);
+InitSectionInfo(SectionInfo * si, GeometryInfo * info)
+{
+ if (si != &info->dfltSection)
+ {
+ *si = info->dfltSection;
+ si->defs.defined &= ~_GS_Default;
+ si->name = XkbInternAtom(info->dpy, "unknown", False);
+ si->priority = info->nextPriority++;
+ if (info->nextPriority > XkbGeomMaxPriority)
+ info->nextPriority = XkbGeomMaxPriority;
+ }
+ else
+ {
+ bzero(si, sizeof(SectionInfo));
+ si->defs.fileID = info->fileID;
+ si->defs.merge = info->merge;
+ si->defs.next = NULL;
+ si->geometry = info;
+ si->name = XkbInternAtom(info->dpy, "default", False);
+ InitRowInfo(&si->dfltRow, si, info);
}
return;
}
static void
-DupSectionInfo(SectionInfo *into,SectionInfo *from,GeometryInfo *info)
-{
-CommonInfo defs;
-
- defs= into->defs;
- *into= *from;
- into->defs.fileID= defs.fileID;
- into->defs.merge= defs.merge;
- into->defs.next= NULL;
- into->dfltRow.defs.fileID= defs.fileID;
- into->dfltRow.defs.merge= defs.merge;
- into->dfltRow.defs.next= NULL;
- into->dfltRow.section= into;
- into->dfltRow.dfltKey.defs.fileID= defs.fileID;
- into->dfltRow.dfltKey.defs.merge= defs.merge;
- into->dfltRow.dfltKey.defs.next= NULL;
- into->dfltRow.dfltKey.row= &into->dfltRow;
+DupSectionInfo(SectionInfo * into, SectionInfo * from, GeometryInfo * info)
+{
+ CommonInfo defs;
+
+ defs = into->defs;
+ *into = *from;
+ into->defs.fileID = defs.fileID;
+ into->defs.merge = defs.merge;
+ into->defs.next = NULL;
+ into->dfltRow.defs.fileID = defs.fileID;
+ into->dfltRow.defs.merge = defs.merge;
+ into->dfltRow.defs.next = NULL;
+ into->dfltRow.section = into;
+ into->dfltRow.dfltKey.defs.fileID = defs.fileID;
+ into->dfltRow.dfltKey.defs.merge = defs.merge;
+ into->dfltRow.dfltKey.defs.next = NULL;
+ into->dfltRow.dfltKey.row = &into->dfltRow;
return;
}
static void
-ClearSectionInfo(SectionInfo *si,GeometryInfo *info)
-{
-
- si->defs.defined&= ~_GS_Default;
- si->name= XkbInternAtom(info->dpy,"default",False);
- si->top= si->left= 0;
- si->width= si->height= 0;
- si->angle= 0;
- if (si->rows) {
- FreeRows(si->rows,si,info);
- si->rows= NULL;
- }
- ClearRowInfo(&si->dfltRow,info);
- if (si->doodads) {
- FreeDoodads(si->doodads,si,info);
- si->doodads= NULL;
- }
- si->dfltRow.defs.defined= _GR_Default;
+ClearSectionInfo(SectionInfo * si, GeometryInfo * info)
+{
+
+ si->defs.defined &= ~_GS_Default;
+ si->name = XkbInternAtom(info->dpy, "default", False);
+ si->top = si->left = 0;
+ si->width = si->height = 0;
+ si->angle = 0;
+ if (si->rows)
+ {
+ FreeRows(si->rows, si, info);
+ si->rows = NULL;
+ }
+ ClearRowInfo(&si->dfltRow, info);
+ if (si->doodads)
+ {
+ FreeDoodads(si->doodads, si, info);
+ si->doodads = NULL;
+ }
+ si->dfltRow.defs.defined = _GR_Default;
return;
}
static void
-FreeSections(SectionInfo *si,GeometryInfo *info)
+FreeSections(SectionInfo * si, GeometryInfo * info)
{
-SectionInfo * tmp;
-SectionInfo * next;
+ SectionInfo *tmp;
+ SectionInfo *next;
- if (si==info->sections) {
- info->nSections= 0;
- info->sections= NULL;
+ if (si == info->sections)
+ {
+ info->nSections = 0;
+ info->sections = NULL;
}
- for (tmp=si;tmp!=NULL;tmp=next) {
- ClearSectionInfo(tmp,info);
- next= (SectionInfo *)tmp->defs.next;
- uFree(tmp);
+ for (tmp = si; tmp != NULL; tmp = next)
+ {
+ ClearSectionInfo(tmp, info);
+ next = (SectionInfo *) tmp->defs.next;
+ uFree(tmp);
}
return;
}
static void
-FreeShapes(ShapeInfo *si,GeometryInfo *info)
-{
-ShapeInfo * tmp;
-ShapeInfo * next;
-
- if (si==info->shapes) {
- info->nShapes= 0;
- info->shapes= NULL;
- }
- for (tmp=si;tmp!=NULL;tmp=next) {
- if (tmp->outlines) {
- register int i;
- for (i=0;i<tmp->nOutlines;i++) {
- if (tmp->outlines[i].points!=NULL) {
- uFree(tmp->outlines[i].points);
- tmp->outlines[i].num_points= 0;
- tmp->outlines[i].points= NULL;
- }
- }
- uFree(tmp->outlines);
- tmp->szOutlines= 0;
- tmp->nOutlines= 0;
- tmp->outlines= NULL;
- tmp->primary= tmp->approx=NULL;
- }
- next= (ShapeInfo *)tmp->defs.next;
- uFree(tmp);
+FreeShapes(ShapeInfo * si, GeometryInfo * info)
+{
+ ShapeInfo *tmp;
+ ShapeInfo *next;
+
+ if (si == info->shapes)
+ {
+ info->nShapes = 0;
+ info->shapes = NULL;
+ }
+ for (tmp = si; tmp != NULL; tmp = next)
+ {
+ if (tmp->outlines)
+ {
+ register int i;
+ for (i = 0; i < tmp->nOutlines; i++)
+ {
+ if (tmp->outlines[i].points != NULL)
+ {
+ uFree(tmp->outlines[i].points);
+ tmp->outlines[i].num_points = 0;
+ tmp->outlines[i].points = NULL;
+ }
+ }
+ uFree(tmp->outlines);
+ tmp->szOutlines = 0;
+ tmp->nOutlines = 0;
+ tmp->outlines = NULL;
+ tmp->primary = tmp->approx = NULL;
+ }
+ next = (ShapeInfo *) tmp->defs.next;
+ uFree(tmp);
}
return;
}
@@ -618,300 +663,342 @@ ShapeInfo * next;
/***====================================================================***/
static void
-InitGeometryInfo(GeometryInfo *info,unsigned fileID,unsigned merge)
+InitGeometryInfo(GeometryInfo * info, unsigned fileID, unsigned merge)
{
- bzero(info,sizeof(GeometryInfo));
- info->fileID= fileID;
- info->merge= merge;
- InitSectionInfo(&info->dfltSection,info);
- info->dfltSection.defs.defined= _GS_Default;
+ bzero(info, sizeof(GeometryInfo));
+ info->fileID = fileID;
+ info->merge = merge;
+ InitSectionInfo(&info->dfltSection, info);
+ info->dfltSection.defs.defined = _GS_Default;
return;
}
static void
-ClearGeometryInfo(GeometryInfo *info)
+ClearGeometryInfo(GeometryInfo * info)
{
if (info->name)
- uFree(info->name);
- info->name= NULL;
+ uFree(info->name);
+ info->name = NULL;
if (info->props)
- FreeProperties(info->props,info);
+ FreeProperties(info->props, info);
if (info->shapes)
- FreeShapes(info->shapes,info);
+ FreeShapes(info->shapes, info);
if (info->sections)
- FreeSections(info->sections,info);
- info->widthMM= 0;
- info->heightMM= 0;
- info->dfltCornerRadius= 0;
- ClearSectionInfo(&info->dfltSection,info);
- info->dfltSection.defs.defined= _GS_Default;
+ FreeSections(info->sections, info);
+ info->widthMM = 0;
+ info->heightMM = 0;
+ info->dfltCornerRadius = 0;
+ ClearSectionInfo(&info->dfltSection, info);
+ info->dfltSection.defs.defined = _GS_Default;
if (info->aliases)
- ClearAliases(&info->aliases);
+ ClearAliases(&info->aliases);
return;
}
/***====================================================================***/
static PropertyInfo *
-NextProperty(GeometryInfo *info)
+NextProperty(GeometryInfo * info)
{
-PropertyInfo * pi;
+ PropertyInfo *pi;
- pi= uTypedAlloc(PropertyInfo);
- if (pi) {
- bzero((char *)pi,sizeof(PropertyInfo));
- info->props= (PropertyInfo *)AddCommonInfo(&info->props->defs,
- (CommonInfo *)pi);
- info->nProps++;
+ pi = uTypedAlloc(PropertyInfo);
+ if (pi)
+ {
+ bzero((char *) pi, sizeof(PropertyInfo));
+ info->props = (PropertyInfo *) AddCommonInfo(&info->props->defs,
+ (CommonInfo *) pi);
+ info->nProps++;
}
return pi;
}
static PropertyInfo *
-FindProperty(GeometryInfo *info,char *name)
+FindProperty(GeometryInfo * info, char *name)
{
-PropertyInfo * old;
+ PropertyInfo *old;
if (!name)
- return NULL;
- for (old= info->props;old!=NULL;old=(PropertyInfo *)old->defs.next) {
- if ((old->name)&&(uStringEqual(name,old->name)))
- return old;
+ return NULL;
+ for (old = info->props; old != NULL;
+ old = (PropertyInfo *) old->defs.next)
+ {
+ if ((old->name) && (uStringEqual(name, old->name)))
+ return old;
}
return NULL;
}
static Bool
-AddProperty(GeometryInfo *info,PropertyInfo *new)
-{
-PropertyInfo * old;
-
- if ((!new)||(!new->value)||(!new->name))
- return False;
- old= FindProperty(info,new->name);
- if (old!=NULL) {
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple definitions for the \"%s\" property\n",
- new->name);
- ACTION2("Ignoring \"%s\", using \"%s\"\n",old->value,
- new->value);
- }
- if (old->value)
- uFree(old->value);
- old->value= uStringDup(new->value);
- return True;
- }
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple definitions for \"%s\" property\n",new->name);
- ACTION2("Using \"%s\", ignoring \"%s\" \n",old->value,new->value);
- }
- return True;
- }
- old= new;
- if ((new= NextProperty(info))==NULL)
- return False;
- new->defs.next= NULL;
- new->name= uStringDup(old->name);
- new->value= uStringDup(old->value);
+AddProperty(GeometryInfo * info, PropertyInfo * new)
+{
+ PropertyInfo *old;
+
+ if ((!new) || (!new->value) || (!new->name))
+ return False;
+ old = FindProperty(info, new->name);
+ if (old != NULL)
+ {
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Multiple definitions for the \"%s\" property\n",
+ new->name);
+ ACTION2("Ignoring \"%s\", using \"%s\"\n", old->value,
+ new->value);
+ }
+ if (old->value)
+ uFree(old->value);
+ old->value = uStringDup(new->value);
+ return True;
+ }
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple definitions for \"%s\" property\n", new->name);
+ ACTION2("Using \"%s\", ignoring \"%s\" \n", old->value,
+ new->value);
+ }
+ return True;
+ }
+ old = new;
+ if ((new = NextProperty(info)) == NULL)
+ return False;
+ new->defs.next = NULL;
+ new->name = uStringDup(old->name);
+ new->value = uStringDup(old->value);
return True;
}
/***====================================================================***/
static ShapeInfo *
-NextShape(GeometryInfo *info)
+NextShape(GeometryInfo * info)
{
-ShapeInfo * si;
+ ShapeInfo *si;
- si= uTypedAlloc(ShapeInfo);
- if (si) {
- bzero((char *)si,sizeof(ShapeInfo));
- info->shapes= (ShapeInfo *)AddCommonInfo(&info->shapes->defs,
- (CommonInfo *)si);
- info->nShapes++;
- si->dfltCornerRadius= info->dfltCornerRadius;
+ si = uTypedAlloc(ShapeInfo);
+ if (si)
+ {
+ bzero((char *) si, sizeof(ShapeInfo));
+ info->shapes = (ShapeInfo *) AddCommonInfo(&info->shapes->defs,
+ (CommonInfo *) si);
+ info->nShapes++;
+ si->dfltCornerRadius = info->dfltCornerRadius;
}
return si;
}
static ShapeInfo *
-FindShape(GeometryInfo *info, Atom name, const char *type, const char *which)
-{
-ShapeInfo * old;
-
- for (old= info->shapes;old!=NULL;old=(ShapeInfo *)old->defs.next) {
- if (name==old->name)
- return old;
- }
- if (type!=NULL) {
- old= info->shapes;
- WARN3("Unknown shape \"%s\" for %s %s\n",
- XkbAtomText(info->dpy,name,XkbMessage),type,which);
- if (old) {
- ACTION1("Using default shape %s instead\n",shText(info->dpy,old));
- return old;
- }
- ACTION("No default shape; definition ignored\n");
- return NULL;
+FindShape(GeometryInfo * info, Atom name, const char *type, const char *which)
+{
+ ShapeInfo *old;
+
+ for (old = info->shapes; old != NULL; old = (ShapeInfo *) old->defs.next)
+ {
+ if (name == old->name)
+ return old;
+ }
+ if (type != NULL)
+ {
+ old = info->shapes;
+ WARN3("Unknown shape \"%s\" for %s %s\n",
+ XkbAtomText(info->dpy, name, XkbMessage), type, which);
+ if (old)
+ {
+ ACTION1("Using default shape %s instead\n",
+ shText(info->dpy, old));
+ return old;
+ }
+ ACTION("No default shape; definition ignored\n");
+ return NULL;
}
return NULL;
}
static Bool
-AddShape(GeometryInfo *info,ShapeInfo *new)
-{
-ShapeInfo * old;
-
- old= FindShape(info,new->name,NULL,NULL);
- if (old!=NULL) {
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- ShapeInfo *next= (ShapeInfo *)old->defs.next;
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Duplicate shape name \"%s\"\n",shText(info->dpy,old));
- ACTION("Using last definition\n");
- }
- *old= *new;
- old->defs.next= &next->defs;
- return True;
- }
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple shapes named \"%s\"\n",shText(info->dpy,old));
- ACTION("Using first definition\n");
- }
- return True;
- }
- old= new;
- if ((new= NextShape(info))==NULL)
- return False;
- *new= *old;
- new->defs.next= NULL;
- old->szOutlines= old->nOutlines= 0;
- old->outlines= NULL;
- old->approx= NULL;
- old->primary= NULL;
+AddShape(GeometryInfo * info, ShapeInfo * new)
+{
+ ShapeInfo *old;
+
+ old = FindShape(info, new->name, NULL, NULL);
+ if (old != NULL)
+ {
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ ShapeInfo *next = (ShapeInfo *) old->defs.next;
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Duplicate shape name \"%s\"\n",
+ shText(info->dpy, old));
+ ACTION("Using last definition\n");
+ }
+ *old = *new;
+ old->defs.next = &next->defs;
+ return True;
+ }
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple shapes named \"%s\"\n", shText(info->dpy, old));
+ ACTION("Using first definition\n");
+ }
+ return True;
+ }
+ old = new;
+ if ((new = NextShape(info)) == NULL)
+ return False;
+ *new = *old;
+ new->defs.next = NULL;
+ old->szOutlines = old->nOutlines = 0;
+ old->outlines = NULL;
+ old->approx = NULL;
+ old->primary = NULL;
return True;
}
/***====================================================================***/
static void
-ReplaceDoodad(DoodadInfo *into,DoodadInfo *from)
+ReplaceDoodad(DoodadInfo * into, DoodadInfo * from)
{
-CommonInfo * next;
+ CommonInfo *next;
- next= into->defs.next;
+ next = into->defs.next;
ClearDoodadInfo(into);
- *into= *from;
- into->defs.next= next;
- next= from->defs.next;
+ *into = *from;
+ into->defs.next = next;
+ next = from->defs.next;
ClearDoodadInfo(from);
- from->defs.next= next;
+ from->defs.next = next;
return;
}
static DoodadInfo *
-NextDfltDoodad(SectionInfo *si,GeometryInfo *info)
+NextDfltDoodad(SectionInfo * si, GeometryInfo * info)
{
-DoodadInfo * di;
+ DoodadInfo *di;
- di= uTypedCalloc(1,DoodadInfo);
- if (!di)
- return NULL;
- if (si) {
- si->dfltDoodads= (DoodadInfo *)AddCommonInfo(&si->dfltDoodads->defs,
- (CommonInfo *)di);
+ di = uTypedCalloc(1, DoodadInfo);
+ if (!di)
+ return NULL;
+ if (si)
+ {
+ si->dfltDoodads =
+ (DoodadInfo *) AddCommonInfo(&si->dfltDoodads->defs,
+ (CommonInfo *) di);
}
- else {
- info->dfltDoodads= (DoodadInfo *)AddCommonInfo(&info->dfltDoodads->defs,
- (CommonInfo *)di);
+ else
+ {
+ info->dfltDoodads =
+ (DoodadInfo *) AddCommonInfo(&info->dfltDoodads->defs,
+ (CommonInfo *) di);
}
return di;
}
static DoodadInfo *
-NextDoodad(SectionInfo *si,GeometryInfo *info)
-{
-DoodadInfo * di;
-
- di= uTypedCalloc(1,DoodadInfo);
- if (di) {
- if (si) {
- si->doodads= (DoodadInfo *)AddCommonInfo(&si->doodads->defs,
- (CommonInfo *)di);
- si->nDoodads++;
- }
- else {
- info->doodads= (DoodadInfo *)AddCommonInfo(&info->doodads->defs,
- (CommonInfo *)di);
- info->nDoodads++;
- }
+NextDoodad(SectionInfo * si, GeometryInfo * info)
+{
+ DoodadInfo *di;
+
+ di = uTypedCalloc(1, DoodadInfo);
+ if (di)
+ {
+ if (si)
+ {
+ si->doodads = (DoodadInfo *) AddCommonInfo(&si->doodads->defs,
+ (CommonInfo *) di);
+ si->nDoodads++;
+ }
+ else
+ {
+ info->doodads =
+ (DoodadInfo *) AddCommonInfo(&info->doodads->defs,
+ (CommonInfo *) di);
+ info->nDoodads++;
+ }
}
return di;
}
static Bool
-AddDoodad(SectionInfo *si,GeometryInfo *info,DoodadInfo *new)
-{
-DoodadInfo * old;
-
- old= FindDoodadByName((si?si->doodads:info->doodads),new->name);
- if (old!=NULL) {
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple doodads named \"%s\"\n",
- XkbAtomText(info->dpy,old->name,XkbMessage));
- ACTION("Using last definition\n");
- }
- ReplaceDoodad(old,new);
- old->section= si;
- return True;
- }
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple doodads named \"%s\"\n",
- XkbAtomText(info->dpy,old->name,XkbMessage));
- ACTION("Using first definition\n");
- }
- return True;
- }
- old= new;
- if ((new= NextDoodad(si,info))==NULL)
- return False;
- ReplaceDoodad(new,old);
- new->section= si;
- new->defs.next= NULL;
+AddDoodad(SectionInfo * si, GeometryInfo * info, DoodadInfo * new)
+{
+ DoodadInfo *old;
+
+ old = FindDoodadByName((si ? si->doodads : info->doodads), new->name);
+ if (old != NULL)
+ {
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Multiple doodads named \"%s\"\n",
+ XkbAtomText(info->dpy, old->name, XkbMessage));
+ ACTION("Using last definition\n");
+ }
+ ReplaceDoodad(old, new);
+ old->section = si;
+ return True;
+ }
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple doodads named \"%s\"\n",
+ XkbAtomText(info->dpy, old->name, XkbMessage));
+ ACTION("Using first definition\n");
+ }
+ return True;
+ }
+ old = new;
+ if ((new = NextDoodad(si, info)) == NULL)
+ return False;
+ ReplaceDoodad(new, old);
+ new->section = si;
+ new->defs.next = NULL;
return True;
}
static DoodadInfo *
-FindDfltDoodadByTypeName(char *name,SectionInfo *si,GeometryInfo *info)
-{
-DoodadInfo * dflt;
-unsigned type;
-
- if (uStrCaseCmp(name,"outline")==0) type= XkbOutlineDoodad;
- else if (uStrCaseCmp(name,"solid")==0) type= XkbSolidDoodad;
- else if (uStrCaseCmp(name,"text")==0) type= XkbTextDoodad;
- else if (uStrCaseCmp(name,"indicator")==0) type= XkbIndicatorDoodad;
- else if (uStrCaseCmp(name,"logo")==0) type= XkbLogoDoodad;
- else return NULL;
- if ((si)&&(si->dfltDoodads))
- dflt= FindDoodadByType(si->dfltDoodads,type);
- else dflt= NULL;
- if ((!dflt)&&(info->dfltDoodads))
- dflt= FindDoodadByType(info->dfltDoodads,type);
- if (dflt==NULL) {
- dflt= NextDfltDoodad(si,info);
- if (dflt!=NULL) {
- dflt->name= None;
- dflt->type= type;
- }
+FindDfltDoodadByTypeName(char *name, SectionInfo * si, GeometryInfo * info)
+{
+ DoodadInfo *dflt;
+ unsigned type;
+
+ if (uStrCaseCmp(name, "outline") == 0)
+ type = XkbOutlineDoodad;
+ else if (uStrCaseCmp(name, "solid") == 0)
+ type = XkbSolidDoodad;
+ else if (uStrCaseCmp(name, "text") == 0)
+ type = XkbTextDoodad;
+ else if (uStrCaseCmp(name, "indicator") == 0)
+ type = XkbIndicatorDoodad;
+ else if (uStrCaseCmp(name, "logo") == 0)
+ type = XkbLogoDoodad;
+ else
+ return NULL;
+ if ((si) && (si->dfltDoodads))
+ dflt = FindDoodadByType(si->dfltDoodads, type);
+ else
+ dflt = NULL;
+ if ((!dflt) && (info->dfltDoodads))
+ dflt = FindDoodadByType(info->dfltDoodads, type);
+ if (dflt == NULL)
+ {
+ dflt = NextDfltDoodad(si, info);
+ if (dflt != NULL)
+ {
+ dflt->name = None;
+ dflt->type = type;
+ }
}
return dflt;
}
@@ -919,55 +1006,66 @@ unsigned type;
/***====================================================================***/
static Bool
-AddOverlay(SectionInfo *si,GeometryInfo *info,OverlayInfo *new)
-{
-OverlayInfo * old;
-
- for (old=si->overlays;old!=NULL;old=(OverlayInfo *)old->defs.next) {
- if (old->name==new->name)
- break;
- }
- if (old!=NULL) {
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN2("Multiple overlays named \"%s\" for section \"%s\"\n",
- XkbAtomText(info->dpy,old->name,XkbMessage),
- XkbAtomText(info->dpy,si->name,XkbMessage));
- ACTION("Using last definition\n");
- }
- ClearOverlayInfo(old);
- old->nKeys= new->nKeys;
- old->keys= new->keys;
- new->nKeys= 0;
- new->keys= NULL;
- return True;
- }
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN2("Multiple doodads named \"%s\" in section \"%s\"\n",
- XkbAtomText(info->dpy,old->name,XkbMessage),
- XkbAtomText(info->dpy,si->name,XkbMessage));
- ACTION("Using first definition\n");
- }
- return True;
- }
- old= new;
- new= uTypedCalloc(1,OverlayInfo);
- if (!new) {
- if (warningLevel>0) {
- WSGO("Couldn't allocate a new OverlayInfo\n");
- ACTION2("Overlay \"%s\" in section \"%s\" will be incomplete\n",
- XkbAtomText(info->dpy,old->name,XkbMessage),
- XkbAtomText(info->dpy,si->name,XkbMessage));
- }
- return False;
- }
- *new= *old;
- old->nKeys= 0;
- old->keys= NULL;
- si->overlays= (OverlayInfo *)AddCommonInfo(&si->overlays->defs,
- (CommonInfo *)new);
+AddOverlay(SectionInfo * si, GeometryInfo * info, OverlayInfo * new)
+{
+ OverlayInfo *old;
+
+ for (old = si->overlays; old != NULL;
+ old = (OverlayInfo *) old->defs.next)
+ {
+ if (old->name == new->name)
+ break;
+ }
+ if (old != NULL)
+ {
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN2
+ ("Multiple overlays named \"%s\" for section \"%s\"\n",
+ XkbAtomText(info->dpy, old->name, XkbMessage),
+ XkbAtomText(info->dpy, si->name, XkbMessage));
+ ACTION("Using last definition\n");
+ }
+ ClearOverlayInfo(old);
+ old->nKeys = new->nKeys;
+ old->keys = new->keys;
+ new->nKeys = 0;
+ new->keys = NULL;
+ return True;
+ }
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN2("Multiple doodads named \"%s\" in section \"%s\"\n",
+ XkbAtomText(info->dpy, old->name, XkbMessage),
+ XkbAtomText(info->dpy, si->name, XkbMessage));
+ ACTION("Using first definition\n");
+ }
+ return True;
+ }
+ old = new;
+ new = uTypedCalloc(1, OverlayInfo);
+ if (!new)
+ {
+ if (warningLevel > 0)
+ {
+ WSGO("Couldn't allocate a new OverlayInfo\n");
+ ACTION2
+ ("Overlay \"%s\" in section \"%s\" will be incomplete\n",
+ XkbAtomText(info->dpy, old->name, XkbMessage),
+ XkbAtomText(info->dpy, si->name, XkbMessage));
+ }
+ return False;
+ }
+ *new = *old;
+ old->nKeys = 0;
+ old->keys = NULL;
+ si->overlays = (OverlayInfo *) AddCommonInfo(&si->overlays->defs,
+ (CommonInfo *) new);
si->nOverlays++;
return True;
}
@@ -975,79 +1073,91 @@ OverlayInfo * old;
/***====================================================================***/
static SectionInfo *
-NextSection(GeometryInfo *info)
-{
-SectionInfo * si;
-
- si= uTypedAlloc(SectionInfo);
- if (si) {
- *si= info->dfltSection;
- si->defs.defined&= ~_GS_Default;
- si->defs.next= NULL;
- si->nRows= 0;
- si->rows= NULL;
- info->sections= (SectionInfo *)AddCommonInfo(&info->sections->defs,
- (CommonInfo *)si);
- info->nSections++;
+NextSection(GeometryInfo * info)
+{
+ SectionInfo *si;
+
+ si = uTypedAlloc(SectionInfo);
+ if (si)
+ {
+ *si = info->dfltSection;
+ si->defs.defined &= ~_GS_Default;
+ si->defs.next = NULL;
+ si->nRows = 0;
+ si->rows = NULL;
+ info->sections =
+ (SectionInfo *) AddCommonInfo(&info->sections->defs,
+ (CommonInfo *) si);
+ info->nSections++;
}
return si;
}
static SectionInfo *
-FindMatchingSection(GeometryInfo *info,SectionInfo *new)
+FindMatchingSection(GeometryInfo * info, SectionInfo * new)
{
-SectionInfo * old;
+ SectionInfo *old;
- for (old=info->sections;old!=NULL;old=(SectionInfo *)old->defs.next) {
- if (new->name==old->name)
- return old;
+ for (old = info->sections; old != NULL;
+ old = (SectionInfo *) old->defs.next)
+ {
+ if (new->name == old->name)
+ return old;
}
return NULL;
}
static Bool
-AddSection(GeometryInfo *info,SectionInfo *new)
+AddSection(GeometryInfo * info, SectionInfo * new)
{
-SectionInfo * old;
+ SectionInfo *old;
- old= FindMatchingSection(info,new);
- if (old!=NULL) {
+ old = FindMatchingSection(info, new);
+ if (old != NULL)
+ {
#ifdef NOTDEF
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- SectionInfo *next= (SectionInfo *)old->defs.next;
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Duplicate shape name \"%s\"\n",shText(info->dpy,old));
- ACTION("Using last definition\n");
- }
- *old= *new;
- old->defs.next= &next->defs;
- return True;
- }
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple shapes named \"%s\"\n",shText(info->dpy,old));
- ACTION("Using first definition\n");
- }
- return True;
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ SectionInfo *next = (SectionInfo *) old->defs.next;
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Duplicate shape name \"%s\"\n",
+ shText(info->dpy, old));
+ ACTION("Using last definition\n");
+ }
+ *old = *new;
+ old->defs.next = &next->defs;
+ return True;
+ }
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple shapes named \"%s\"\n", shText(info->dpy, old));
+ ACTION("Using first definition\n");
+ }
+ return True;
#else
- WARN("Don't know how to merge sections yet\n");
+ WARN("Don't know how to merge sections yet\n");
#endif
}
- old= new;
- if ((new= NextSection(info))==NULL)
- return False;
- *new= *old;
- new->defs.next= NULL;
- old->nRows= old->nDoodads= old->nOverlays= 0;
- old->rows= NULL;
- old->doodads= NULL;
- old->overlays= NULL;
- if (new->doodads) {
- DoodadInfo *di;
- for (di=new->doodads;di;di=(DoodadInfo *)di->defs.next) {
- di->section= new;
- }
+ old = new;
+ if ((new = NextSection(info)) == NULL)
+ return False;
+ *new = *old;
+ new->defs.next = NULL;
+ old->nRows = old->nDoodads = old->nOverlays = 0;
+ old->rows = NULL;
+ old->doodads = NULL;
+ old->overlays = NULL;
+ if (new->doodads)
+ {
+ DoodadInfo *di;
+ for (di = new->doodads; di; di = (DoodadInfo *) di->defs.next)
+ {
+ di->section = new;
+ }
}
return True;
}
@@ -1055,302 +1165,344 @@ SectionInfo * old;
/***====================================================================***/
static RowInfo *
-NextRow(SectionInfo *si)
-{
-RowInfo * row;
-
- row= uTypedAlloc(RowInfo);
- if (row) {
- *row= si->dfltRow;
- row->defs.defined&= ~_GR_Default;
- row->defs.next= NULL;
- row->nKeys= 0;
- row->keys= NULL;
- si->rows= (RowInfo *)AddCommonInfo(&si->rows->defs,(CommonInfo *)row);
- row->index= si->nRows++;
+NextRow(SectionInfo * si)
+{
+ RowInfo *row;
+
+ row = uTypedAlloc(RowInfo);
+ if (row)
+ {
+ *row = si->dfltRow;
+ row->defs.defined &= ~_GR_Default;
+ row->defs.next = NULL;
+ row->nKeys = 0;
+ row->keys = NULL;
+ si->rows =
+ (RowInfo *) AddCommonInfo(&si->rows->defs, (CommonInfo *) row);
+ row->index = si->nRows++;
}
return row;
}
static Bool
-AddRow(SectionInfo *si,RowInfo *new)
+AddRow(SectionInfo * si, RowInfo * new)
{
-RowInfo * old;
+ RowInfo *old;
- old= new;
- if ((new= NextRow(si))==NULL)
- return False;
- *new= *old;
- new->defs.next= NULL;
- old->nKeys= 0;
- old->keys= NULL;
+ old = new;
+ if ((new = NextRow(si)) == NULL)
+ return False;
+ *new = *old;
+ new->defs.next = NULL;
+ old->nKeys = 0;
+ old->keys = NULL;
return True;
}
/***====================================================================***/
static KeyInfo *
-NextKey(RowInfo *row)
+NextKey(RowInfo * row)
{
-KeyInfo * key;
+ KeyInfo *key;
- key= uTypedAlloc(KeyInfo);
- if (key) {
- *key= row->dfltKey;
- key->defs.defined&= ~_GK_Default;
- key->defs.next= NULL;
- key->index= row->nKeys++;
+ key = uTypedAlloc(KeyInfo);
+ if (key)
+ {
+ *key = row->dfltKey;
+ key->defs.defined &= ~_GK_Default;
+ key->defs.next = NULL;
+ key->index = row->nKeys++;
}
return key;
}
static Bool
-AddKey(RowInfo *row,KeyInfo *new)
+AddKey(RowInfo * row, KeyInfo * new)
{
-KeyInfo * old;
+ KeyInfo *old;
- old= new;
- if ((new= NextKey(row))==NULL)
- return False;
- *new= *old;
- new->defs.next= NULL;
- row->keys= (KeyInfo *)AddCommonInfo(&row->keys->defs,(CommonInfo *)new);
+ old = new;
+ if ((new = NextKey(row)) == NULL)
+ return False;
+ *new = *old;
+ new->defs.next = NULL;
+ row->keys =
+ (KeyInfo *) AddCommonInfo(&row->keys->defs, (CommonInfo *) new);
return True;
}
/***====================================================================***/
static void
-MergeIncludedGeometry(GeometryInfo *into,GeometryInfo *from,unsigned merge)
-{
-Bool clobber;
-
- if (from->errorCount>0) {
- into->errorCount+= from->errorCount;
- return;
- }
- clobber= (merge==MergeOverride)||(merge==MergeReplace);
- if (into->name==NULL) {
- into->name= from->name;
- from->name= NULL;
- }
- if ((into->widthMM==0)||((from->widthMM!=0)&&clobber))
- into->widthMM= from->widthMM;
- if ((into->heightMM==0)||((from->heightMM!=0)&&clobber))
- into->heightMM= from->heightMM;
- if ((into->font==None)||((from->font!=None)&&clobber))
- into->font= from->font;
- if ((into->fontSlant==None)||((from->fontSlant!=None)&&clobber))
- into->fontSlant= from->fontSlant;
- if ((into->fontWeight==None)||((from->fontWeight!=None)&&clobber))
- into->fontWeight= from->fontWeight;
- if ((into->fontSetWidth==None)||((from->fontSetWidth!=None)&&clobber))
- into->fontSetWidth= from->fontSetWidth;
- if ((into->fontVariant==None)||((from->fontVariant!=None)&&clobber))
- into->fontVariant= from->fontVariant;
- if ((into->fontSize==0)||((from->fontSize!=0)&&clobber))
- into->fontSize= from->fontSize;
- if ((into->fontEncoding==None)||((from->fontEncoding!=None)&&clobber))
- into->fontEncoding= from->fontEncoding;
- if ((into->fontSpec==None)||((from->fontSpec!=None)&&clobber))
- into->fontSpec= from->fontSpec;
- if ((into->baseColor==None)||((from->baseColor!=None)&&clobber))
- into->baseColor= from->baseColor;
- if ((into->labelColor==None)||((from->labelColor!=None)&&clobber))
- into->labelColor= from->labelColor;
- into->nextPriority= from->nextPriority;
- if (from->props!=NULL) {
- PropertyInfo *pi;
- for (pi=from->props;pi;pi=(PropertyInfo *)pi->defs.next) {
- if (!AddProperty(into,pi))
- into->errorCount++;
- }
- }
- if (from->shapes!=NULL) {
- ShapeInfo * si;
-
- for (si=from->shapes;si;si=(ShapeInfo *)si->defs.next) {
- if (!AddShape(into,si))
- into->errorCount++;
- }
- }
- if (from->sections!=NULL) {
- SectionInfo * si;
-
- for (si=from->sections;si;si=(SectionInfo *)si->defs.next) {
- if (!AddSection(into,si))
- into->errorCount++;
- }
- }
- if (from->doodads!=NULL) {
- DoodadInfo * di;
-
- for (di=from->doodads;di;di=(DoodadInfo *)di->defs.next) {
- if (!AddDoodad(NULL,into,di))
- into->errorCount++;
- }
- }
- if (!MergeAliases(&into->aliases,&from->aliases,merge))
- into->errorCount++;
+MergeIncludedGeometry(GeometryInfo * into, GeometryInfo * from,
+ unsigned merge)
+{
+ Bool clobber;
+
+ if (from->errorCount > 0)
+ {
+ into->errorCount += from->errorCount;
+ return;
+ }
+ clobber = (merge == MergeOverride) || (merge == MergeReplace);
+ if (into->name == NULL)
+ {
+ into->name = from->name;
+ from->name = NULL;
+ }
+ if ((into->widthMM == 0) || ((from->widthMM != 0) && clobber))
+ into->widthMM = from->widthMM;
+ if ((into->heightMM == 0) || ((from->heightMM != 0) && clobber))
+ into->heightMM = from->heightMM;
+ if ((into->font == None) || ((from->font != None) && clobber))
+ into->font = from->font;
+ if ((into->fontSlant == None) || ((from->fontSlant != None) && clobber))
+ into->fontSlant = from->fontSlant;
+ if ((into->fontWeight == None) || ((from->fontWeight != None) && clobber))
+ into->fontWeight = from->fontWeight;
+ if ((into->fontSetWidth == None)
+ || ((from->fontSetWidth != None) && clobber))
+ into->fontSetWidth = from->fontSetWidth;
+ if ((into->fontVariant == None)
+ || ((from->fontVariant != None) && clobber))
+ into->fontVariant = from->fontVariant;
+ if ((into->fontSize == 0) || ((from->fontSize != 0) && clobber))
+ into->fontSize = from->fontSize;
+ if ((into->fontEncoding == None)
+ || ((from->fontEncoding != None) && clobber))
+ into->fontEncoding = from->fontEncoding;
+ if ((into->fontSpec == None) || ((from->fontSpec != None) && clobber))
+ into->fontSpec = from->fontSpec;
+ if ((into->baseColor == None) || ((from->baseColor != None) && clobber))
+ into->baseColor = from->baseColor;
+ if ((into->labelColor == None) || ((from->labelColor != None) && clobber))
+ into->labelColor = from->labelColor;
+ into->nextPriority = from->nextPriority;
+ if (from->props != NULL)
+ {
+ PropertyInfo *pi;
+ for (pi = from->props; pi; pi = (PropertyInfo *) pi->defs.next)
+ {
+ if (!AddProperty(into, pi))
+ into->errorCount++;
+ }
+ }
+ if (from->shapes != NULL)
+ {
+ ShapeInfo *si;
+
+ for (si = from->shapes; si; si = (ShapeInfo *) si->defs.next)
+ {
+ if (!AddShape(into, si))
+ into->errorCount++;
+ }
+ }
+ if (from->sections != NULL)
+ {
+ SectionInfo *si;
+
+ for (si = from->sections; si; si = (SectionInfo *) si->defs.next)
+ {
+ if (!AddSection(into, si))
+ into->errorCount++;
+ }
+ }
+ if (from->doodads != NULL)
+ {
+ DoodadInfo *di;
+
+ for (di = from->doodads; di; di = (DoodadInfo *) di->defs.next)
+ {
+ if (!AddDoodad(NULL, into, di))
+ into->errorCount++;
+ }
+ }
+ if (!MergeAliases(&into->aliases, &from->aliases, merge))
+ into->errorCount++;
return;
}
-typedef void (*FileHandler)(
- XkbFile * /* file */,
- XkbDescPtr /* xkb */,
- unsigned /* merge */,
- GeometryInfo * /* info */
-);
+typedef void (*FileHandler) (XkbFile * /* file */ ,
+ XkbDescPtr /* xkb */ ,
+ unsigned /* merge */ ,
+ GeometryInfo * /* info */
+ );
static Bool
-HandleIncludeGeometry(IncludeStmt *stmt,XkbDescPtr xkb,GeometryInfo *info,
- FileHandler hndlr)
-{
-unsigned newMerge;
-XkbFile * rtrn;
-GeometryInfo included;
-Bool haveSelf;
-
- haveSelf= False;
- if ((stmt->file==NULL)&&(stmt->map==NULL)) {
- haveSelf= True;
- included= *info;
- bzero(info,sizeof(GeometryInfo));
- }
- else if (ProcessIncludeFile(stmt,XkmGeometryIndex,&rtrn,&newMerge)) {
- InitGeometryInfo(&included,rtrn->id,newMerge);
- included.nextPriority= info->nextPriority;
- included.dfltCornerRadius= info->dfltCornerRadius;
- DupSectionInfo(&included.dfltSection,&info->dfltSection,info);
- (*hndlr)(rtrn,xkb,MergeOverride,&included);
- if (stmt->stmt!=NULL) {
- if (included.name!=NULL)
- uFree(included.name);
- included.name= stmt->stmt;
- stmt->stmt= NULL;
- }
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- if ((stmt->next!=NULL)&&(included.errorCount<1)) {
- IncludeStmt * next;
- unsigned op;
- GeometryInfo next_incl;
-
- for (next=stmt->next;next!=NULL;next=next->next) {
- if ((next->file==NULL)&&(next->map==NULL)) {
- haveSelf= True;
- MergeIncludedGeometry(&included,info,next->merge);
- ClearGeometryInfo(info);
- }
- else if (ProcessIncludeFile(next,XkmGeometryIndex,&rtrn,&op)) {
- InitGeometryInfo(&next_incl,rtrn->id,op);
- next_incl.nextPriority= included.nextPriority;
- next_incl.dfltCornerRadius= included.dfltCornerRadius;
- DupSectionInfo(&next_incl.dfltSection,&included.dfltSection,
- &included);
- (*hndlr)(rtrn,xkb,MergeOverride,&next_incl);
- MergeIncludedGeometry(&included,&next_incl,op);
- ClearGeometryInfo(&next_incl);
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- }
+HandleIncludeGeometry(IncludeStmt * stmt, XkbDescPtr xkb, GeometryInfo * info,
+ FileHandler hndlr)
+{
+ unsigned newMerge;
+ XkbFile *rtrn;
+ GeometryInfo included;
+ Bool haveSelf;
+
+ haveSelf = False;
+ if ((stmt->file == NULL) && (stmt->map == NULL))
+ {
+ haveSelf = True;
+ included = *info;
+ bzero(info, sizeof(GeometryInfo));
+ }
+ else if (ProcessIncludeFile(stmt, XkmGeometryIndex, &rtrn, &newMerge))
+ {
+ InitGeometryInfo(&included, rtrn->id, newMerge);
+ included.nextPriority = info->nextPriority;
+ included.dfltCornerRadius = info->dfltCornerRadius;
+ DupSectionInfo(&included.dfltSection, &info->dfltSection, info);
+ (*hndlr) (rtrn, xkb, MergeOverride, &included);
+ if (stmt->stmt != NULL)
+ {
+ if (included.name != NULL)
+ uFree(included.name);
+ included.name = stmt->stmt;
+ stmt->stmt = NULL;
+ }
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ if ((stmt->next != NULL) && (included.errorCount < 1))
+ {
+ IncludeStmt *next;
+ unsigned op;
+ GeometryInfo next_incl;
+
+ for (next = stmt->next; next != NULL; next = next->next)
+ {
+ if ((next->file == NULL) && (next->map == NULL))
+ {
+ haveSelf = True;
+ MergeIncludedGeometry(&included, info, next->merge);
+ ClearGeometryInfo(info);
+ }
+ else if (ProcessIncludeFile(next, XkmGeometryIndex, &rtrn, &op))
+ {
+ InitGeometryInfo(&next_incl, rtrn->id, op);
+ next_incl.nextPriority = included.nextPriority;
+ next_incl.dfltCornerRadius = included.dfltCornerRadius;
+ DupSectionInfo(&next_incl.dfltSection,
+ &included.dfltSection, &included);
+ (*hndlr) (rtrn, xkb, MergeOverride, &next_incl);
+ MergeIncludedGeometry(&included, &next_incl, op);
+ ClearGeometryInfo(&next_incl);
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ }
}
if (haveSelf)
- *info= included;
- else {
- MergeIncludedGeometry(info,&included,newMerge);
- ClearGeometryInfo(&included);
+ *info = included;
+ else
+ {
+ MergeIncludedGeometry(info, &included, newMerge);
+ ClearGeometryInfo(&included);
}
- return (info->errorCount==0);
+ return (info->errorCount == 0);
}
static int
-SetShapeField( ShapeInfo * si,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- GeometryInfo * info)
-{
-ExprResult tmp;
-
- if ((uStrCaseCmp(field,"radius")==0)||(uStrCaseCmp(field,"corner")==0)||
- (uStrCaseCmp(field,"cornerradius")==0)) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("key shape",field,shText(info->dpy,si));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("key shape",field,
- shText(info->dpy,si),"number");
- }
- if (si)
- si->dfltCornerRadius= tmp.ival;
- else info->dfltCornerRadius= tmp.ival;
- return True;
+SetShapeField(ShapeInfo * si,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, GeometryInfo * info)
+{
+ ExprResult tmp;
+
+ if ((uStrCaseCmp(field, "radius") == 0)
+ || (uStrCaseCmp(field, "corner") == 0)
+ || (uStrCaseCmp(field, "cornerradius") == 0))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("key shape", field, shText(info->dpy, si));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("key shape", field,
+ shText(info->dpy, si), "number");
+ }
+ if (si)
+ si->dfltCornerRadius = tmp.ival;
+ else
+ info->dfltCornerRadius = tmp.ival;
+ return True;
}
info->errorCount++;
- return ReportBadField("key shape",field,shText(info->dpy,si));
+ return ReportBadField("key shape", field, shText(info->dpy, si));
}
static int
-SetShapeDoodadField( DoodadInfo * di,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SectionInfo * si,
- GeometryInfo * info)
-{
-ExprResult tmp;
-const char *typeName;
-
- typeName= (di->type==XkbSolidDoodad?"solid doodad":"outline doodad");
- if ((!uStrCaseCmp(field,"corner"))||(!uStrCaseCmp(field,"cornerradius"))) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Corner;
- di->corner= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"angle")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Angle;
- di->angle= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"shape")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"string");
- }
- di->shape= XkbInternAtom(info->dpy,tmp.str,False);
- di->defs.defined|= _GD_Shape;
- return True;
- }
- return ReportBadField(typeName,field,ddText(info->dpy,di));
+SetShapeDoodadField(DoodadInfo * di,
+ char *field,
+ ExprDef * arrayNdx,
+ ExprDef * value, SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult tmp;
+ const char *typeName;
+
+ typeName =
+ (di->type == XkbSolidDoodad ? "solid doodad" : "outline doodad");
+ if ((!uStrCaseCmp(field, "corner"))
+ || (!uStrCaseCmp(field, "cornerradius")))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Corner;
+ di->corner = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "angle") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Angle;
+ di->angle = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "shape") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "string");
+ }
+ di->shape = XkbInternAtom(info->dpy, tmp.str, False);
+ di->defs.defined |= _GD_Shape;
+ return True;
+ }
+ return ReportBadField(typeName, field, ddText(info->dpy, di));
}
#define FIELD_STRING 0
@@ -1358,873 +1510,1038 @@ const char *typeName;
#define FIELD_USHORT 2
static int
-SetTextDoodadField( DoodadInfo * di,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SectionInfo * si,
- GeometryInfo * info)
-{
-ExprResult tmp;
-unsigned def;
-unsigned type;
-char * typeName= "text doodad";
-union {
- Atom * str;
- short * ival;
- unsigned short * uval;
-} pField;
-
- if (uStrCaseCmp(field,"angle")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Angle;
- di->angle= tmp.ival;
- return True;
- }
- if (uStrCaseCmp(field,"width")==0) {
- type= FIELD_USHORT;
- pField.uval= &di->width;
- def= _GD_Width;
- }
- else if (uStrCaseCmp(field,"height")==0) {
- type= FIELD_USHORT;
- pField.uval= &di->height;
- def= _GD_Height;
- }
- else if (uStrCaseCmp(field,"text")==0) {
- type= FIELD_STRING;
- pField.str= &di->text;
- def= _GD_Text;
- }
- else if (uStrCaseCmp(field,"font")==0) {
- type= FIELD_STRING;
- pField.str= &di->font;
- def= _GD_Font;
- }
- else if ((uStrCaseCmp(field,"fontslant")==0)||
- (uStrCaseCmp(field,"slant")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontSlant;
- def= _GD_FontSlant;
- }
- else if ((uStrCaseCmp(field,"fontweight")==0)||
- (uStrCaseCmp(field,"weight")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontWeight;
- def= _GD_FontWeight;
- }
- else if ((uStrCaseCmp(field,"fontwidth")==0)||
- (uStrCaseCmp(field,"setwidth")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontSetWidth;
- def= _GD_FontSetWidth;
- }
- else if ((uStrCaseCmp(field,"fontvariant")==0)||
- (uStrCaseCmp(field,"variant")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontVariant;
- def= _GD_FontVariant;
- }
- else if ((uStrCaseCmp(field,"fontencoding")==0)||
- (uStrCaseCmp(field,"encoding")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontEncoding;
- def= _GD_FontEncoding;
- }
- else if ((uStrCaseCmp(field,"xfont")==0)||
- (uStrCaseCmp(field,"xfontname")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontSpec;
- def= _GD_FontSpec;
- }
- else if (uStrCaseCmp(field,"fontsize")==0) {
- type= FIELD_USHORT;
- pField.uval= &di->fontSize;
- def= _GD_FontSize;
- }
- else {
- return ReportBadField(typeName,field,ddText(info->dpy,di));
- }
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (type==FIELD_STRING) {
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),
- "string");
- }
- di->defs.defined|= def;
- *pField.str= XkbInternAtom(NULL,tmp.str,False);
- }
- else {
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- if ((type==FIELD_USHORT)&&(tmp.ival<0)) {
- info->errorCount++;
- return
- ReportBadType(typeName,field,ddText(info->dpy,di),"unsigned");
- }
- di->defs.defined|= def;
- if (type==FIELD_USHORT)
- *pField.uval= tmp.uval;
- else *pField.ival= tmp.ival;
+SetTextDoodadField(DoodadInfo * di,
+ char *field,
+ ExprDef * arrayNdx,
+ ExprDef * value, SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult tmp;
+ unsigned def;
+ unsigned type;
+ char *typeName = "text doodad";
+ union
+ {
+ Atom *str;
+ short *ival;
+ unsigned short *uval;
+ } pField;
+
+ if (uStrCaseCmp(field, "angle") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Angle;
+ di->angle = tmp.ival;
+ return True;
+ }
+ if (uStrCaseCmp(field, "width") == 0)
+ {
+ type = FIELD_USHORT;
+ pField.uval = &di->width;
+ def = _GD_Width;
+ }
+ else if (uStrCaseCmp(field, "height") == 0)
+ {
+ type = FIELD_USHORT;
+ pField.uval = &di->height;
+ def = _GD_Height;
+ }
+ else if (uStrCaseCmp(field, "text") == 0)
+ {
+ type = FIELD_STRING;
+ pField.str = &di->text;
+ def = _GD_Text;
+ }
+ else if (uStrCaseCmp(field, "font") == 0)
+ {
+ type = FIELD_STRING;
+ pField.str = &di->font;
+ def = _GD_Font;
+ }
+ else if ((uStrCaseCmp(field, "fontslant") == 0) ||
+ (uStrCaseCmp(field, "slant") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontSlant;
+ def = _GD_FontSlant;
+ }
+ else if ((uStrCaseCmp(field, "fontweight") == 0) ||
+ (uStrCaseCmp(field, "weight") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontWeight;
+ def = _GD_FontWeight;
+ }
+ else if ((uStrCaseCmp(field, "fontwidth") == 0) ||
+ (uStrCaseCmp(field, "setwidth") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontSetWidth;
+ def = _GD_FontSetWidth;
+ }
+ else if ((uStrCaseCmp(field, "fontvariant") == 0) ||
+ (uStrCaseCmp(field, "variant") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontVariant;
+ def = _GD_FontVariant;
+ }
+ else if ((uStrCaseCmp(field, "fontencoding") == 0) ||
+ (uStrCaseCmp(field, "encoding") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontEncoding;
+ def = _GD_FontEncoding;
+ }
+ else if ((uStrCaseCmp(field, "xfont") == 0) ||
+ (uStrCaseCmp(field, "xfontname") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontSpec;
+ def = _GD_FontSpec;
+ }
+ else if (uStrCaseCmp(field, "fontsize") == 0)
+ {
+ type = FIELD_USHORT;
+ pField.uval = &di->fontSize;
+ def = _GD_FontSize;
+ }
+ else
+ {
+ return ReportBadField(typeName, field, ddText(info->dpy, di));
+ }
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (type == FIELD_STRING)
+ {
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "string");
+ }
+ di->defs.defined |= def;
+ *pField.str = XkbInternAtom(NULL, tmp.str, False);
+ }
+ else
+ {
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ if ((type == FIELD_USHORT) && (tmp.ival < 0))
+ {
+ info->errorCount++;
+ return
+ ReportBadType(typeName, field, ddText(info->dpy, di),
+ "unsigned");
+ }
+ di->defs.defined |= def;
+ if (type == FIELD_USHORT)
+ *pField.uval = tmp.uval;
+ else
+ *pField.ival = tmp.ival;
}
return True;
}
static int
-SetIndicatorDoodadField( DoodadInfo * di,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SectionInfo * si,
- GeometryInfo * info)
-{
-ExprResult tmp;
-
- if ((uStrCaseCmp(field,"oncolor")==0)||(uStrCaseCmp(field,"offcolor")==0)
- ||(uStrCaseCmp(field,"shape")==0)) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("indicator doodad",field,
- ddText(info->dpy,di));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("indicator doodad",field,ddText(info->dpy,di),
- "string");
- }
- if (uStrCaseCmp(field,"oncolor")==0) {
- di->defs.defined|= _GD_Color;
- di->color= XkbInternAtom(NULL,tmp.str,False);
- }
- else if (uStrCaseCmp(field,"offcolor")==0) {
- di->defs.defined|= _GD_OffColor;
- di->offColor= XkbInternAtom(NULL,tmp.str,False);
- }
- else if (uStrCaseCmp(field,"shape")==0) {
- di->defs.defined|= _GD_Shape;
- di->shape= XkbInternAtom(info->dpy,tmp.str,False);
- }
- return True;
- }
- return ReportBadField("indicator doodad",field,ddText(info->dpy,di));
+SetIndicatorDoodadField(DoodadInfo * di,
+ char *field,
+ ExprDef * arrayNdx,
+ ExprDef * value,
+ SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult tmp;
+
+ if ((uStrCaseCmp(field, "oncolor") == 0)
+ || (uStrCaseCmp(field, "offcolor") == 0)
+ || (uStrCaseCmp(field, "shape") == 0))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("indicator doodad", field,
+ ddText(info->dpy, di));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("indicator doodad", field,
+ ddText(info->dpy, di), "string");
+ }
+ if (uStrCaseCmp(field, "oncolor") == 0)
+ {
+ di->defs.defined |= _GD_Color;
+ di->color = XkbInternAtom(NULL, tmp.str, False);
+ }
+ else if (uStrCaseCmp(field, "offcolor") == 0)
+ {
+ di->defs.defined |= _GD_OffColor;
+ di->offColor = XkbInternAtom(NULL, tmp.str, False);
+ }
+ else if (uStrCaseCmp(field, "shape") == 0)
+ {
+ di->defs.defined |= _GD_Shape;
+ di->shape = XkbInternAtom(info->dpy, tmp.str, False);
+ }
+ return True;
+ }
+ return ReportBadField("indicator doodad", field, ddText(info->dpy, di));
}
static int
-SetLogoDoodadField( DoodadInfo * di,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SectionInfo * si,
- GeometryInfo * info)
-{
-ExprResult tmp;
-char * typeName= "logo doodad";
-
- if ((!uStrCaseCmp(field,"corner"))||(!uStrCaseCmp(field,"cornerradius"))) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Corner;
- di->corner= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"angle")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Angle;
- di->angle= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"shape")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"string");
- }
- di->shape= XkbInternAtom(info->dpy,tmp.str,False);
- di->defs.defined|= _GD_Shape;
- return True;
- }
- else if ((!uStrCaseCmp(field,"logoname"))||(!uStrCaseCmp(field,"name"))) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"string");
- }
- di->logoName= uStringDup(tmp.str);
- return True;
- }
- return ReportBadField(typeName,field,ddText(info->dpy,di));
+SetLogoDoodadField(DoodadInfo * di,
+ char *field,
+ ExprDef * arrayNdx,
+ ExprDef * value, SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult tmp;
+ char *typeName = "logo doodad";
+
+ if ((!uStrCaseCmp(field, "corner"))
+ || (!uStrCaseCmp(field, "cornerradius")))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Corner;
+ di->corner = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "angle") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Angle;
+ di->angle = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "shape") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "string");
+ }
+ di->shape = XkbInternAtom(info->dpy, tmp.str, False);
+ di->defs.defined |= _GD_Shape;
+ return True;
+ }
+ else if ((!uStrCaseCmp(field, "logoname"))
+ || (!uStrCaseCmp(field, "name")))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "string");
+ }
+ di->logoName = uStringDup(tmp.str);
+ return True;
+ }
+ return ReportBadField(typeName, field, ddText(info->dpy, di));
}
static int
-SetDoodadField( DoodadInfo * di,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SectionInfo * si,
- GeometryInfo * info)
-{
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"priority")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("doodad",field,ddText(info->dpy,di));
- }
- if (!ExprResolveInteger(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("doodad",field,ddText(info->dpy,di),"integer");
- }
- if ((tmp.ival<0)||(tmp.ival>XkbGeomMaxPriority)) {
- info->errorCount++;
- ERROR2("Doodad priority %d out of range (must be 0..%d)\n",
- tmp.ival,XkbGeomMaxPriority);
- ACTION1("Priority for doodad %s not changed",ddText(info->dpy,di));
- return False;
- }
- di->defs.defined|= _GD_Priority;
- di->priority= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"left")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("doodad",field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("doodad",field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Left;
- di->left= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"top")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("doodad",field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("doodad",field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Top;
- di->top= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"color")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("doodad",field,ddText(info->dpy,di));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("doodad",field,ddText(info->dpy,di),"string");
- }
- di->defs.defined|= _GD_Color;
- di->color= XkbInternAtom(NULL,tmp.str,False);
- return True;
- }
- switch (di->type) {
- case XkbOutlineDoodad:
- case XkbSolidDoodad:
- return SetShapeDoodadField(di,field,arrayNdx,value,si,info);
- case XkbTextDoodad:
- return SetTextDoodadField(di,field,arrayNdx,value,si,info);
- case XkbIndicatorDoodad:
- return SetIndicatorDoodadField(di,field,arrayNdx,value,si,info);
- case XkbLogoDoodad:
- return SetLogoDoodadField(di,field,arrayNdx,value,si,info);
- }
- WSGO1("Unknown doodad type %d in SetDoodadField\n",(unsigned int)di->type);
- ACTION2("Definition of %s in %s ignored\n",field,ddText(info->dpy,di));
+SetDoodadField(DoodadInfo * di,
+ char *field,
+ ExprDef * arrayNdx,
+ ExprDef * value, SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "priority") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("doodad", field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveInteger(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("doodad", field, ddText(info->dpy, di),
+ "integer");
+ }
+ if ((tmp.ival < 0) || (tmp.ival > XkbGeomMaxPriority))
+ {
+ info->errorCount++;
+ ERROR2("Doodad priority %d out of range (must be 0..%d)\n",
+ tmp.ival, XkbGeomMaxPriority);
+ ACTION1("Priority for doodad %s not changed",
+ ddText(info->dpy, di));
+ return False;
+ }
+ di->defs.defined |= _GD_Priority;
+ di->priority = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "left") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("doodad", field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("doodad", field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Left;
+ di->left = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "top") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("doodad", field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("doodad", field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Top;
+ di->top = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "color") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("doodad", field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("doodad", field, ddText(info->dpy, di),
+ "string");
+ }
+ di->defs.defined |= _GD_Color;
+ di->color = XkbInternAtom(NULL, tmp.str, False);
+ return True;
+ }
+ switch (di->type)
+ {
+ case XkbOutlineDoodad:
+ case XkbSolidDoodad:
+ return SetShapeDoodadField(di, field, arrayNdx, value, si, info);
+ case XkbTextDoodad:
+ return SetTextDoodadField(di, field, arrayNdx, value, si, info);
+ case XkbIndicatorDoodad:
+ return SetIndicatorDoodadField(di, field, arrayNdx, value, si, info);
+ case XkbLogoDoodad:
+ return SetLogoDoodadField(di, field, arrayNdx, value, si, info);
+ }
+ WSGO1("Unknown doodad type %d in SetDoodadField\n",
+ (unsigned int) di->type);
+ ACTION2("Definition of %s in %s ignored\n", field, ddText(info->dpy, di));
return False;
}
static int
-SetSectionField( SectionInfo * si,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- GeometryInfo * info)
-{
-unsigned short * pField;
-unsigned def;
-ExprResult tmp;
-
- pField= NULL;
- def= 0;
- if (uStrCaseCmp(field,"priority")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard section",field,scText(info->dpy,si));
- }
- if (!ExprResolveInteger(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- ReportBadType("keyboard section",field,scText(info->dpy,si),
- "integer");
- return False;
- }
- if ((tmp.ival<0)||(tmp.ival>XkbGeomMaxPriority)) {
- info->errorCount++;
- ERROR2("Section priority %d out of range (must be 0..%d)\n",
- tmp.ival,XkbGeomMaxPriority);
- ACTION1("Priority for section %s not changed",scText(info->dpy,si));
- return False;
- }
- si->priority= tmp.ival;
- si->defs.defined|= _GS_Priority;
- return True;
- }
- else if (uStrCaseCmp(field,"top")==0) {
- pField= &si->top;
- def= _GS_Top;
- }
- else if (uStrCaseCmp(field,"left")==0) {
- pField= &si->left;
- def= _GS_Left;
- }
- else if (uStrCaseCmp(field,"width")==0) {
- pField= &si->width;
- def= _GS_Width;
- }
- else if (uStrCaseCmp(field,"height")==0) {
- pField= &si->height;
- def= _GS_Height;
- }
- else if (uStrCaseCmp(field,"angle")==0) {
- pField= &si->angle;
- def= _GS_Angle;
- }
- else {
- info->errorCount++;
- return ReportBadField("keyboard section",field,scText(info->dpy,si));
- }
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard section",field,scText(info->dpy,si));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- ReportBadType("keyboard section",field,scText(info->dpy,si),"number");
- return False;
- }
- si->defs.defined|= def;
- *pField= tmp.uval;
+SetSectionField(SectionInfo * si,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, GeometryInfo * info)
+{
+ unsigned short *pField;
+ unsigned def;
+ ExprResult tmp;
+
+ pField = NULL;
+ def = 0;
+ if (uStrCaseCmp(field, "priority") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard section", field,
+ scText(info->dpy, si));
+ }
+ if (!ExprResolveInteger(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ ReportBadType("keyboard section", field,
+ scText(info->dpy, si), "integer");
+ return False;
+ }
+ if ((tmp.ival < 0) || (tmp.ival > XkbGeomMaxPriority))
+ {
+ info->errorCount++;
+ ERROR2("Section priority %d out of range (must be 0..%d)\n",
+ tmp.ival, XkbGeomMaxPriority);
+ ACTION1("Priority for section %s not changed",
+ scText(info->dpy, si));
+ return False;
+ }
+ si->priority = tmp.ival;
+ si->defs.defined |= _GS_Priority;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "top") == 0)
+ {
+ pField = &si->top;
+ def = _GS_Top;
+ }
+ else if (uStrCaseCmp(field, "left") == 0)
+ {
+ pField = &si->left;
+ def = _GS_Left;
+ }
+ else if (uStrCaseCmp(field, "width") == 0)
+ {
+ pField = &si->width;
+ def = _GS_Width;
+ }
+ else if (uStrCaseCmp(field, "height") == 0)
+ {
+ pField = &si->height;
+ def = _GS_Height;
+ }
+ else if (uStrCaseCmp(field, "angle") == 0)
+ {
+ pField = &si->angle;
+ def = _GS_Angle;
+ }
+ else
+ {
+ info->errorCount++;
+ return ReportBadField("keyboard section", field,
+ scText(info->dpy, si));
+ }
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard section", field,
+ scText(info->dpy, si));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ ReportBadType("keyboard section", field, scText(info->dpy, si),
+ "number");
+ return False;
+ }
+ si->defs.defined |= def;
+ *pField = tmp.uval;
return True;
}
static int
-SetRowField( RowInfo * row,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- GeometryInfo * info)
-{
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"top")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard row",field,rowText(info->dpy,row));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard row",field,rowText(info->dpy,row),
- "number");
- }
- row->defs.defined|= _GR_Top;
- row->top= tmp.uval;
- }
- else if (uStrCaseCmp(field,"left")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard row",field,rowText(info->dpy,row));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard row",field,rowText(info->dpy,row),
- "number");
- }
- row->defs.defined|= _GR_Left;
- row->left= tmp.uval;
- }
- else if (uStrCaseCmp(field,"vertical")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard row",field,rowText(info->dpy,row));
- }
- if (!ExprResolveBoolean(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard row",field,rowText(info->dpy,row),
- "boolean");
- }
- row->defs.defined|= _GR_Vertical;
- row->vertical= tmp.uval;
- }
- else {
- info->errorCount++;
- return ReportBadField("keyboard row",field,rowText(info->dpy,row));
+SetRowField(RowInfo * row,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, GeometryInfo * info)
+{
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "top") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard row", field,
+ rowText(info->dpy, row));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard row", field,
+ rowText(info->dpy, row), "number");
+ }
+ row->defs.defined |= _GR_Top;
+ row->top = tmp.uval;
+ }
+ else if (uStrCaseCmp(field, "left") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard row", field,
+ rowText(info->dpy, row));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard row", field,
+ rowText(info->dpy, row), "number");
+ }
+ row->defs.defined |= _GR_Left;
+ row->left = tmp.uval;
+ }
+ else if (uStrCaseCmp(field, "vertical") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard row", field,
+ rowText(info->dpy, row));
+ }
+ if (!ExprResolveBoolean(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard row", field,
+ rowText(info->dpy, row), "boolean");
+ }
+ row->defs.defined |= _GR_Vertical;
+ row->vertical = tmp.uval;
+ }
+ else
+ {
+ info->errorCount++;
+ return ReportBadField("keyboard row", field, rowText(info->dpy, row));
}
return True;
}
static int
-SetKeyField( KeyInfo *key,
- const char *field,
- ExprDef *arrayNdx,
- ExprDef *value,
- GeometryInfo *info)
-{
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"gap")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("key",field,keyText(key));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("key",field,keyText(key),"number");
- }
- key->defs.defined|= _GK_Gap;
- key->gap= tmp.ival;
- }
- else if (uStrCaseCmp(field,"shape")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("key",field,keyText(key));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("key",field,keyText(key),"string");
- }
- key->defs.defined|= _GK_Shape;
- key->shape= XkbInternAtom(info->dpy,tmp.str,False);
- }
- else if ((uStrCaseCmp(field,"color")==0)||
- (uStrCaseCmp(field,"keycolor")==0)) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("key",field,keyText(key));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("key",field,keyText(key),"string");
- }
- key->defs.defined|= _GK_Color;
- key->color= XkbInternAtom(NULL,tmp.str,False);
- }
- else if ((uStrCaseCmp(field,"name")==0)||(uStrCaseCmp(field,"keyname")==0)){
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("key",field,keyText(key));
- }
- if (!ExprResolveKeyName(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("key",field,keyText(key),"key name");
- }
- key->defs.defined|= _GK_Name;
- bzero(key->name,XkbKeyNameLength+1);
- strncpy(key->name,tmp.keyName.name,XkbKeyNameLength);
- }
- else {
- info->errorCount++;
- return ReportBadField("key",field,keyText(key));
+SetKeyField(KeyInfo * key,
+ const char *field,
+ ExprDef * arrayNdx, ExprDef * value, GeometryInfo * info)
+{
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "gap") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("key", field, keyText(key));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("key", field, keyText(key), "number");
+ }
+ key->defs.defined |= _GK_Gap;
+ key->gap = tmp.ival;
+ }
+ else if (uStrCaseCmp(field, "shape") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("key", field, keyText(key));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("key", field, keyText(key), "string");
+ }
+ key->defs.defined |= _GK_Shape;
+ key->shape = XkbInternAtom(info->dpy, tmp.str, False);
+ }
+ else if ((uStrCaseCmp(field, "color") == 0) ||
+ (uStrCaseCmp(field, "keycolor") == 0))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("key", field, keyText(key));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("key", field, keyText(key), "string");
+ }
+ key->defs.defined |= _GK_Color;
+ key->color = XkbInternAtom(NULL, tmp.str, False);
+ }
+ else if ((uStrCaseCmp(field, "name") == 0)
+ || (uStrCaseCmp(field, "keyname") == 0))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("key", field, keyText(key));
+ }
+ if (!ExprResolveKeyName(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("key", field, keyText(key), "key name");
+ }
+ key->defs.defined |= _GK_Name;
+ bzero(key->name, XkbKeyNameLength + 1);
+ strncpy(key->name, tmp.keyName.name, XkbKeyNameLength);
+ }
+ else
+ {
+ info->errorCount++;
+ return ReportBadField("key", field, keyText(key));
}
return True;
}
static int
-SetGeometryProperty(GeometryInfo *info,char *property,ExprDef *value)
+SetGeometryProperty(GeometryInfo * info, char *property, ExprDef * value)
{
-PropertyInfo pi;
-ExprResult result;
+ PropertyInfo pi;
+ ExprResult result;
- InitPropertyInfo(&pi,info);
- pi.name= property;
- if (!ExprResolveString(value,&result,NULL,NULL)) {
- info->errorCount++;
- ERROR("Property values must be type string\n");
- ACTION1("Ignoring illegal definition of \"%s\" property\n",property);
- return False;
+ InitPropertyInfo(&pi, info);
+ pi.name = property;
+ if (!ExprResolveString(value, &result, NULL, NULL))
+ {
+ info->errorCount++;
+ ERROR("Property values must be type string\n");
+ ACTION1("Ignoring illegal definition of \"%s\" property\n", property);
+ return False;
}
- pi.value= result.str;
- return AddProperty(info,&pi);
+ pi.value = result.str;
+ return AddProperty(info, &pi);
}
static int
-HandleGeometryVar(VarDef *stmt,XkbDescPtr xkb,GeometryInfo *info)
-{
-ExprResult elem,field,tmp;
-ExprDef * ndx;
-DoodadInfo * di;
-Atom * pField;
-
- if (ExprResolveLhs(stmt->name,&elem,&field,&ndx)==0)
- return 0; /* internal error, already reported */
- if (elem.str&&(uStrCaseCmp(elem.str,"shape")==0))
- return SetShapeField(NULL,field.str,ndx,stmt->value,info);
- if (elem.str&&(uStrCaseCmp(elem.str,"key")==0))
- return SetKeyField(&info->dfltSection.dfltRow.dfltKey,
- field.str,ndx,stmt->value,info);
- if (elem.str&&(uStrCaseCmp(elem.str,"row")==0))
- return SetRowField(&info->dfltSection.dfltRow,field.str,ndx,
- stmt->value,info);
- if (elem.str&&(uStrCaseCmp(elem.str,"section")==0)) {
- return SetSectionField(&info->dfltSection,field.str,ndx,stmt->value,
- info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"property")==0)) {
- if (ndx!=NULL) {
- info->errorCount++;
- ERROR1("The %s geometry property is not an array\n",field.str);
- ACTION("Ignoring illegal property definition\n");
- return False;
- }
- return SetGeometryProperty(info,field.str,stmt->value);
- }
- if (elem.str&&((di=FindDfltDoodadByTypeName(elem.str,NULL,info))!=NULL)) {
- return SetDoodadField(di,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"solid")==0)) {
- DoodadInfo *dflt;
- dflt= FindDoodadByType(info->dfltDoodads,XkbSolidDoodad);
- if (dflt==NULL)
- dflt= NextDfltDoodad(NULL,info);
- return SetDoodadField(dflt,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"outline")==0)) {
- DoodadInfo *dflt;
- dflt= FindDoodadByType(info->dfltDoodads,XkbOutlineDoodad);
- if (dflt==NULL)
- dflt= NextDfltDoodad(NULL,info);
- return SetDoodadField(dflt,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"text")==0)) {
- DoodadInfo *dflt;
- dflt= FindDoodadByType(info->dfltDoodads,XkbTextDoodad);
- if (dflt==NULL)
- dflt= NextDfltDoodad(NULL,info);
- return SetDoodadField(dflt,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"indicator")==0)) {
- DoodadInfo *dflt;
- dflt= FindDoodadByType(info->dfltDoodads,XkbIndicatorDoodad);
- if (dflt==NULL)
- dflt= NextDfltDoodad(NULL,info);
- return SetDoodadField(dflt,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"logo")==0)) {
- DoodadInfo *dflt;
- dflt= FindDoodadByType(info->dfltDoodads,XkbLogoDoodad);
- if (dflt==NULL)
- dflt= NextDfltDoodad(NULL,info);
- return SetDoodadField(dflt,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str) {
- WARN("Assignment to field of unknown element\n");
- ACTION2("No value assigned to %s.%s\n",elem.str,field.str);
- return False;
- }
-
- if ((uStrCaseCmp(field.str,"width")==0)||
- (uStrCaseCmp(field.str,"widthmm")==0)) {
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveFloat(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","number");
- }
- if (tmp.ival<1) {
- WARN("Keyboard width must be positive\n");
- ACTION1("Ignoring illegal keyboard width %s\n",
- XkbGeomFPText(tmp.ival,XkbMessage));
- return True;
- }
- if (info->widthMM!=0) {
- WARN("Keyboard width multiply defined\n");
- ACTION1("Using last definition (%s),",
- XkbGeomFPText(tmp.ival,XkbMessage));
- INFO1(" ignoring first (%s)\n",
- XkbGeomFPText(info->widthMM,XkbMessage));
- }
- info->widthMM= tmp.ival;
- return True;
- }
- else if ((uStrCaseCmp(field.str,"height")==0)||
- (uStrCaseCmp(field.str,"heightmm")==0)) {
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveFloat(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","number");
- }
- if (tmp.ival<1) {
- WARN("Keyboard height must be positive\n");
- ACTION1("Ignoring illegal keyboard height %s\n",
- XkbGeomFPText(tmp.ival,XkbMessage));
- return True;
- }
- if (info->heightMM!=0) {
- WARN("Keyboard height multiply defined\n");
- ACTION1("Using last definition (%s),",
- XkbGeomFPText(tmp.ival,XkbMessage));
- INFO1(" ignoring first (%s)\n",
- XkbGeomFPText(info->heightMM,XkbMessage));
- }
- info->heightMM= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field.str,"font")==0) {
- pField= &info->font;
- }
- else if ((uStrCaseCmp(field.str,"fontslant")==0)||
- (uStrCaseCmp(field.str,"slant")==0)) {
- pField= &info->fontSlant;
- }
- else if ((uStrCaseCmp(field.str,"fontweight")==0)||
- (uStrCaseCmp(field.str,"weight")==0)) {
- pField= &info->fontWeight;
- }
- else if ((uStrCaseCmp(field.str,"fontwidth")==0)||
- (uStrCaseCmp(field.str,"setwidth")==0)) {
- pField= &info->fontWeight;
- }
- else if ((uStrCaseCmp(field.str,"fontencoding")==0)||
- (uStrCaseCmp(field.str,"encoding")==0)) {
- pField= &info->fontEncoding;
- }
- else if ((uStrCaseCmp(field.str,"xfont")==0)||
- (uStrCaseCmp(field.str,"xfontname")==0)) {
- pField= &info->fontSpec;
- }
- else if (uStrCaseCmp(field.str,"fontsize")==0) {
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveFloat(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","number");
- }
- if ((tmp.ival<40)||(tmp.ival>2550)) {
- info->errorCount++;
- ERROR1("Illegal font size %d (must be 4..255)\n",tmp.ival);
- ACTION("Ignoring font size in keyboard geometry\n");
- return False;
- }
- info->fontSize= tmp.ival;
- return True;
- }
- else if ((uStrCaseCmp(field.str,"color")==0)||
- (uStrCaseCmp(field.str,"basecolor")==0)){
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveString(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","string");
- }
- info->baseColor= XkbInternAtom(NULL,tmp.str,False);
- return True;
- }
- else if (uStrCaseCmp(field.str,"labelcolor")==0){
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveString(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","string");
- }
- info->labelColor= XkbInternAtom(NULL,tmp.str,False);
- return True;
- }
- else {
- return SetGeometryProperty(info,field.str,stmt->value);
- }
-
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveString(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","string");
- }
- *pField= XkbInternAtom(NULL,tmp.str,False);
+HandleGeometryVar(VarDef * stmt, XkbDescPtr xkb, GeometryInfo * info)
+{
+ ExprResult elem, field, tmp;
+ ExprDef *ndx;
+ DoodadInfo *di;
+ Atom *pField;
+
+ if (ExprResolveLhs(stmt->name, &elem, &field, &ndx) == 0)
+ return 0; /* internal error, already reported */
+ if (elem.str && (uStrCaseCmp(elem.str, "shape") == 0))
+ return SetShapeField(NULL, field.str, ndx, stmt->value, info);
+ if (elem.str && (uStrCaseCmp(elem.str, "key") == 0))
+ return SetKeyField(&info->dfltSection.dfltRow.dfltKey,
+ field.str, ndx, stmt->value, info);
+ if (elem.str && (uStrCaseCmp(elem.str, "row") == 0))
+ return SetRowField(&info->dfltSection.dfltRow, field.str, ndx,
+ stmt->value, info);
+ if (elem.str && (uStrCaseCmp(elem.str, "section") == 0))
+ {
+ return SetSectionField(&info->dfltSection, field.str, ndx,
+ stmt->value, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "property") == 0))
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ ERROR1("The %s geometry property is not an array\n", field.str);
+ ACTION("Ignoring illegal property definition\n");
+ return False;
+ }
+ return SetGeometryProperty(info, field.str, stmt->value);
+ }
+ if (elem.str
+ && ((di = FindDfltDoodadByTypeName(elem.str, NULL, info)) != NULL))
+ {
+ return SetDoodadField(di, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "solid") == 0))
+ {
+ DoodadInfo *dflt;
+ dflt = FindDoodadByType(info->dfltDoodads, XkbSolidDoodad);
+ if (dflt == NULL)
+ dflt = NextDfltDoodad(NULL, info);
+ return SetDoodadField(dflt, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "outline") == 0))
+ {
+ DoodadInfo *dflt;
+ dflt = FindDoodadByType(info->dfltDoodads, XkbOutlineDoodad);
+ if (dflt == NULL)
+ dflt = NextDfltDoodad(NULL, info);
+ return SetDoodadField(dflt, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "text") == 0))
+ {
+ DoodadInfo *dflt;
+ dflt = FindDoodadByType(info->dfltDoodads, XkbTextDoodad);
+ if (dflt == NULL)
+ dflt = NextDfltDoodad(NULL, info);
+ return SetDoodadField(dflt, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "indicator") == 0))
+ {
+ DoodadInfo *dflt;
+ dflt = FindDoodadByType(info->dfltDoodads, XkbIndicatorDoodad);
+ if (dflt == NULL)
+ dflt = NextDfltDoodad(NULL, info);
+ return SetDoodadField(dflt, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "logo") == 0))
+ {
+ DoodadInfo *dflt;
+ dflt = FindDoodadByType(info->dfltDoodads, XkbLogoDoodad);
+ if (dflt == NULL)
+ dflt = NextDfltDoodad(NULL, info);
+ return SetDoodadField(dflt, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str)
+ {
+ WARN("Assignment to field of unknown element\n");
+ ACTION2("No value assigned to %s.%s\n", elem.str, field.str);
+ return False;
+ }
+
+ if ((uStrCaseCmp(field.str, "width") == 0) ||
+ (uStrCaseCmp(field.str, "widthmm") == 0))
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveFloat(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "number");
+ }
+ if (tmp.ival < 1)
+ {
+ WARN("Keyboard width must be positive\n");
+ ACTION1("Ignoring illegal keyboard width %s\n",
+ XkbGeomFPText(tmp.ival, XkbMessage));
+ return True;
+ }
+ if (info->widthMM != 0)
+ {
+ WARN("Keyboard width multiply defined\n");
+ ACTION1("Using last definition (%s),",
+ XkbGeomFPText(tmp.ival, XkbMessage));
+ INFO1(" ignoring first (%s)\n",
+ XkbGeomFPText(info->widthMM, XkbMessage));
+ }
+ info->widthMM = tmp.ival;
+ return True;
+ }
+ else if ((uStrCaseCmp(field.str, "height") == 0) ||
+ (uStrCaseCmp(field.str, "heightmm") == 0))
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveFloat(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "number");
+ }
+ if (tmp.ival < 1)
+ {
+ WARN("Keyboard height must be positive\n");
+ ACTION1("Ignoring illegal keyboard height %s\n",
+ XkbGeomFPText(tmp.ival, XkbMessage));
+ return True;
+ }
+ if (info->heightMM != 0)
+ {
+ WARN("Keyboard height multiply defined\n");
+ ACTION1("Using last definition (%s),",
+ XkbGeomFPText(tmp.ival, XkbMessage));
+ INFO1(" ignoring first (%s)\n",
+ XkbGeomFPText(info->heightMM, XkbMessage));
+ }
+ info->heightMM = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field.str, "font") == 0)
+ {
+ pField = &info->font;
+ }
+ else if ((uStrCaseCmp(field.str, "fontslant") == 0) ||
+ (uStrCaseCmp(field.str, "slant") == 0))
+ {
+ pField = &info->fontSlant;
+ }
+ else if ((uStrCaseCmp(field.str, "fontweight") == 0) ||
+ (uStrCaseCmp(field.str, "weight") == 0))
+ {
+ pField = &info->fontWeight;
+ }
+ else if ((uStrCaseCmp(field.str, "fontwidth") == 0) ||
+ (uStrCaseCmp(field.str, "setwidth") == 0))
+ {
+ pField = &info->fontWeight;
+ }
+ else if ((uStrCaseCmp(field.str, "fontencoding") == 0) ||
+ (uStrCaseCmp(field.str, "encoding") == 0))
+ {
+ pField = &info->fontEncoding;
+ }
+ else if ((uStrCaseCmp(field.str, "xfont") == 0) ||
+ (uStrCaseCmp(field.str, "xfontname") == 0))
+ {
+ pField = &info->fontSpec;
+ }
+ else if (uStrCaseCmp(field.str, "fontsize") == 0)
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveFloat(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "number");
+ }
+ if ((tmp.ival < 40) || (tmp.ival > 2550))
+ {
+ info->errorCount++;
+ ERROR1("Illegal font size %d (must be 4..255)\n", tmp.ival);
+ ACTION("Ignoring font size in keyboard geometry\n");
+ return False;
+ }
+ info->fontSize = tmp.ival;
+ return True;
+ }
+ else if ((uStrCaseCmp(field.str, "color") == 0) ||
+ (uStrCaseCmp(field.str, "basecolor") == 0))
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveString(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "string");
+ }
+ info->baseColor = XkbInternAtom(NULL, tmp.str, False);
+ return True;
+ }
+ else if (uStrCaseCmp(field.str, "labelcolor") == 0)
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveString(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "string");
+ }
+ info->labelColor = XkbInternAtom(NULL, tmp.str, False);
+ return True;
+ }
+ else
+ {
+ return SetGeometryProperty(info, field.str, stmt->value);
+ }
+
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveString(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "string");
+ }
+ *pField = XkbInternAtom(NULL, tmp.str, False);
return True;
}
/***====================================================================***/
static Bool
-HandleShapeBody(ShapeDef *def,ShapeInfo *si,unsigned merge,GeometryInfo *info)
-{
-OutlineDef * ol;
-int nOut,nPt;
-XkbOutlinePtr outline;
-ExprDef * pt;
-
- if (def->nOutlines<1) {
- WARN1("Shape \"%s\" has no outlines\n",shText(info->dpy,si));
- ACTION("Definition ignored\n");
- return True;
- }
- si->nOutlines= def->nOutlines;
- si->outlines= uTypedCalloc(def->nOutlines,XkbOutlineRec);
- if (!si->outlines) {
- ERROR1("Couldn't allocate outlines for \"%s\"\n",shText(info->dpy,si));
- ACTION("Definition ignored\n");
- info->errorCount++;
- return False;
- }
- for (nOut=0,ol=def->outlines;ol!=NULL;ol=(OutlineDef *)ol->common.next) {
- if (ol->nPoints<1) {
- SetShapeField(si,XkbAtomGetString(NULL,ol->field),NULL,
- ol->points,info);
- continue;
- }
- outline= NULL;
- outline= &si->outlines[nOut++];
- outline->num_points= ol->nPoints;
- outline->corner_radius= si->dfltCornerRadius;
- outline->points= uTypedCalloc(ol->nPoints,XkbPointRec);
- if (!outline->points) {
- ERROR1("Can't allocate points for \"%s\"\n",shText(info->dpy,si));
- ACTION("Definition ignored\n");
- info->errorCount++;
- return False;
- }
- for (nPt=0,pt=ol->points;pt!=NULL;pt=(ExprDef *)pt->common.next) {
- outline->points[nPt].x= pt->value.coord.x;
- outline->points[nPt].y= pt->value.coord.y;
- nPt++;
- }
- if (ol->field!=None) {
- char *str= XkbAtomText(NULL,ol->field,XkbMessage);
- if ((uStrCaseCmp(str,"approximation")==0)||
- (uStrCaseCmp(str,"approx")==0)) {
- if (si->approx==NULL)
- si->approx= outline;
- else {
- WARN1("Multiple approximations for \"%s\"\n",
- shText(info->dpy,si));
- ACTION("Treating all but the first as normal outlines\n");
- }
- }
- else if (uStrCaseCmp(str,"primary")==0) {
- if (si->primary==NULL)
- si->primary= outline;
- else {
- WARN1("Multiple primary outlines for \"%s\"\n",
- shText(info->dpy,si));
- ACTION("Treating all but the first as normal outlines\n");
- }
- }
- else {
- WARN2("Unknown outline type %s for \"%s\"\n",str,
- shText(info->dpy,si));
- ACTION("Treated as a normal outline\n");
- }
- }
- }
- if (nOut!=si->nOutlines) {
- WSGO2("Expected %d outlines, got %d\n",(unsigned int)si->nOutlines,
- nOut);
- si->nOutlines= nOut;
+HandleShapeBody(ShapeDef * def, ShapeInfo * si, unsigned merge,
+ GeometryInfo * info)
+{
+ OutlineDef *ol;
+ int nOut, nPt;
+ XkbOutlinePtr outline;
+ ExprDef *pt;
+
+ if (def->nOutlines < 1)
+ {
+ WARN1("Shape \"%s\" has no outlines\n", shText(info->dpy, si));
+ ACTION("Definition ignored\n");
+ return True;
+ }
+ si->nOutlines = def->nOutlines;
+ si->outlines = uTypedCalloc(def->nOutlines, XkbOutlineRec);
+ if (!si->outlines)
+ {
+ ERROR1("Couldn't allocate outlines for \"%s\"\n",
+ shText(info->dpy, si));
+ ACTION("Definition ignored\n");
+ info->errorCount++;
+ return False;
+ }
+ for (nOut = 0, ol = def->outlines; ol != NULL;
+ ol = (OutlineDef *) ol->common.next)
+ {
+ if (ol->nPoints < 1)
+ {
+ SetShapeField(si, XkbAtomGetString(NULL, ol->field), NULL,
+ ol->points, info);
+ continue;
+ }
+ outline = NULL;
+ outline = &si->outlines[nOut++];
+ outline->num_points = ol->nPoints;
+ outline->corner_radius = si->dfltCornerRadius;
+ outline->points = uTypedCalloc(ol->nPoints, XkbPointRec);
+ if (!outline->points)
+ {
+ ERROR1("Can't allocate points for \"%s\"\n",
+ shText(info->dpy, si));
+ ACTION("Definition ignored\n");
+ info->errorCount++;
+ return False;
+ }
+ for (nPt = 0, pt = ol->points; pt != NULL;
+ pt = (ExprDef *) pt->common.next)
+ {
+ outline->points[nPt].x = pt->value.coord.x;
+ outline->points[nPt].y = pt->value.coord.y;
+ nPt++;
+ }
+ if (ol->field != None)
+ {
+ char *str = XkbAtomText(NULL, ol->field, XkbMessage);
+ if ((uStrCaseCmp(str, "approximation") == 0) ||
+ (uStrCaseCmp(str, "approx") == 0))
+ {
+ if (si->approx == NULL)
+ si->approx = outline;
+ else
+ {
+ WARN1("Multiple approximations for \"%s\"\n",
+ shText(info->dpy, si));
+ ACTION("Treating all but the first as normal outlines\n");
+ }
+ }
+ else if (uStrCaseCmp(str, "primary") == 0)
+ {
+ if (si->primary == NULL)
+ si->primary = outline;
+ else
+ {
+ WARN1("Multiple primary outlines for \"%s\"\n",
+ shText(info->dpy, si));
+ ACTION("Treating all but the first as normal outlines\n");
+ }
+ }
+ else
+ {
+ WARN2("Unknown outline type %s for \"%s\"\n", str,
+ shText(info->dpy, si));
+ ACTION("Treated as a normal outline\n");
+ }
+ }
+ }
+ if (nOut != si->nOutlines)
+ {
+ WSGO2("Expected %d outlines, got %d\n",
+ (unsigned int) si->nOutlines, nOut);
+ si->nOutlines = nOut;
}
return True;
}
static int
-HandleShapeDef(ShapeDef *def,XkbDescPtr xkb,unsigned merge,GeometryInfo *info)
-{
-ShapeInfo si;
-
- if (def->merge!=MergeDefault)
- merge= def->merge;
-
- bzero(&si,sizeof(ShapeInfo));
- si.defs.merge= merge;
- si.name= XkbInternAtom(info->dpy,XkbAtomGetString(NULL,def->name),False);
- si.dfltCornerRadius= info->dfltCornerRadius;
- if (!HandleShapeBody(def,&si,merge,info))
- return False;
- if (!AddShape(info,&si))
- return False;
+HandleShapeDef(ShapeDef * def, XkbDescPtr xkb, unsigned merge,
+ GeometryInfo * info)
+{
+ ShapeInfo si;
+
+ if (def->merge != MergeDefault)
+ merge = def->merge;
+
+ bzero(&si, sizeof(ShapeInfo));
+ si.defs.merge = merge;
+ si.name =
+ XkbInternAtom(info->dpy, XkbAtomGetString(NULL, def->name), False);
+ si.dfltCornerRadius = info->dfltCornerRadius;
+ if (!HandleShapeBody(def, &si, merge, info))
+ return False;
+ if (!AddShape(info, &si))
+ return False;
return True;
}
/***====================================================================***/
static int
-HandleDoodadDef( DoodadDef *def,
- unsigned merge,
- SectionInfo *si,
- GeometryInfo *info)
-{
-ExprResult elem,field;
-ExprDef * ndx;
-DoodadInfo new;
-VarDef * var;
-
- if (def->common.stmtType==StmtIndicatorMapDef) {
- def->common.stmtType= StmtDoodadDef;
- def->type= XkbIndicatorDoodad;
- }
- InitDoodadInfo(&new,def->type,si,info);
- new.name= XkbInternAtom(info->dpy,XkbAtomGetString(NULL,def->name),False);
- for (var=def->body;var!=NULL;var= (VarDef *)var->common.next) {
- if (ExprResolveLhs(var->name,&elem,&field,&ndx)==0)
- return 0; /* internal error, already reported */
- if (elem.str!=NULL) {
- WARN1("Assignment to field of unknown element in doodad %s\n",
- ddText(info->dpy,&new));
- ACTION2("No value assigned to %s.%s\n",elem.str,field.str);
- }
- else if (!SetDoodadField(&new,field.str,ndx,var->value,si,info))
- return False;
- }
- if (!AddDoodad(si,info,&new))
- return False;
+HandleDoodadDef(DoodadDef * def,
+ unsigned merge, SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult elem, field;
+ ExprDef *ndx;
+ DoodadInfo new;
+ VarDef *var;
+
+ if (def->common.stmtType == StmtIndicatorMapDef)
+ {
+ def->common.stmtType = StmtDoodadDef;
+ def->type = XkbIndicatorDoodad;
+ }
+ InitDoodadInfo(&new, def->type, si, info);
+ new.name =
+ XkbInternAtom(info->dpy, XkbAtomGetString(NULL, def->name), False);
+ for (var = def->body; var != NULL; var = (VarDef *) var->common.next)
+ {
+ if (ExprResolveLhs(var->name, &elem, &field, &ndx) == 0)
+ return 0; /* internal error, already reported */
+ if (elem.str != NULL)
+ {
+ WARN1("Assignment to field of unknown element in doodad %s\n",
+ ddText(info->dpy, &new));
+ ACTION2("No value assigned to %s.%s\n", elem.str, field.str);
+ }
+ else if (!SetDoodadField(&new, field.str, ndx, var->value, si, info))
+ return False;
+ }
+ if (!AddDoodad(si, info, &new))
+ return False;
ClearDoodadInfo(&new);
return True;
}
@@ -2232,43 +2549,45 @@ VarDef * var;
/***====================================================================***/
static int
-HandleOverlayDef( OverlayDef * def,
- unsigned merge,
- SectionInfo * si,
- GeometryInfo * info)
-{
-OverlayKeyDef * keyDef;
-OverlayKeyInfo *key;
-OverlayInfo ol;
-
- if ((def->nKeys<1)&&(warningLevel>3)) {
- WARN2("Overlay \"%s\" in section \"%s\" has no keys\n",
- XkbAtomText(NULL,def->name,XkbMessage),
- scText(info->dpy,si));
- ACTION("Overlay ignored\n");
- return True;
- }
- bzero(&ol,sizeof(OverlayInfo));
- ol.name= XkbInternAtom(info->dpy,XkbAtomGetString(NULL,def->name),False);
- for (keyDef= def->keys;keyDef;keyDef=(OverlayKeyDef *)keyDef->common.next) {
- key= uTypedCalloc(1,OverlayKeyInfo);
- if ((!key)&&warningLevel>0) {
- WSGO("Couldn't allocate OverlayKeyInfo\n");
- ACTION2("Overlay %s for section %s will be incomplete\n",
- oiText(info->dpy,&ol),
- scText(info->dpy,si));
- return False;
- }
- strncpy(key->over,keyDef->over,XkbKeyNameLength);
- strncpy(key->under,keyDef->under,XkbKeyNameLength);
- key->sectionRow= _GOK_UnknownRow;
- key->overlayRow= _GOK_UnknownRow;
- ol.keys= (OverlayKeyInfo *)AddCommonInfo(&ol.keys->defs,
- (CommonInfo *)key);
- ol.nKeys++;
- }
- if (!AddOverlay(si,info,&ol))
- return False;
+HandleOverlayDef(OverlayDef * def,
+ unsigned merge, SectionInfo * si, GeometryInfo * info)
+{
+ OverlayKeyDef *keyDef;
+ OverlayKeyInfo *key;
+ OverlayInfo ol;
+
+ if ((def->nKeys < 1) && (warningLevel > 3))
+ {
+ WARN2("Overlay \"%s\" in section \"%s\" has no keys\n",
+ XkbAtomText(NULL, def->name, XkbMessage), scText(info->dpy,
+ si));
+ ACTION("Overlay ignored\n");
+ return True;
+ }
+ bzero(&ol, sizeof(OverlayInfo));
+ ol.name =
+ XkbInternAtom(info->dpy, XkbAtomGetString(NULL, def->name), False);
+ for (keyDef = def->keys; keyDef;
+ keyDef = (OverlayKeyDef *) keyDef->common.next)
+ {
+ key = uTypedCalloc(1, OverlayKeyInfo);
+ if ((!key) && warningLevel > 0)
+ {
+ WSGO("Couldn't allocate OverlayKeyInfo\n");
+ ACTION2("Overlay %s for section %s will be incomplete\n",
+ oiText(info->dpy, &ol), scText(info->dpy, si));
+ return False;
+ }
+ strncpy(key->over, keyDef->over, XkbKeyNameLength);
+ strncpy(key->under, keyDef->under, XkbKeyNameLength);
+ key->sectionRow = _GOK_UnknownRow;
+ key->overlayRow = _GOK_UnknownRow;
+ ol.keys = (OverlayKeyInfo *) AddCommonInfo(&ol.keys->defs,
+ (CommonInfo *) key);
+ ol.nKeys++;
+ }
+ if (!AddOverlay(si, info, &ol))
+ return False;
ClearOverlayInfo(&ol);
return True;
}
@@ -2276,283 +2595,322 @@ OverlayInfo ol;
/***====================================================================***/
static Bool
-HandleComplexKey(KeyDef *def,KeyInfo *key,GeometryInfo *info)
-{
-RowInfo * row;
-ExprDef * expr;
-
- row= key->row;
- for (expr=def->expr;expr!=NULL;expr=(ExprDef *)expr->common.next) {
- if (expr->op==OpAssign) {
- ExprResult elem,f;
- ExprDef *ndx;
- if (ExprResolveLhs(expr->value.binary.left,&elem,&f,&ndx)==0)
- return False; /* internal error, already reported */
- if ((elem.str==NULL)||(uStrCaseCmp(elem.str,"key")==0)) {
- if (!SetKeyField(key,f.str,ndx,expr->value.binary.right,info))
- return False;
- }
- else {
- ERROR("Illegal element used in a key definition\n");
- ACTION2("Assignment to %s.%s ignored\n",elem.str,f.str);
- return False;
- }
- }
- else {
- switch (expr->type) {
- case TypeInt: case TypeFloat:
- if (!SetKeyField(key,"gap",NULL,expr,info))
- return False;
- break;
- case TypeString:
- if (!SetKeyField(key,"shape",NULL,expr,info))
- return False;
- break;
- case TypeKeyName:
- if (!SetKeyField(key,"name",NULL,expr,info))
- return False;
- break;
- default:
- ERROR("Cannot determine field for unnamed expression\n");
- ACTION3("Ignoring key %d in row %d of section %s\n",
- row->nKeys+1,row->section->nRows+1,
- rowText(info->dpy,row));
- return False;
- }
- }
+HandleComplexKey(KeyDef * def, KeyInfo * key, GeometryInfo * info)
+{
+ RowInfo *row;
+ ExprDef *expr;
+
+ row = key->row;
+ for (expr = def->expr; expr != NULL; expr = (ExprDef *) expr->common.next)
+ {
+ if (expr->op == OpAssign)
+ {
+ ExprResult elem, f;
+ ExprDef *ndx;
+ if (ExprResolveLhs(expr->value.binary.left, &elem, &f, &ndx) == 0)
+ return False; /* internal error, already reported */
+ if ((elem.str == NULL) || (uStrCaseCmp(elem.str, "key") == 0))
+ {
+ if (!SetKeyField
+ (key, f.str, ndx, expr->value.binary.right, info))
+ return False;
+ }
+ else
+ {
+ ERROR("Illegal element used in a key definition\n");
+ ACTION2("Assignment to %s.%s ignored\n", elem.str, f.str);
+ return False;
+ }
+ }
+ else
+ {
+ switch (expr->type)
+ {
+ case TypeInt:
+ case TypeFloat:
+ if (!SetKeyField(key, "gap", NULL, expr, info))
+ return False;
+ break;
+ case TypeString:
+ if (!SetKeyField(key, "shape", NULL, expr, info))
+ return False;
+ break;
+ case TypeKeyName:
+ if (!SetKeyField(key, "name", NULL, expr, info))
+ return False;
+ break;
+ default:
+ ERROR("Cannot determine field for unnamed expression\n");
+ ACTION3("Ignoring key %d in row %d of section %s\n",
+ row->nKeys + 1, row->section->nRows + 1,
+ rowText(info->dpy, row));
+ return False;
+ }
+ }
}
return True;
}
static Bool
-HandleRowBody(RowDef *def,RowInfo *row,unsigned merge,GeometryInfo *info)
-{
-KeyDef * keyDef;
-
- if ((def->nKeys<1)&&(warningLevel>3)) {
- ERROR1("Row in section %s has no keys\n",rowText(info->dpy,row));
- ACTION("Section ignored\n");
- return True;
- }
- for (keyDef= def->keys; keyDef!=NULL;keyDef=(KeyDef *)keyDef->common.next) {
- if (keyDef->common.stmtType==StmtVarDef) {
- VarDef *var= (VarDef *)keyDef;
- ExprResult elem,field;
- ExprDef *ndx;
- if (ExprResolveLhs(var->name,&elem,&field,&ndx)==0)
- return 0; /* internal error, already reported */
- if ((elem.str==NULL)||(uStrCaseCmp(elem.str,"row")==0)) {
- if (!SetRowField(row,field.str,ndx,var->value,info))
- return False;
- }
- else if (uStrCaseCmp(elem.str,"key")==0) {
- if (!SetKeyField(&row->dfltKey,field.str,ndx,var->value,info))
- return False;
- }
- else {
- WARN("Assignment to field of unknown element in row\n");
- ACTION2("No value assigned to %s.%s\n",elem.str,field.str);
- }
- }
- else if (keyDef->common.stmtType==StmtKeyDef) {
- KeyInfo key;
- InitKeyInfo(&key,row,info);
- if (keyDef->name!=NULL) {
- int len= strlen(keyDef->name);
- if ((len<1)||(len>XkbKeyNameLength)) {
- ERROR2("Illegal name %s for key in section %s\n",
- keyDef->name,
- rowText(info->dpy,row));
- ACTION("Section not compiled\n");
- return False;
- }
- bzero(key.name,XkbKeyNameLength+1);
- strncpy(key.name,keyDef->name,XkbKeyNameLength);
- key.defs.defined|= _GK_Name;
- }
- else if (!HandleComplexKey(keyDef,&key,info))
- return False;
- if (!AddKey(row,&key))
- return False;
- }
- else {
- WSGO1("Unexpected statement (type %d) in row body\n",
- keyDef->common.stmtType);
- return False;
- }
+HandleRowBody(RowDef * def, RowInfo * row, unsigned merge,
+ GeometryInfo * info)
+{
+ KeyDef *keyDef;
+
+ if ((def->nKeys < 1) && (warningLevel > 3))
+ {
+ ERROR1("Row in section %s has no keys\n", rowText(info->dpy, row));
+ ACTION("Section ignored\n");
+ return True;
+ }
+ for (keyDef = def->keys; keyDef != NULL;
+ keyDef = (KeyDef *) keyDef->common.next)
+ {
+ if (keyDef->common.stmtType == StmtVarDef)
+ {
+ VarDef *var = (VarDef *) keyDef;
+ ExprResult elem, field;
+ ExprDef *ndx;
+ if (ExprResolveLhs(var->name, &elem, &field, &ndx) == 0)
+ return 0; /* internal error, already reported */
+ if ((elem.str == NULL) || (uStrCaseCmp(elem.str, "row") == 0))
+ {
+ if (!SetRowField(row, field.str, ndx, var->value, info))
+ return False;
+ }
+ else if (uStrCaseCmp(elem.str, "key") == 0)
+ {
+ if (!SetKeyField
+ (&row->dfltKey, field.str, ndx, var->value, info))
+ return False;
+ }
+ else
+ {
+ WARN("Assignment to field of unknown element in row\n");
+ ACTION2("No value assigned to %s.%s\n", elem.str, field.str);
+ }
+ }
+ else if (keyDef->common.stmtType == StmtKeyDef)
+ {
+ KeyInfo key;
+ InitKeyInfo(&key, row, info);
+ if (keyDef->name != NULL)
+ {
+ int len = strlen(keyDef->name);
+ if ((len < 1) || (len > XkbKeyNameLength))
+ {
+ ERROR2("Illegal name %s for key in section %s\n",
+ keyDef->name, rowText(info->dpy, row));
+ ACTION("Section not compiled\n");
+ return False;
+ }
+ bzero(key.name, XkbKeyNameLength + 1);
+ strncpy(key.name, keyDef->name, XkbKeyNameLength);
+ key.defs.defined |= _GK_Name;
+ }
+ else if (!HandleComplexKey(keyDef, &key, info))
+ return False;
+ if (!AddKey(row, &key))
+ return False;
+ }
+ else
+ {
+ WSGO1("Unexpected statement (type %d) in row body\n",
+ keyDef->common.stmtType);
+ return False;
+ }
}
return True;
}
static Bool
-HandleSectionBody( SectionDef * def,
- SectionInfo * si,
- unsigned merge,
- GeometryInfo * info)
-{
-RowDef * rowDef;
-DoodadInfo * di;
-
- for (rowDef= def->rows;rowDef!=NULL;rowDef=(RowDef *)rowDef->common.next) {
- if (rowDef->common.stmtType==StmtVarDef) {
- VarDef *var= (VarDef *)rowDef;
- ExprResult elem,field;
- ExprDef *ndx;
- if (ExprResolveLhs(var->name,&elem,&field,&ndx)==0)
- return 0; /* internal error, already reported */
- if ((elem.str==NULL)||(uStrCaseCmp(elem.str,"section")==0)) {
- if (!SetSectionField(si,field.str,ndx,var->value,info))
- return False;
- }
- else if (uStrCaseCmp(elem.str,"row")==0) {
- if (!SetRowField(&si->dfltRow,field.str,ndx,var->value,info))
- return False;
- }
- else if (uStrCaseCmp(elem.str,"key")==0) {
- if(!SetKeyField(&si->dfltRow.dfltKey,field.str,ndx,
- var->value,info))
- return False;
- }
- else if ((di=FindDfltDoodadByTypeName(elem.str,si,info))!=NULL) {
- if (!SetDoodadField(di,field.str,ndx,var->value,si,info))
- return False;
- }
- else {
- WARN("Assignment to field of unknown element in section\n");
- ACTION2("No value assigned to %s.%s\n",elem.str,field.str);
- }
- }
- else if (rowDef->common.stmtType==StmtRowDef) {
- RowInfo row;
- InitRowInfo(&row,si,info);
- if (!HandleRowBody(rowDef,&row,merge,info))
- return False;
- if (!AddRow(si,&row))
- return False;
+HandleSectionBody(SectionDef * def,
+ SectionInfo * si, unsigned merge, GeometryInfo * info)
+{
+ RowDef *rowDef;
+ DoodadInfo *di;
+
+ for (rowDef = def->rows; rowDef != NULL;
+ rowDef = (RowDef *) rowDef->common.next)
+ {
+ if (rowDef->common.stmtType == StmtVarDef)
+ {
+ VarDef *var = (VarDef *) rowDef;
+ ExprResult elem, field;
+ ExprDef *ndx;
+ if (ExprResolveLhs(var->name, &elem, &field, &ndx) == 0)
+ return 0; /* internal error, already reported */
+ if ((elem.str == NULL) || (uStrCaseCmp(elem.str, "section") == 0))
+ {
+ if (!SetSectionField(si, field.str, ndx, var->value, info))
+ return False;
+ }
+ else if (uStrCaseCmp(elem.str, "row") == 0)
+ {
+ if (!SetRowField
+ (&si->dfltRow, field.str, ndx, var->value, info))
+ return False;
+ }
+ else if (uStrCaseCmp(elem.str, "key") == 0)
+ {
+ if (!SetKeyField(&si->dfltRow.dfltKey, field.str, ndx,
+ var->value, info))
+ return False;
+ }
+ else if ((di =
+ FindDfltDoodadByTypeName(elem.str, si, info)) != NULL)
+ {
+ if (!SetDoodadField(di, field.str, ndx, var->value, si, info))
+ return False;
+ }
+ else
+ {
+ WARN("Assignment to field of unknown element in section\n");
+ ACTION2("No value assigned to %s.%s\n", elem.str, field.str);
+ }
+ }
+ else if (rowDef->common.stmtType == StmtRowDef)
+ {
+ RowInfo row;
+ InitRowInfo(&row, si, info);
+ if (!HandleRowBody(rowDef, &row, merge, info))
+ return False;
+ if (!AddRow(si, &row))
+ return False;
/* ClearRowInfo(&row,info);*/
- }
- else if ((rowDef->common.stmtType==StmtDoodadDef)||
- (rowDef->common.stmtType==StmtIndicatorMapDef)) {
- if (!HandleDoodadDef((DoodadDef *)rowDef,merge,si,info))
- return False;
- }
- else if (rowDef->common.stmtType==StmtOverlayDef) {
- if (!HandleOverlayDef((OverlayDef *)rowDef,merge,si,info))
- return False;
- }
- else {
- WSGO1("Unexpected statement (type %d) in section body\n",
- rowDef->common.stmtType);
- return False;
- }
- }
- if (si->nRows!=def->nRows) {
- WSGO2("Expected %d rows, found %d\n",(unsigned int)def->nRows,
- (unsigned int)si->nRows);
- ACTION1("Definition of section %s might be incorrect\n",
- scText(info->dpy,si));
+ }
+ else if ((rowDef->common.stmtType == StmtDoodadDef) ||
+ (rowDef->common.stmtType == StmtIndicatorMapDef))
+ {
+ if (!HandleDoodadDef((DoodadDef *) rowDef, merge, si, info))
+ return False;
+ }
+ else if (rowDef->common.stmtType == StmtOverlayDef)
+ {
+ if (!HandleOverlayDef((OverlayDef *) rowDef, merge, si, info))
+ return False;
+ }
+ else
+ {
+ WSGO1("Unexpected statement (type %d) in section body\n",
+ rowDef->common.stmtType);
+ return False;
+ }
+ }
+ if (si->nRows != def->nRows)
+ {
+ WSGO2("Expected %d rows, found %d\n", (unsigned int) def->nRows,
+ (unsigned int) si->nRows);
+ ACTION1("Definition of section %s might be incorrect\n",
+ scText(info->dpy, si));
}
return True;
}
static int
-HandleSectionDef( SectionDef * def,
- XkbDescPtr xkb,
- unsigned merge,
- GeometryInfo * info)
-{
-SectionInfo si;
-char * str;
-
- if (def->merge!=MergeDefault)
- merge= def->merge;
- InitSectionInfo(&si,info);
- si.defs.merge= merge;
- str= XkbAtomGetString(NULL,def->name);
- if ((str==NULL)||(strlen(str)<1)) {
- ERROR("Section defined without a name\n");
- ACTION("Definition ignored\n");
- return False;
- }
- si.name= XkbInternAtom(info->dpy,XkbAtomGetString(NULL,def->name),False);
- if (!HandleSectionBody(def,&si,merge,info))
- return False;
- if (!AddSection(info,&si))
- return False;
+HandleSectionDef(SectionDef * def,
+ XkbDescPtr xkb, unsigned merge, GeometryInfo * info)
+{
+ SectionInfo si;
+ char *str;
+
+ if (def->merge != MergeDefault)
+ merge = def->merge;
+ InitSectionInfo(&si, info);
+ si.defs.merge = merge;
+ str = XkbAtomGetString(NULL, def->name);
+ if ((str == NULL) || (strlen(str) < 1))
+ {
+ ERROR("Section defined without a name\n");
+ ACTION("Definition ignored\n");
+ return False;
+ }
+ si.name =
+ XkbInternAtom(info->dpy, XkbAtomGetString(NULL, def->name), False);
+ if (!HandleSectionBody(def, &si, merge, info))
+ return False;
+ if (!AddSection(info, &si))
+ return False;
return True;
}
/***====================================================================***/
static void
-HandleGeometryFile( XkbFile * file,
- XkbDescPtr xkb,
- unsigned merge,
- GeometryInfo * info)
-{
-ParseCommon * stmt;
-char * failWhat;
-
- if (merge==MergeDefault)
- merge= MergeAugment;
- info->name= uStringDup(file->name);
- stmt= file->defs;
- while (stmt) {
- failWhat= NULL;
- switch (stmt->stmtType) {
- case StmtInclude:
- if (!HandleIncludeGeometry((IncludeStmt *)stmt,xkb,info,
- HandleGeometryFile))
- info->errorCount++;
- break;
- case StmtKeyAliasDef:
- if (!HandleAliasDef((KeyAliasDef *)stmt,
- merge,info->fileID,&info->aliases)) {
- info->errorCount++;
- }
- break;
- case StmtVarDef:
- if (!HandleGeometryVar((VarDef *)stmt,xkb,info))
- info->errorCount++;
- break;
- case StmtShapeDef:
- if (!HandleShapeDef((ShapeDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtSectionDef:
- if (!HandleSectionDef((SectionDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtIndicatorMapDef:
- case StmtDoodadDef:
- if (!HandleDoodadDef((DoodadDef *)stmt,merge,NULL,info))
- info->errorCount++;
- break;
- case StmtVModDef:
- if (!failWhat) failWhat= "virtual modfier";
- case StmtInterpDef:
- if (!failWhat) failWhat= "symbol interpretation";
- case StmtGroupCompatDef:
- if (!failWhat) failWhat= "group compatibility map";
- case StmtKeycodeDef:
- if (!failWhat) failWhat= "key name";
- ERROR("Interpretation files may not include other types\n");
- ACTION1("Ignoring %s definition.\n",failWhat);
- info->errorCount++;
- break;
- default:
- WSGO1("Unexpected statement type %d in HandleGeometryFile\n",
- stmt->stmtType);
- break;
- }
- stmt= stmt->next;
- if (info->errorCount>10) {
+HandleGeometryFile(XkbFile * file,
+ XkbDescPtr xkb, unsigned merge, GeometryInfo * info)
+{
+ ParseCommon *stmt;
+ char *failWhat;
+
+ if (merge == MergeDefault)
+ merge = MergeAugment;
+ info->name = uStringDup(file->name);
+ stmt = file->defs;
+ while (stmt)
+ {
+ failWhat = NULL;
+ switch (stmt->stmtType)
+ {
+ case StmtInclude:
+ if (!HandleIncludeGeometry((IncludeStmt *) stmt, xkb, info,
+ HandleGeometryFile))
+ info->errorCount++;
+ break;
+ case StmtKeyAliasDef:
+ if (!HandleAliasDef((KeyAliasDef *) stmt,
+ merge, info->fileID, &info->aliases))
+ {
+ info->errorCount++;
+ }
+ break;
+ case StmtVarDef:
+ if (!HandleGeometryVar((VarDef *) stmt, xkb, info))
+ info->errorCount++;
+ break;
+ case StmtShapeDef:
+ if (!HandleShapeDef((ShapeDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtSectionDef:
+ if (!HandleSectionDef((SectionDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtIndicatorMapDef:
+ case StmtDoodadDef:
+ if (!HandleDoodadDef((DoodadDef *) stmt, merge, NULL, info))
+ info->errorCount++;
+ break;
+ case StmtVModDef:
+ if (!failWhat)
+ failWhat = "virtual modfier";
+ case StmtInterpDef:
+ if (!failWhat)
+ failWhat = "symbol interpretation";
+ case StmtGroupCompatDef:
+ if (!failWhat)
+ failWhat = "group compatibility map";
+ case StmtKeycodeDef:
+ if (!failWhat)
+ failWhat = "key name";
+ ERROR("Interpretation files may not include other types\n");
+ ACTION1("Ignoring %s definition.\n", failWhat);
+ info->errorCount++;
+ break;
+ default:
+ WSGO1("Unexpected statement type %d in HandleGeometryFile\n",
+ stmt->stmtType);
+ break;
+ }
+ stmt = stmt->next;
+ if (info->errorCount > 10)
+ {
#ifdef NOISY
- ERROR("Too many errors\n");
+ ERROR("Too many errors\n");
#endif
- ACTION1("Abandoning geometry file \"%s\"\n",file->topName);
- break;
- }
+ ACTION1("Abandoning geometry file \"%s\"\n", file->topName);
+ break;
+ }
}
return;
}
@@ -2560,290 +2918,348 @@ char * failWhat;
/***====================================================================***/
static Bool
-CopyShapeDef(Display *dpy,XkbGeometryPtr geom,ShapeInfo *si)
-{
-register int i,n;
-XkbShapePtr shape;
-XkbOutlinePtr old_outline,outline;
-Atom name;
-
- si->index= geom->num_shapes;
- name= XkbInternAtom(dpy,XkbAtomGetString(NULL,si->name),False);
- shape= XkbAddGeomShape(geom,name,si->nOutlines);
- if (!shape) {
- WSGO("Couldn't allocate shape in geometry\n");
- ACTION1("Shape %s not compiled\n",shText(dpy,si));
- return False;
- }
- old_outline= si->outlines;
- for (i=0;i<si->nOutlines;i++,old_outline++) {
- outline= XkbAddGeomOutline(shape,old_outline->num_points);
- if (!outline) {
- WSGO("Couldn't allocate outline in shape\n");
- ACTION1("Shape %s is incomplete\n",shText(dpy,si));
- return False;
- }
- n= old_outline->num_points;
- memcpy(outline->points,old_outline->points,n*sizeof(XkbPointRec));
- outline->num_points= old_outline->num_points;
- outline->corner_radius= old_outline->corner_radius;
- }
- if (si->approx) {
- n= (si->approx-si->outlines);
- shape->approx= &shape->outlines[n];
- }
- if (si->primary) {
- n= (si->primary-si->outlines);
- shape->primary= &shape->outlines[n];
+CopyShapeDef(Display * dpy, XkbGeometryPtr geom, ShapeInfo * si)
+{
+ register int i, n;
+ XkbShapePtr shape;
+ XkbOutlinePtr old_outline, outline;
+ Atom name;
+
+ si->index = geom->num_shapes;
+ name = XkbInternAtom(dpy, XkbAtomGetString(NULL, si->name), False);
+ shape = XkbAddGeomShape(geom, name, si->nOutlines);
+ if (!shape)
+ {
+ WSGO("Couldn't allocate shape in geometry\n");
+ ACTION1("Shape %s not compiled\n", shText(dpy, si));
+ return False;
+ }
+ old_outline = si->outlines;
+ for (i = 0; i < si->nOutlines; i++, old_outline++)
+ {
+ outline = XkbAddGeomOutline(shape, old_outline->num_points);
+ if (!outline)
+ {
+ WSGO("Couldn't allocate outline in shape\n");
+ ACTION1("Shape %s is incomplete\n", shText(dpy, si));
+ return False;
+ }
+ n = old_outline->num_points;
+ memcpy(outline->points, old_outline->points, n * sizeof(XkbPointRec));
+ outline->num_points = old_outline->num_points;
+ outline->corner_radius = old_outline->corner_radius;
+ }
+ if (si->approx)
+ {
+ n = (si->approx - si->outlines);
+ shape->approx = &shape->outlines[n];
+ }
+ if (si->primary)
+ {
+ n = (si->primary - si->outlines);
+ shape->primary = &shape->outlines[n];
}
XkbComputeShapeBounds(shape);
return True;
}
static Bool
-VerifyDoodadInfo(DoodadInfo *di,GeometryInfo *info)
-{
- if ((di->defs.defined&(_GD_Top|_GD_Left))!=(_GD_Top|_GD_Left)) {
- if (warningLevel<9) {
- ERROR1("No position defined for doodad %s\n",ddText(info->dpy,di));
- ACTION("Illegal doodad ignored\n");
- return False;
- }
- }
- if ((di->defs.defined & _GD_Priority) == 0) {
- /* calculate priority -- should be just above previous doodad/row */
- }
- switch (di->type) {
- case XkbOutlineDoodad:
- case XkbSolidDoodad:
- if ((di->defs.defined&_GD_Shape)==0) {
- ERROR2("No shape defined for %s doodad %s\n",
- (di->type==XkbOutlineDoodad?"outline":"filled"),
- ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- else {
- ShapeInfo *si;
- si= FindShape(info,di->shape, (di->type==XkbOutlineDoodad?
- "outline doodad":
- "solid doodad"),
- ddText(info->dpy,di));
- if (si)
- di->shape= si->name;
- else {
- ERROR1("No legal shape for %s\n",ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- }
- if ((di->defs.defined&_GD_Color)==0) {
- if (warningLevel>5) {
- WARN1("No color for doodad %s\n",ddText(info->dpy,di));
- ACTION("Using black\n");
- }
- di->color= XkbInternAtom(NULL,"black",False);
- }
- break;
- case XkbTextDoodad:
- if ((di->defs.defined&_GD_Text)==0) {
- ERROR1("No text specified for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Illegal doodad definition ignored\n");
- return False;
- }
- if ((di->defs.defined&_GD_Angle)==0)
- di->angle= 0;
- if ((di->defs.defined&_GD_Color)==0) {
- if (warningLevel>5) {
- WARN1("No color specified for doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Using black\n");
- }
- di->color= XkbInternAtom(NULL,"black",False);
- }
- if ((di->defs.defined&_GD_FontSpec)!=0) {
- if ((di->defs.defined&_GD_FontParts)==0)
- return True;
- if (warningLevel<9) {
- WARN1("Text doodad %s has full and partial font definition\n",
- ddText(info->dpy,di));
- ACTION("Full specification ignored\n");
- }
- di->defs.defined&= ~_GD_FontSpec;
- di->fontSpec= None;
- }
- if ((di->defs.defined&_GD_Font)==0) {
- if (warningLevel>5) {
- WARN1("No font specified for doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_FONT);
- }
- di->font= XkbInternAtom(NULL,DFLT_FONT,False);
- }
- if ((di->defs.defined&_GD_FontSlant)==0) {
- if (warningLevel>7) {
- WARN1("No font slant for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_SLANT);
- }
- di->fontSlant= XkbInternAtom(NULL,DFLT_SLANT,False);
- }
- if ((di->defs.defined&_GD_FontWeight)==0) {
- if (warningLevel>7) {
- WARN1("No font weight for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_WEIGHT);
- }
- di->fontWeight= XkbInternAtom(NULL,DFLT_WEIGHT,False);
- }
- if ((di->defs.defined&_GD_FontSetWidth)==0) {
- if (warningLevel>9) {
- WARN1("No font set width for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_SET_WIDTH);
- }
- di->fontSetWidth= XkbInternAtom(NULL,DFLT_SET_WIDTH,False);
- }
- if ((di->defs.defined&_GD_FontVariant)==0) {
- if (warningLevel>9) {
- WARN1("No font variant for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_VARIANT);
- }
- di->fontVariant= XkbInternAtom(NULL,DFLT_VARIANT,False);
- }
- if ((di->defs.defined&_GD_FontEncoding)==0) {
- if (warningLevel>7) {
- WARN1("No font encoding for doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_ENCODING);
- }
- di->fontEncoding= XkbInternAtom(NULL,DFLT_ENCODING,False);
- }
- if ((di->defs.defined&_GD_FontSize)==0) {
- if (warningLevel>7) {
- WARN1("No font size for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using %s point text\n",
- XkbGeomFPText(DFLT_SIZE,XkbMessage));
- }
- di->fontSize= DFLT_SIZE;
- }
- if ((di->defs.defined&_GD_Height)==0) {
- unsigned size,nLines;
- char *tmp;
- size= (di->fontSize*120)/100;
- size= (size*254)/720; /* convert to mm/10 */
- for (nLines=1,tmp=XkbAtomGetString(NULL,di->text);*tmp;tmp++) {
- if (*tmp=='\n') nLines++;
- }
- size*= nLines;
- if (warningLevel>5) {
- WARN1("No height for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using calculated height %s millimeters\n",
- XkbGeomFPText(size,XkbMessage));
- }
- di->height= size;
- }
- if ((di->defs.defined&_GD_Width)==0) {
- unsigned width,tmp;
- char *str;
- width= tmp= 0;
- for (str=XkbAtomGetString(NULL,di->text);*str;str++) {
- if (*str!='\n')
- tmp++;
- else {
- if (tmp>width)
- width= tmp;
- tmp= 1;
- }
- }
- if (width==0)
- width= tmp;
- width*= (di->height*2)/3;
- if (warningLevel>5) {
- WARN1("No width for text doodad %s\n",ddText(info->dpy,di));
- ACTION1("Using calculated width %s millimeters\n",
- XkbGeomFPText(width,XkbMessage));
- }
- di->width= width;
- }
- break;
- case XkbIndicatorDoodad:
- if ((di->defs.defined&_GD_Shape)==0) {
- ERROR1("No shape defined for indicator doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- else {
- ShapeInfo *si;
- si= FindShape(info,di->shape,"indicator doodad",
- ddText(info->dpy,di));
- if (si)
- di->shape= si->name;
- else {
- ERROR1("No legal shape for doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- }
- if ((di->defs.defined&_GD_Color)==0) {
- if (warningLevel>5) {
- WARN1("No \"on\" color for indicator doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Using green\n");
- }
- di->color= XkbInternAtom(NULL,"green",False);
- }
- if ((di->defs.defined&_GD_OffColor)==0) {
- if (warningLevel>5) {
- WARN1("No \"off\" color for indicator doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Using black\n");
- }
- di->offColor= XkbInternAtom(NULL,"black",False);
- }
- break;
- case XkbLogoDoodad:
- if (di->logoName==NULL) {
- ERROR1("No logo name defined for logo doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- if ((di->defs.defined&_GD_Shape)==0) {
- ERROR1("No shape defined for logo doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- else {
- ShapeInfo *si;
- si= FindShape(info,di->shape,"logo doodad",
- ddText(info->dpy,di));
- if (si)
- di->shape= si->name;
- else {
- ERROR1("No legal shape for %s\n",ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- }
- if ((di->defs.defined&_GD_Color)==0) {
- if (warningLevel>5) {
- WARN1("No color for doodad %s\n",ddText(info->dpy,di));
- ACTION("Using black\n");
- }
- di->color= XkbInternAtom(NULL,"black",False);
- }
- break;
- default:
- WSGO1("Uknown doodad type %d in VerifyDoodad\n",(unsigned int)di->type);
- return False;
+VerifyDoodadInfo(DoodadInfo * di, GeometryInfo * info)
+{
+ if ((di->defs.defined & (_GD_Top | _GD_Left)) != (_GD_Top | _GD_Left))
+ {
+ if (warningLevel < 9)
+ {
+ ERROR1("No position defined for doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Illegal doodad ignored\n");
+ return False;
+ }
+ }
+ if ((di->defs.defined & _GD_Priority) == 0)
+ {
+ /* calculate priority -- should be just above previous doodad/row */
+ }
+ switch (di->type)
+ {
+ case XkbOutlineDoodad:
+ case XkbSolidDoodad:
+ if ((di->defs.defined & _GD_Shape) == 0)
+ {
+ ERROR2("No shape defined for %s doodad %s\n",
+ (di->type == XkbOutlineDoodad ? "outline" : "filled"),
+ ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ else
+ {
+ ShapeInfo *si;
+ si = FindShape(info, di->shape,
+ (di->type ==
+ XkbOutlineDoodad ? "outline doodad" :
+ "solid doodad"), ddText(info->dpy, di));
+ if (si)
+ di->shape = si->name;
+ else
+ {
+ ERROR1("No legal shape for %s\n", ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ }
+ if ((di->defs.defined & _GD_Color) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No color for doodad %s\n", ddText(info->dpy, di));
+ ACTION("Using black\n");
+ }
+ di->color = XkbInternAtom(NULL, "black", False);
+ }
+ break;
+ case XkbTextDoodad:
+ if ((di->defs.defined & _GD_Text) == 0)
+ {
+ ERROR1("No text specified for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Illegal doodad definition ignored\n");
+ return False;
+ }
+ if ((di->defs.defined & _GD_Angle) == 0)
+ di->angle = 0;
+ if ((di->defs.defined & _GD_Color) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No color specified for doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Using black\n");
+ }
+ di->color = XkbInternAtom(NULL, "black", False);
+ }
+ if ((di->defs.defined & _GD_FontSpec) != 0)
+ {
+ if ((di->defs.defined & _GD_FontParts) == 0)
+ return True;
+ if (warningLevel < 9)
+ {
+ WARN1
+ ("Text doodad %s has full and partial font definition\n",
+ ddText(info->dpy, di));
+ ACTION("Full specification ignored\n");
+ }
+ di->defs.defined &= ~_GD_FontSpec;
+ di->fontSpec = None;
+ }
+ if ((di->defs.defined & _GD_Font) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No font specified for doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_FONT);
+ }
+ di->font = XkbInternAtom(NULL, DFLT_FONT, False);
+ }
+ if ((di->defs.defined & _GD_FontSlant) == 0)
+ {
+ if (warningLevel > 7)
+ {
+ WARN1("No font slant for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_SLANT);
+ }
+ di->fontSlant = XkbInternAtom(NULL, DFLT_SLANT, False);
+ }
+ if ((di->defs.defined & _GD_FontWeight) == 0)
+ {
+ if (warningLevel > 7)
+ {
+ WARN1("No font weight for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_WEIGHT);
+ }
+ di->fontWeight = XkbInternAtom(NULL, DFLT_WEIGHT, False);
+ }
+ if ((di->defs.defined & _GD_FontSetWidth) == 0)
+ {
+ if (warningLevel > 9)
+ {
+ WARN1("No font set width for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_SET_WIDTH);
+ }
+ di->fontSetWidth = XkbInternAtom(NULL, DFLT_SET_WIDTH, False);
+ }
+ if ((di->defs.defined & _GD_FontVariant) == 0)
+ {
+ if (warningLevel > 9)
+ {
+ WARN1("No font variant for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_VARIANT);
+ }
+ di->fontVariant = XkbInternAtom(NULL, DFLT_VARIANT, False);
+ }
+ if ((di->defs.defined & _GD_FontEncoding) == 0)
+ {
+ if (warningLevel > 7)
+ {
+ WARN1("No font encoding for doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_ENCODING);
+ }
+ di->fontEncoding = XkbInternAtom(NULL, DFLT_ENCODING, False);
+ }
+ if ((di->defs.defined & _GD_FontSize) == 0)
+ {
+ if (warningLevel > 7)
+ {
+ WARN1("No font size for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using %s point text\n",
+ XkbGeomFPText(DFLT_SIZE, XkbMessage));
+ }
+ di->fontSize = DFLT_SIZE;
+ }
+ if ((di->defs.defined & _GD_Height) == 0)
+ {
+ unsigned size, nLines;
+ char *tmp;
+ size = (di->fontSize * 120) / 100;
+ size = (size * 254) / 720; /* convert to mm/10 */
+ for (nLines = 1, tmp = XkbAtomGetString(NULL, di->text); *tmp;
+ tmp++)
+ {
+ if (*tmp == '\n')
+ nLines++;
+ }
+ size *= nLines;
+ if (warningLevel > 5)
+ {
+ WARN1("No height for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using calculated height %s millimeters\n",
+ XkbGeomFPText(size, XkbMessage));
+ }
+ di->height = size;
+ }
+ if ((di->defs.defined & _GD_Width) == 0)
+ {
+ unsigned width, tmp;
+ char *str;
+ width = tmp = 0;
+ for (str = XkbAtomGetString(NULL, di->text); *str; str++)
+ {
+ if (*str != '\n')
+ tmp++;
+ else
+ {
+ if (tmp > width)
+ width = tmp;
+ tmp = 1;
+ }
+ }
+ if (width == 0)
+ width = tmp;
+ width *= (di->height * 2) / 3;
+ if (warningLevel > 5)
+ {
+ WARN1("No width for text doodad %s\n", ddText(info->dpy, di));
+ ACTION1("Using calculated width %s millimeters\n",
+ XkbGeomFPText(width, XkbMessage));
+ }
+ di->width = width;
+ }
+ break;
+ case XkbIndicatorDoodad:
+ if ((di->defs.defined & _GD_Shape) == 0)
+ {
+ ERROR1("No shape defined for indicator doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ else
+ {
+ ShapeInfo *si;
+ si = FindShape(info, di->shape, "indicator doodad",
+ ddText(info->dpy, di));
+ if (si)
+ di->shape = si->name;
+ else
+ {
+ ERROR1("No legal shape for doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ }
+ if ((di->defs.defined & _GD_Color) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No \"on\" color for indicator doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Using green\n");
+ }
+ di->color = XkbInternAtom(NULL, "green", False);
+ }
+ if ((di->defs.defined & _GD_OffColor) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No \"off\" color for indicator doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Using black\n");
+ }
+ di->offColor = XkbInternAtom(NULL, "black", False);
+ }
+ break;
+ case XkbLogoDoodad:
+ if (di->logoName == NULL)
+ {
+ ERROR1("No logo name defined for logo doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ if ((di->defs.defined & _GD_Shape) == 0)
+ {
+ ERROR1("No shape defined for logo doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ else
+ {
+ ShapeInfo *si;
+ si = FindShape(info, di->shape, "logo doodad",
+ ddText(info->dpy, di));
+ if (si)
+ di->shape = si->name;
+ else
+ {
+ ERROR1("No legal shape for %s\n", ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ }
+ if ((di->defs.defined & _GD_Color) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No color for doodad %s\n", ddText(info->dpy, di));
+ ACTION("Using black\n");
+ }
+ di->color = XkbInternAtom(NULL, "black", False);
+ }
+ break;
+ default:
+ WSGO1("Uknown doodad type %d in VerifyDoodad\n",
+ (unsigned int) di->type);
+ return False;
}
return True;
}
@@ -2851,113 +3267,129 @@ VerifyDoodadInfo(DoodadInfo *di,GeometryInfo *info)
#define FONT_TEMPLATE "-*-%s-%s-%s-%s-%s-*-%d-*-*-*-*-%s"
static char *
-FontFromParts( Atom fontTok,
- Atom weightTok,
- Atom slantTok,
- Atom setWidthTok,
- Atom varTok,
- int size,
- Atom encodingTok)
-{
-int totalSize;
-char *font,*weight,*slant,*setWidth,*variant,*encoding;
-char * rtrn;
-
- font= (fontTok!=None?XkbAtomGetString(NULL,fontTok):DFLT_FONT);
- weight= (weightTok!=None?XkbAtomGetString(NULL,weightTok):DFLT_WEIGHT);
- slant= (slantTok!=None?XkbAtomGetString(NULL,slantTok):DFLT_SLANT);
- setWidth= (setWidthTok!=None?XkbAtomGetString(NULL,setWidthTok):
- DFLT_SET_WIDTH);
- variant= (varTok!=None?XkbAtomGetString(NULL,varTok):DFLT_VARIANT);
- encoding= (encodingTok!=None?XkbAtomGetString(NULL,encodingTok):
- DFLT_ENCODING);
- if (size==0)
- size= DFLT_SIZE;
- totalSize= strlen(FONT_TEMPLATE)+strlen(font)+strlen(weight)+strlen(slant);
- totalSize+= strlen(setWidth)+strlen(variant)+strlen(encoding);
- rtrn= uCalloc(totalSize,1);
- if (rtrn) {
- sprintf(rtrn,FONT_TEMPLATE,font,weight,slant,setWidth,variant,
- size,encoding);
- }
- return rtrn;
+FontFromParts(Atom fontTok,
+ Atom weightTok,
+ Atom slantTok,
+ Atom setWidthTok, Atom varTok, int size, Atom encodingTok)
+{
+ int totalSize;
+ char *font, *weight, *slant, *setWidth, *variant, *encoding;
+ char *rtrn;
+
+ font = (fontTok != None ? XkbAtomGetString(NULL, fontTok) : DFLT_FONT);
+ weight =
+ (weightTok != None ? XkbAtomGetString(NULL, weightTok) : DFLT_WEIGHT);
+ slant =
+ (slantTok != None ? XkbAtomGetString(NULL, slantTok) : DFLT_SLANT);
+ setWidth =
+ (setWidthTok !=
+ None ? XkbAtomGetString(NULL, setWidthTok) : DFLT_SET_WIDTH);
+ variant =
+ (varTok != None ? XkbAtomGetString(NULL, varTok) : DFLT_VARIANT);
+ encoding =
+ (encodingTok !=
+ None ? XkbAtomGetString(NULL, encodingTok) : DFLT_ENCODING);
+ if (size == 0)
+ size = DFLT_SIZE;
+ totalSize =
+ strlen(FONT_TEMPLATE) + strlen(font) + strlen(weight) + strlen(slant);
+ totalSize += strlen(setWidth) + strlen(variant) + strlen(encoding);
+ rtrn = uCalloc(totalSize, 1);
+ if (rtrn)
+ {
+ sprintf(rtrn, FONT_TEMPLATE, font, weight, slant, setWidth, variant,
+ size, encoding);
+ }
+ return rtrn;
}
static Bool
-CopyDoodadDef( XkbGeometryPtr geom,
- XkbSectionPtr section,
- DoodadInfo * di,
- GeometryInfo * info)
-{
-Atom name;
-XkbDoodadPtr doodad;
-XkbColorPtr color;
-XkbShapePtr shape;
-ShapeInfo * si;
-
- if (!VerifyDoodadInfo(di,info))
- return False;
- name= XkbInternAtom(NULL,XkbAtomGetString(NULL,di->name),False);
- doodad= XkbAddGeomDoodad(geom,section,name);
- if (!doodad) {
- WSGO1("Couldn't allocate doodad in %s\n",
- (section?"section":"geometry"));
- ACTION1("Cannot copy doodad %s\n",ddText(info->dpy,di));
- return False;
- }
- doodad->any.type= di->type;
- doodad->any.priority= di->priority;
- doodad->any.top= di->top;
- doodad->any.left= di->left;
- switch (di->type) {
- case XkbOutlineDoodad:
- case XkbSolidDoodad:
- si= FindShape(info,di->shape,NULL,NULL);
- if (!si)
- return False;
- doodad->shape.angle= di->angle;
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,di->color),geom->num_colors);
- shape= &geom->shapes[si->index];
- XkbSetShapeDoodadColor(geom,&doodad->shape,color);
- XkbSetShapeDoodadShape(geom,&doodad->shape,shape);
- break;
- case XkbTextDoodad:
- doodad->text.angle= di->angle;
- doodad->text.width= di->width;
- doodad->text.height= di->height;
- if (di->fontSpec==None)
- doodad->text.font= FontFromParts(di->font,di->fontWeight,
- di->fontSlant,di->fontSetWidth,
- di->fontVariant,
- di->fontSize,di->fontEncoding);
- else doodad->text.font= XkbAtomGetString(NULL,di->fontSpec);
- doodad->text.text= XkbAtomGetString(NULL,di->text);
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,di->color),geom->num_colors);
- XkbSetTextDoodadColor(geom,&doodad->text,color);
- break;
- case XkbIndicatorDoodad:
- si= FindShape(info,di->shape,NULL,NULL);
- if (!si)
- return False;
- shape= &geom->shapes[si->index];
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,di->color),geom->num_colors);
- XkbSetIndicatorDoodadShape(geom,&doodad->indicator,shape);
- XkbSetIndicatorDoodadOnColor(geom,&doodad->indicator,color);
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,di->offColor),geom->num_colors);
- XkbSetIndicatorDoodadOffColor(geom,&doodad->indicator,color);
- break;
- case XkbLogoDoodad:
- si= FindShape(info,di->shape,NULL,NULL);
- if (!si)
- return False;
- doodad->logo.angle= di->angle;
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,di->color),geom->num_colors);
- shape= &geom->shapes[si->index];
- XkbSetLogoDoodadColor(geom,&doodad->logo,color);
- XkbSetLogoDoodadShape(geom,&doodad->logo,shape);
- doodad->logo.logo_name= di->logoName;
- di->logoName= NULL;
- break;
+CopyDoodadDef(XkbGeometryPtr geom,
+ XkbSectionPtr section, DoodadInfo * di, GeometryInfo * info)
+{
+ Atom name;
+ XkbDoodadPtr doodad;
+ XkbColorPtr color;
+ XkbShapePtr shape;
+ ShapeInfo *si;
+
+ if (!VerifyDoodadInfo(di, info))
+ return False;
+ name = XkbInternAtom(NULL, XkbAtomGetString(NULL, di->name), False);
+ doodad = XkbAddGeomDoodad(geom, section, name);
+ if (!doodad)
+ {
+ WSGO1("Couldn't allocate doodad in %s\n",
+ (section ? "section" : "geometry"));
+ ACTION1("Cannot copy doodad %s\n", ddText(info->dpy, di));
+ return False;
+ }
+ doodad->any.type = di->type;
+ doodad->any.priority = di->priority;
+ doodad->any.top = di->top;
+ doodad->any.left = di->left;
+ switch (di->type)
+ {
+ case XkbOutlineDoodad:
+ case XkbSolidDoodad:
+ si = FindShape(info, di->shape, NULL, NULL);
+ if (!si)
+ return False;
+ doodad->shape.angle = di->angle;
+ color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, di->color),
+ geom->num_colors);
+ shape = &geom->shapes[si->index];
+ XkbSetShapeDoodadColor(geom, &doodad->shape, color);
+ XkbSetShapeDoodadShape(geom, &doodad->shape, shape);
+ break;
+ case XkbTextDoodad:
+ doodad->text.angle = di->angle;
+ doodad->text.width = di->width;
+ doodad->text.height = di->height;
+ if (di->fontSpec == None)
+ doodad->text.font = FontFromParts(di->font, di->fontWeight,
+ di->fontSlant,
+ di->fontSetWidth,
+ di->fontVariant, di->fontSize,
+ di->fontEncoding);
+ else
+ doodad->text.font = XkbAtomGetString(NULL, di->fontSpec);
+ doodad->text.text = XkbAtomGetString(NULL, di->text);
+ color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, di->color),
+ geom->num_colors);
+ XkbSetTextDoodadColor(geom, &doodad->text, color);
+ break;
+ case XkbIndicatorDoodad:
+ si = FindShape(info, di->shape, NULL, NULL);
+ if (!si)
+ return False;
+ shape = &geom->shapes[si->index];
+ color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, di->color),
+ geom->num_colors);
+ XkbSetIndicatorDoodadShape(geom, &doodad->indicator, shape);
+ XkbSetIndicatorDoodadOnColor(geom, &doodad->indicator, color);
+ color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, di->offColor),
+ geom->num_colors);
+ XkbSetIndicatorDoodadOffColor(geom, &doodad->indicator, color);
+ break;
+ case XkbLogoDoodad:
+ si = FindShape(info, di->shape, NULL, NULL);
+ if (!si)
+ return False;
+ doodad->logo.angle = di->angle;
+ color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, di->color),
+ geom->num_colors);
+ shape = &geom->shapes[si->index];
+ XkbSetLogoDoodadColor(geom, &doodad->logo, color);
+ XkbSetLogoDoodadShape(geom, &doodad->logo, shape);
+ doodad->logo.logo_name = di->logoName;
+ di->logoName = NULL;
+ break;
}
return True;
}
@@ -2965,131 +3397,153 @@ ShapeInfo * si;
/***====================================================================***/
static Bool
-VerifyOverlayInfo( XkbGeometryPtr geom,
- XkbSectionPtr section,
- OverlayInfo * oi,
- GeometryInfo * info,
- short rowMap[256],
- short rowSize[256])
-{
-register OverlayKeyInfo * ki,*next;
-unsigned long oKey,uKey,sKey;
-XkbRowPtr row;
-XkbKeyPtr key;
-int r,k;
+VerifyOverlayInfo(XkbGeometryPtr geom,
+ XkbSectionPtr section,
+ OverlayInfo * oi,
+ GeometryInfo * info, short rowMap[256], short rowSize[256])
+{
+ register OverlayKeyInfo *ki, *next;
+ unsigned long oKey, uKey, sKey;
+ XkbRowPtr row;
+ XkbKeyPtr key;
+ int r, k;
/* find out which row each key is in */
- for (ki=oi->keys;ki!=NULL;ki=(OverlayKeyInfo *)ki->defs.next) {
- oKey= KeyNameToLong(ki->over);
- uKey= KeyNameToLong(ki->under);
- for (r=0,row=section->rows;(r<section->num_rows)&&oKey;r++,row++) {
- for (k=0,key=row->keys;(k<row->num_keys)&&oKey;k++,key++) {
- sKey= KeyNameToLong(key->name.name);
- if (sKey==oKey) {
- if (warningLevel>0) {
- WARN3("Key %s in section \"%s\" and overlay \"%s\"\n",
- XkbKeyNameText(key->name.name,XkbMessage),
- XkbAtomText(info->dpy,section->name,XkbMessage),
- XkbAtomText(info->dpy,oi->name,XkbMessage));
- ACTION("Overlay definition ignored\n");
- }
- oKey= 0;
- }
- else if (sKey==uKey) {
- ki->sectionRow= r;
- oKey= 0;
- }
- }
- }
- if ((ki->sectionRow==_GOK_UnknownRow)&&(warningLevel>0)) {
- WARN3("Key %s not in \"%s\", but has an overlay key in \"%s\"\n",
- XkbKeyNameText(ki->under,XkbMessage),
- XkbAtomText(info->dpy,section->name,XkbMessage),
- XkbAtomText(info->dpy,oi->name,XkbMessage));
- ACTION("Definition ignored\n");
- }
+ for (ki = oi->keys; ki != NULL; ki = (OverlayKeyInfo *) ki->defs.next)
+ {
+ oKey = KeyNameToLong(ki->over);
+ uKey = KeyNameToLong(ki->under);
+ for (r = 0, row = section->rows; (r < section->num_rows) && oKey;
+ r++, row++)
+ {
+ for (k = 0, key = row->keys; (k < row->num_keys) && oKey;
+ k++, key++)
+ {
+ sKey = KeyNameToLong(key->name.name);
+ if (sKey == oKey)
+ {
+ if (warningLevel > 0)
+ {
+ WARN3
+ ("Key %s in section \"%s\" and overlay \"%s\"\n",
+ XkbKeyNameText(key->name.name,
+ XkbMessage),
+ XkbAtomText(info->dpy, section->name,
+ XkbMessage),
+ XkbAtomText(info->dpy, oi->name, XkbMessage));
+ ACTION("Overlay definition ignored\n");
+ }
+ oKey = 0;
+ }
+ else if (sKey == uKey)
+ {
+ ki->sectionRow = r;
+ oKey = 0;
+ }
+ }
+ }
+ if ((ki->sectionRow == _GOK_UnknownRow) && (warningLevel > 0))
+ {
+ WARN3
+ ("Key %s not in \"%s\", but has an overlay key in \"%s\"\n",
+ XkbKeyNameText(ki->under, XkbMessage),
+ XkbAtomText(info->dpy, section->name, XkbMessage),
+ XkbAtomText(info->dpy, oi->name, XkbMessage));
+ ACTION("Definition ignored\n");
+ }
}
/* now prune out keys that aren't in the section */
- while ((oi->keys!=NULL)&&(oi->keys->sectionRow==_GOK_UnknownRow)) {
- next= (OverlayKeyInfo *)oi->keys->defs.next;
- uFree(oi->keys);
- oi->keys= next;
- oi->nKeys--;
- }
- for (ki=oi->keys;(ki!=NULL)&&(ki->defs.next!=NULL);ki=next) {
- next= (OverlayKeyInfo *)ki->defs.next;
- if (next->sectionRow==_GOK_UnknownRow) {
- ki->defs.next= next->defs.next;
- oi->nKeys--;
- uFree(next);
- next= (OverlayKeyInfo *)ki->defs.next;
- }
- }
- if (oi->nKeys<1) {
- ERROR2("Overlay \"%s\" for section \"%s\" has no legal keys\n",
- XkbAtomText(info->dpy,oi->name,XkbMessage),
- XkbAtomText(info->dpy,section->name,XkbMessage));
- ACTION("Overlay definition ignored\n");
- return False;
+ while ((oi->keys != NULL) && (oi->keys->sectionRow == _GOK_UnknownRow))
+ {
+ next = (OverlayKeyInfo *) oi->keys->defs.next;
+ uFree(oi->keys);
+ oi->keys = next;
+ oi->nKeys--;
+ }
+ for (ki = oi->keys; (ki != NULL) && (ki->defs.next != NULL); ki = next)
+ {
+ next = (OverlayKeyInfo *) ki->defs.next;
+ if (next->sectionRow == _GOK_UnknownRow)
+ {
+ ki->defs.next = next->defs.next;
+ oi->nKeys--;
+ uFree(next);
+ next = (OverlayKeyInfo *) ki->defs.next;
+ }
+ }
+ if (oi->nKeys < 1)
+ {
+ ERROR2("Overlay \"%s\" for section \"%s\" has no legal keys\n",
+ XkbAtomText(info->dpy, oi->name, XkbMessage),
+ XkbAtomText(info->dpy, section->name, XkbMessage));
+ ACTION("Overlay definition ignored\n");
+ return False;
}
/* now figure out how many rows are defined for the overlay */
- bzero(rowSize,sizeof(short)*256);
- for (k=0;k<256;k++) {
- rowMap[k]= -1;
- }
- oi->nRows= 0;
- for (ki=oi->keys;ki!=NULL;ki=(OverlayKeyInfo *)ki->defs.next) {
- if (rowMap[ki->sectionRow]==-1)
- rowMap[ki->sectionRow]= oi->nRows++;
- ki->overlayRow= rowMap[ki->sectionRow];
- rowSize[ki->overlayRow]++;
+ bzero(rowSize, sizeof(short) * 256);
+ for (k = 0; k < 256; k++)
+ {
+ rowMap[k] = -1;
+ }
+ oi->nRows = 0;
+ for (ki = oi->keys; ki != NULL; ki = (OverlayKeyInfo *) ki->defs.next)
+ {
+ if (rowMap[ki->sectionRow] == -1)
+ rowMap[ki->sectionRow] = oi->nRows++;
+ ki->overlayRow = rowMap[ki->sectionRow];
+ rowSize[ki->overlayRow]++;
}
return True;
}
static Bool
-CopyOverlayDef( XkbGeometryPtr geom,
- XkbSectionPtr section,
- OverlayInfo * oi,
- GeometryInfo * info)
-{
-Atom name;
-XkbOverlayPtr ol;
-XkbOverlayRowPtr row;
-XkbOverlayKeyPtr key;
-OverlayKeyInfo * ki;
-short rowMap[256],rowSize[256];
-int i;
-
- if (!VerifyOverlayInfo(geom,section,oi,info,rowMap,rowSize))
- return False;
- name= XkbInternAtom(NULL,XkbAtomGetString(NULL,oi->name),False);
- ol= XkbAddGeomOverlay(section,name,oi->nRows);
- if (!ol) {
- WSGO2("Couldn't add overlay \"%s\" to section \"%s\"\n",
- XkbAtomText(info->dpy,name,XkbMessage),
- XkbAtomText(info->dpy,section->name,XkbMessage));
- return False;
- }
- for (i=0;i<oi->nRows;i++) {
- int tmp,row_under;
- for (tmp=0,row_under=-1;(tmp<section->num_rows)&&(row_under<0);tmp++) {
- if (rowMap[tmp]==i)
- row_under= tmp;
- }
- if (!XkbAddGeomOverlayRow(ol,row_under,rowSize[i])) {
- WSGO3("Can't add row %d to overlay \"%s\" of section \"%s\"\n",
- i,XkbAtomText(info->dpy,name,XkbMessage),
- XkbAtomText(info->dpy,section->name,XkbMessage));
- return False;
- }
- }
- for (ki=oi->keys;ki!=NULL;ki=(OverlayKeyInfo *)ki->defs.next) {
- row= &ol->rows[ki->overlayRow];
- key= &row->keys[row->num_keys++];
- bzero(key,sizeof(XkbOverlayKeyRec));
- strncpy(key->over.name,ki->over,XkbKeyNameLength);
- strncpy(key->under.name,ki->under,XkbKeyNameLength);
+CopyOverlayDef(XkbGeometryPtr geom,
+ XkbSectionPtr section, OverlayInfo * oi, GeometryInfo * info)
+{
+ Atom name;
+ XkbOverlayPtr ol;
+ XkbOverlayRowPtr row;
+ XkbOverlayKeyPtr key;
+ OverlayKeyInfo *ki;
+ short rowMap[256], rowSize[256];
+ int i;
+
+ if (!VerifyOverlayInfo(geom, section, oi, info, rowMap, rowSize))
+ return False;
+ name = XkbInternAtom(NULL, XkbAtomGetString(NULL, oi->name), False);
+ ol = XkbAddGeomOverlay(section, name, oi->nRows);
+ if (!ol)
+ {
+ WSGO2("Couldn't add overlay \"%s\" to section \"%s\"\n",
+ XkbAtomText(info->dpy, name, XkbMessage),
+ XkbAtomText(info->dpy, section->name, XkbMessage));
+ return False;
+ }
+ for (i = 0; i < oi->nRows; i++)
+ {
+ int tmp, row_under;
+ for (tmp = 0, row_under = -1;
+ (tmp < section->num_rows) && (row_under < 0); tmp++)
+ {
+ if (rowMap[tmp] == i)
+ row_under = tmp;
+ }
+ if (!XkbAddGeomOverlayRow(ol, row_under, rowSize[i]))
+ {
+ WSGO3
+ ("Can't add row %d to overlay \"%s\" of section \"%s\"\n",
+ i, XkbAtomText(info->dpy, name, XkbMessage),
+ XkbAtomText(info->dpy, section->name, XkbMessage));
+ return False;
+ }
+ }
+ for (ki = oi->keys; ki != NULL; ki = (OverlayKeyInfo *) ki->defs.next)
+ {
+ row = &ol->rows[ki->overlayRow];
+ key = &row->keys[row->num_keys++];
+ bzero(key, sizeof(XkbOverlayKeyRec));
+ strncpy(key->over.name, ki->over, XkbKeyNameLength);
+ strncpy(key->under.name, ki->under, XkbKeyNameLength);
}
return True;
}
@@ -3097,88 +3551,106 @@ int i;
/***====================================================================***/
static Bool
-CopySectionDef(XkbGeometryPtr geom,SectionInfo *si,GeometryInfo *info)
-{
-XkbSectionPtr section;
-XkbRowPtr row;
-XkbKeyPtr key;
-KeyInfo * ki;
-RowInfo * ri;
-Atom name;
-
- name= XkbInternAtom(NULL,XkbAtomGetString(NULL,si->name),False);
- section= XkbAddGeomSection(geom,name,si->nRows,si->nDoodads,si->nOverlays);
- if (section==NULL) {
- WSGO("Couldn't allocate section in geometry\n");
- ACTION1("Section %s not compiled\n",scText(info->dpy,si));
- return False;
- }
- section->top= si->top;
- section->left= si->left;
- section->width= si->width;
- section->height= si->height;
- section->angle= si->angle;
- section->priority= si->priority;
- for (ri=si->rows;ri!=NULL;ri=(RowInfo *)ri->defs.next) {
- row= XkbAddGeomRow(section,ri->nKeys);
- if (row==NULL) {
- WSGO("Couldn't allocate row in section\n");
- ACTION1("Section %s is incomplete\n",scText(info->dpy,si));
- return False;
- }
- row->top= ri->top;
- row->left= ri->left;
- row->vertical= ri->vertical;
- for (ki=ri->keys;ki!=NULL;ki=(KeyInfo *)ki->defs.next) {
- XkbColorPtr color;
- if ((ki->defs.defined&_GK_Name)==0) {
- ERROR3("Key %d of row %d in section %s has no name\n",
- (int)ki->index,(int)ri->index,
- scText(info->dpy,si));
- ACTION1("Section %s ignored\n",scText(info->dpy,si));
- return False;
- }
- key= XkbAddGeomKey(row);
- if (key==NULL) {
- WSGO("Couldn't allocate key in row\n");
- ACTION1("Section %s is incomplete\n",scText(info->dpy,si));
- return False;
- }
- memcpy(key->name.name,ki->name,XkbKeyNameLength);
- key->gap= ki->gap;
- if (ki->shape==None)
- key->shape_ndx= 0;
- else {
- ShapeInfo *si;
- si= FindShape(info,ki->shape,"key",keyText(ki));
- if (!si)
- return False;
- key->shape_ndx= si->index;
- }
- if (ki->color!=None)
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,ki->color),geom->num_colors);
- else color= XkbAddGeomColor(geom,"white",geom->num_colors);
- XkbSetKeyColor(geom,key,color);
- }
- }
- if (si->doodads!=NULL) {
- DoodadInfo *di;
- for (di=si->doodads;di!=NULL;di=(DoodadInfo *)di->defs.next) {
- CopyDoodadDef(geom,section,di,info);
- }
- }
- if (si->overlays!=NULL) {
- OverlayInfo *oi;
- for (oi=si->overlays;oi!=NULL;oi=(OverlayInfo *)oi->defs.next) {
- CopyOverlayDef(geom,section,oi,info);
- }
- }
- if (XkbComputeSectionBounds(geom,section)) {
- /* 7/6/94 (ef) -- check for negative origin and translate */
- if ((si->defs.defined&_GS_Width)==0)
- section->width= section->bounds.x2;
- if ((si->defs.defined&_GS_Height)==0)
- section->height= section->bounds.y2;
+CopySectionDef(XkbGeometryPtr geom, SectionInfo * si, GeometryInfo * info)
+{
+ XkbSectionPtr section;
+ XkbRowPtr row;
+ XkbKeyPtr key;
+ KeyInfo *ki;
+ RowInfo *ri;
+ Atom name;
+
+ name = XkbInternAtom(NULL, XkbAtomGetString(NULL, si->name), False);
+ section =
+ XkbAddGeomSection(geom, name, si->nRows, si->nDoodads, si->nOverlays);
+ if (section == NULL)
+ {
+ WSGO("Couldn't allocate section in geometry\n");
+ ACTION1("Section %s not compiled\n", scText(info->dpy, si));
+ return False;
+ }
+ section->top = si->top;
+ section->left = si->left;
+ section->width = si->width;
+ section->height = si->height;
+ section->angle = si->angle;
+ section->priority = si->priority;
+ for (ri = si->rows; ri != NULL; ri = (RowInfo *) ri->defs.next)
+ {
+ row = XkbAddGeomRow(section, ri->nKeys);
+ if (row == NULL)
+ {
+ WSGO("Couldn't allocate row in section\n");
+ ACTION1("Section %s is incomplete\n", scText(info->dpy, si));
+ return False;
+ }
+ row->top = ri->top;
+ row->left = ri->left;
+ row->vertical = ri->vertical;
+ for (ki = ri->keys; ki != NULL; ki = (KeyInfo *) ki->defs.next)
+ {
+ XkbColorPtr color;
+ if ((ki->defs.defined & _GK_Name) == 0)
+ {
+ ERROR3("Key %d of row %d in section %s has no name\n",
+ (int) ki->index, (int) ri->index,
+ scText(info->dpy, si));
+ ACTION1("Section %s ignored\n", scText(info->dpy, si));
+ return False;
+ }
+ key = XkbAddGeomKey(row);
+ if (key == NULL)
+ {
+ WSGO("Couldn't allocate key in row\n");
+ ACTION1("Section %s is incomplete\n", scText(info->dpy, si));
+ return False;
+ }
+ memcpy(key->name.name, ki->name, XkbKeyNameLength);
+ key->gap = ki->gap;
+ if (ki->shape == None)
+ key->shape_ndx = 0;
+ else
+ {
+ ShapeInfo *si;
+ si = FindShape(info, ki->shape, "key", keyText(ki));
+ if (!si)
+ return False;
+ key->shape_ndx = si->index;
+ }
+ if (ki->color != None)
+ color =
+ XkbAddGeomColor(geom,
+ XkbAtomGetString(NULL, ki->color),
+ geom->num_colors);
+ else
+ color = XkbAddGeomColor(geom, "white", geom->num_colors);
+ XkbSetKeyColor(geom, key, color);
+ }
+ }
+ if (si->doodads != NULL)
+ {
+ DoodadInfo *di;
+ for (di = si->doodads; di != NULL; di = (DoodadInfo *) di->defs.next)
+ {
+ CopyDoodadDef(geom, section, di, info);
+ }
+ }
+ if (si->overlays != NULL)
+ {
+ OverlayInfo *oi;
+ for (oi = si->overlays; oi != NULL;
+ oi = (OverlayInfo *) oi->defs.next)
+ {
+ CopyOverlayDef(geom, section, oi, info);
+ }
+ }
+ if (XkbComputeSectionBounds(geom, section))
+ {
+ /* 7/6/94 (ef) -- check for negative origin and translate */
+ if ((si->defs.defined & _GS_Width) == 0)
+ section->width = section->bounds.x2;
+ if ((si->defs.defined & _GS_Height) == 0)
+ section->height = section->bounds.y2;
}
return True;
}
@@ -3186,90 +3658,111 @@ Atom name;
/***====================================================================***/
Bool
-CompileGeometry(XkbFile *file,XkbFileInfo *result,unsigned merge)
-{
-GeometryInfo info;
-XkbDescPtr xkb;
-
- xkb= result->xkb;
- InitGeometryInfo(&info,file->id,merge);
- info.dpy= xkb->dpy;
- HandleGeometryFile(file,xkb,merge,&info);
-
- if (info.errorCount==0) {
- XkbGeometryPtr geom;
- XkbGeometrySizesRec sizes;
- bzero(&sizes,sizeof(sizes));
- sizes.which= XkbGeomAllMask;
- sizes.num_properties= info.nProps;
- sizes.num_colors= 8;
- sizes.num_shapes= info.nShapes;
- sizes.num_sections= info.nSections;
- sizes.num_doodads= info.nDoodads;
- if (XkbAllocGeometry(xkb,&sizes)!=Success) {
- WSGO("Couldn't allocate GeometryRec\n");
- ACTION("Geometry not compiled\n");
- return False;
- }
- geom= xkb->geom;
-
- geom->width_mm= info.widthMM;
- geom->height_mm= info.heightMM;
- if (info.name!=NULL) {
- geom->name= XkbInternAtom(xkb->dpy,info.name,False);
- if (XkbAllocNames(xkb,XkbGeometryNameMask,0,0)==Success)
- xkb->names->geometry= geom->name;
- }
- if (info.fontSpec!=None)
- geom->label_font= uStringDup(XkbAtomGetString(NULL,info.fontSpec));
- else geom->label_font= FontFromParts(info.font,info.fontWeight,
- info.fontSlant,info.fontSetWidth,
- info.fontVariant,
- info.fontSize,info.fontEncoding);
- XkbAddGeomColor(geom,"black",geom->num_colors);
- XkbAddGeomColor(geom,"white",geom->num_colors);
-
- if (info.baseColor==None)
- info.baseColor= XkbInternAtom(NULL,"white",False);
- if (info.labelColor==None)
- info.labelColor= XkbInternAtom(NULL,"black",False);
- geom->base_color=
- XkbAddGeomColor(geom,XkbAtomGetString(NULL,info.baseColor),geom->num_colors);
- geom->label_color=
- XkbAddGeomColor(geom,XkbAtomGetString(NULL,info.labelColor),geom->num_colors);
-
- if (info.props) {
- PropertyInfo *pi;
- for (pi= info.props;pi!=NULL;pi=(PropertyInfo *)pi->defs.next) {
- if (!XkbAddGeomProperty(geom,pi->name,pi->value))
- return False;
- }
- }
- if (info.shapes) {
- ShapeInfo *si;
- for (si= info.shapes;si!=NULL;si=(ShapeInfo *)si->defs.next) {
- if (!CopyShapeDef(xkb->dpy,geom,si))
- return False;
- }
- }
- if (info.sections) {
- SectionInfo *si;
- for (si= info.sections;si!=NULL;si=(SectionInfo *)si->defs.next) {
- if (!CopySectionDef(geom,si,&info))
- return False;
- }
- }
- if (info.doodads) {
- DoodadInfo *di;
- for (di= info.doodads;di!=NULL;di=(DoodadInfo *)di->defs.next) {
- if (!CopyDoodadDef(geom,NULL,di,&info))
- return False;
- }
- }
- if (info.aliases)
- ApplyAliases(xkb,True,&info.aliases);
- ClearGeometryInfo(&info);
- return True;
+CompileGeometry(XkbFile * file, XkbFileInfo * result, unsigned merge)
+{
+ GeometryInfo info;
+ XkbDescPtr xkb;
+
+ xkb = result->xkb;
+ InitGeometryInfo(&info, file->id, merge);
+ info.dpy = xkb->dpy;
+ HandleGeometryFile(file, xkb, merge, &info);
+
+ if (info.errorCount == 0)
+ {
+ XkbGeometryPtr geom;
+ XkbGeometrySizesRec sizes;
+ bzero(&sizes, sizeof(sizes));
+ sizes.which = XkbGeomAllMask;
+ sizes.num_properties = info.nProps;
+ sizes.num_colors = 8;
+ sizes.num_shapes = info.nShapes;
+ sizes.num_sections = info.nSections;
+ sizes.num_doodads = info.nDoodads;
+ if (XkbAllocGeometry(xkb, &sizes) != Success)
+ {
+ WSGO("Couldn't allocate GeometryRec\n");
+ ACTION("Geometry not compiled\n");
+ return False;
+ }
+ geom = xkb->geom;
+
+ geom->width_mm = info.widthMM;
+ geom->height_mm = info.heightMM;
+ if (info.name != NULL)
+ {
+ geom->name = XkbInternAtom(xkb->dpy, info.name, False);
+ if (XkbAllocNames(xkb, XkbGeometryNameMask, 0, 0) == Success)
+ xkb->names->geometry = geom->name;
+ }
+ if (info.fontSpec != None)
+ geom->label_font =
+ uStringDup(XkbAtomGetString(NULL, info.fontSpec));
+ else
+ geom->label_font = FontFromParts(info.font, info.fontWeight,
+ info.fontSlant,
+ info.fontSetWidth,
+ info.fontVariant,
+ info.fontSize,
+ info.fontEncoding);
+ XkbAddGeomColor(geom, "black", geom->num_colors);
+ XkbAddGeomColor(geom, "white", geom->num_colors);
+
+ if (info.baseColor == None)
+ info.baseColor = XkbInternAtom(NULL, "white", False);
+ if (info.labelColor == None)
+ info.labelColor = XkbInternAtom(NULL, "black", False);
+ geom->base_color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, info.baseColor),
+ geom->num_colors);
+ geom->label_color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, info.labelColor),
+ geom->num_colors);
+
+ if (info.props)
+ {
+ PropertyInfo *pi;
+ for (pi = info.props; pi != NULL;
+ pi = (PropertyInfo *) pi->defs.next)
+ {
+ if (!XkbAddGeomProperty(geom, pi->name, pi->value))
+ return False;
+ }
+ }
+ if (info.shapes)
+ {
+ ShapeInfo *si;
+ for (si = info.shapes; si != NULL;
+ si = (ShapeInfo *) si->defs.next)
+ {
+ if (!CopyShapeDef(xkb->dpy, geom, si))
+ return False;
+ }
+ }
+ if (info.sections)
+ {
+ SectionInfo *si;
+ for (si = info.sections; si != NULL;
+ si = (SectionInfo *) si->defs.next)
+ {
+ if (!CopySectionDef(geom, si, &info))
+ return False;
+ }
+ }
+ if (info.doodads)
+ {
+ DoodadInfo *di;
+ for (di = info.doodads; di != NULL;
+ di = (DoodadInfo *) di->defs.next)
+ {
+ if (!CopyDoodadDef(geom, NULL, di, &info))
+ return False;
+ }
+ }
+ if (info.aliases)
+ ApplyAliases(xkb, True, &info.aliases);
+ ClearGeometryInfo(&info);
+ return True;
}
return False;
}
diff --git a/indicators.c b/indicators.c
index 9657220..080ae8e 100644
--- a/indicators.c
+++ b/indicators.c
@@ -45,439 +45,531 @@
/***====================================================================***/
void
-ClearIndicatorMapInfo(Display *dpy,LEDInfo *info)
+ClearIndicatorMapInfo(Display * dpy, LEDInfo * info)
{
- info->name= XkbInternAtom(dpy,"default",False);
- info->indicator= _LED_NotBound;
- info->flags= info->which_mods= info->real_mods= 0;
- info->vmods= 0;
- info->which_groups= info->groups= 0;
- info->ctrls= 0;
+ info->name = XkbInternAtom(dpy, "default", False);
+ info->indicator = _LED_NotBound;
+ info->flags = info->which_mods = info->real_mods = 0;
+ info->vmods = 0;
+ info->which_groups = info->groups = 0;
+ info->ctrls = 0;
return;
}
LEDInfo *
-AddIndicatorMap(LEDInfo *oldLEDs,LEDInfo *new)
+AddIndicatorMap(LEDInfo * oldLEDs, LEDInfo * new)
{
-LEDInfo *old,*last;
-unsigned collide;
+ LEDInfo *old, *last;
+ unsigned collide;
- last= NULL;
- for (old=oldLEDs;old!=NULL;old=(LEDInfo *)old->defs.next) {
- if (old->name==new->name) {
- if ((old->real_mods==new->real_mods)&&
- (old->vmods==new->vmods)&&
- (old->groups==new->groups)&&
- (old->ctrls==new->ctrls)&&
- (old->which_mods==new->which_mods)&&
- (old->which_groups==new->which_groups)) {
- old->defs.defined|= new->defs.defined;
- return oldLEDs;
- }
- if (new->defs.merge==MergeReplace) {
- CommonInfo *next= old->defs.next;
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Map for indicator %s redefined\n",
- XkbAtomText(NULL,old->name,XkbMessage));
- ACTION("Earlier definition ignored\n");
- }
- *old= *new;
- old->defs.next= next;
- return oldLEDs;
- }
- collide= 0;
- if (UseNewField(_LED_Index,&old->defs,&new->defs,&collide)) {
- old->indicator= new->indicator;
- old->defs.defined|= _LED_Index;
- }
- if (UseNewField(_LED_Mods,&old->defs,&new->defs,&collide)) {
- old->which_mods= new->which_mods;
- old->real_mods= new->real_mods;
- old->vmods= new->vmods;
- old->defs.defined|= _LED_Mods;
- }
- if (UseNewField(_LED_Groups,&old->defs,&new->defs,&collide)) {
- old->which_groups= new->which_groups;
- old->groups= new->groups;
- old->defs.defined|= _LED_Groups;
- }
- if (UseNewField(_LED_Ctrls,&old->defs,&new->defs,&collide)) {
- old->ctrls= new->ctrls;
- old->defs.defined|= _LED_Ctrls;
- }
- if (UseNewField(_LED_Explicit,&old->defs,&new->defs,&collide)) {
- old->flags&= ~XkbIM_NoExplicit;
- old->flags|= (new->flags&XkbIM_NoExplicit);
- old->defs.defined|= _LED_Explicit;
- }
- if (UseNewField(_LED_Automatic,&old->defs,&new->defs,&collide)) {
- old->flags&= ~XkbIM_NoAutomatic;
- old->flags|= (new->flags&XkbIM_NoAutomatic);
- old->defs.defined|= _LED_Automatic;
- }
- if (UseNewField(_LED_DrivesKbd,&old->defs,&new->defs,&collide)) {
- old->flags&= ~XkbIM_LEDDrivesKB;
- old->flags|= (new->flags&XkbIM_LEDDrivesKB);
- old->defs.defined|= _LED_DrivesKbd;
- }
- if (collide) {
- WARN1("Map for indicator %s redefined\n",
- XkbAtomText(NULL,old->name,XkbMessage));
- ACTION1("Using %s definition for duplicate fields\n",
- (new->defs.merge==MergeAugment?"first":"last"));
- }
- return oldLEDs;
- }
- if (old->defs.next==NULL)
- last= old;
+ last = NULL;
+ for (old = oldLEDs; old != NULL; old = (LEDInfo *) old->defs.next)
+ {
+ if (old->name == new->name)
+ {
+ if ((old->real_mods == new->real_mods) &&
+ (old->vmods == new->vmods) &&
+ (old->groups == new->groups) &&
+ (old->ctrls == new->ctrls) &&
+ (old->which_mods == new->which_mods) &&
+ (old->which_groups == new->which_groups))
+ {
+ old->defs.defined |= new->defs.defined;
+ return oldLEDs;
+ }
+ if (new->defs.merge == MergeReplace)
+ {
+ CommonInfo *next = old->defs.next;
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Map for indicator %s redefined\n",
+ XkbAtomText(NULL, old->name, XkbMessage));
+ ACTION("Earlier definition ignored\n");
+ }
+ *old = *new;
+ old->defs.next = next;
+ return oldLEDs;
+ }
+ collide = 0;
+ if (UseNewField(_LED_Index, &old->defs, &new->defs, &collide))
+ {
+ old->indicator = new->indicator;
+ old->defs.defined |= _LED_Index;
+ }
+ if (UseNewField(_LED_Mods, &old->defs, &new->defs, &collide))
+ {
+ old->which_mods = new->which_mods;
+ old->real_mods = new->real_mods;
+ old->vmods = new->vmods;
+ old->defs.defined |= _LED_Mods;
+ }
+ if (UseNewField(_LED_Groups, &old->defs, &new->defs, &collide))
+ {
+ old->which_groups = new->which_groups;
+ old->groups = new->groups;
+ old->defs.defined |= _LED_Groups;
+ }
+ if (UseNewField(_LED_Ctrls, &old->defs, &new->defs, &collide))
+ {
+ old->ctrls = new->ctrls;
+ old->defs.defined |= _LED_Ctrls;
+ }
+ if (UseNewField(_LED_Explicit, &old->defs, &new->defs, &collide))
+ {
+ old->flags &= ~XkbIM_NoExplicit;
+ old->flags |= (new->flags & XkbIM_NoExplicit);
+ old->defs.defined |= _LED_Explicit;
+ }
+ if (UseNewField(_LED_Automatic, &old->defs, &new->defs, &collide))
+ {
+ old->flags &= ~XkbIM_NoAutomatic;
+ old->flags |= (new->flags & XkbIM_NoAutomatic);
+ old->defs.defined |= _LED_Automatic;
+ }
+ if (UseNewField(_LED_DrivesKbd, &old->defs, &new->defs, &collide))
+ {
+ old->flags &= ~XkbIM_LEDDrivesKB;
+ old->flags |= (new->flags & XkbIM_LEDDrivesKB);
+ old->defs.defined |= _LED_DrivesKbd;
+ }
+ if (collide)
+ {
+ WARN1("Map for indicator %s redefined\n",
+ XkbAtomText(NULL, old->name, XkbMessage));
+ ACTION1("Using %s definition for duplicate fields\n",
+ (new->defs.merge == MergeAugment ? "first" : "last"));
+ }
+ return oldLEDs;
+ }
+ if (old->defs.next == NULL)
+ last = old;
}
/* new definition */
- old= uTypedAlloc(LEDInfo);
- if (!old) {
- WSGO("Couldn't allocate indicator map\n");
- ACTION1("Map for indicator %s not compiled\n",
- XkbAtomText(NULL,new->name,XkbMessage));
- return False;
+ old = uTypedAlloc(LEDInfo);
+ if (!old)
+ {
+ WSGO("Couldn't allocate indicator map\n");
+ ACTION1("Map for indicator %s not compiled\n",
+ XkbAtomText(NULL, new->name, XkbMessage));
+ return False;
}
- *old= *new;
- old->defs.next= NULL;
- if (last) {
- last->defs.next= &old->defs;
- return oldLEDs;
+ *old = *new;
+ old->defs.next = NULL;
+ if (last)
+ {
+ last->defs.next = &old->defs;
+ return oldLEDs;
}
return old;
}
-LookupEntry modComponentNames[] = {
- { "base", XkbIM_UseBase },
- { "latched", XkbIM_UseLatched },
- { "locked", XkbIM_UseLocked },
- { "effective", XkbIM_UseEffective },
- { "compat", XkbIM_UseCompat },
- { "any", XkbIM_UseAnyMods },
- { "none", 0 },
- { NULL, 0 }
+LookupEntry modComponentNames[] = {
+ {"base", XkbIM_UseBase}
+ ,
+ {"latched", XkbIM_UseLatched}
+ ,
+ {"locked", XkbIM_UseLocked}
+ ,
+ {"effective", XkbIM_UseEffective}
+ ,
+ {"compat", XkbIM_UseCompat}
+ ,
+ {"any", XkbIM_UseAnyMods}
+ ,
+ {"none", 0}
+ ,
+ {NULL, 0}
};
-LookupEntry groupComponentNames[] = {
- { "base", XkbIM_UseBase },
- { "latched", XkbIM_UseLatched },
- { "locked", XkbIM_UseLocked },
- { "effective", XkbIM_UseEffective },
- { "any", XkbIM_UseAnyGroup },
- { "none", 0 },
- { NULL, 0 }
+LookupEntry groupComponentNames[] = {
+ {"base", XkbIM_UseBase}
+ ,
+ {"latched", XkbIM_UseLatched}
+ ,
+ {"locked", XkbIM_UseLocked}
+ ,
+ {"effective", XkbIM_UseEffective}
+ ,
+ {"any", XkbIM_UseAnyGroup}
+ ,
+ {"none", 0}
+ ,
+ {NULL, 0}
};
int
-SetIndicatorMapField( LEDInfo * led,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value)
+SetIndicatorMapField(LEDInfo * led,
+ XkbDescPtr xkb,
+ char *field, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult rtrn;
-Bool ok;
+ ExprResult rtrn;
+ Bool ok;
- ok= True;
- if ((uStrCaseCmp(field,"modifiers")==0)||(uStrCaseCmp(field,"mods")==0)) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveModMask(value,&rtrn,LookupVModMask,(XPointer)xkb))
- return ReportIndicatorBadType(xkb->dpy,led,field,"modifier mask");
- led->real_mods= rtrn.uval&0xff;
- led->vmods= (rtrn.uval>>8)&0xff;
- led->defs.defined|= _LED_Mods;
+ ok = True;
+ if ((uStrCaseCmp(field, "modifiers") == 0)
+ || (uStrCaseCmp(field, "mods") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveModMask(value, &rtrn, LookupVModMask, (XPointer) xkb))
+ return ReportIndicatorBadType(xkb->dpy, led, field,
+ "modifier mask");
+ led->real_mods = rtrn.uval & 0xff;
+ led->vmods = (rtrn.uval >> 8) & 0xff;
+ led->defs.defined |= _LED_Mods;
}
- else if (uStrCaseCmp(field,"groups")==0) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,(XPointer)groupNames))
- return ReportIndicatorBadType(xkb->dpy,led,field,"group mask");
- led->groups= rtrn.uval;
- led->defs.defined|= _LED_Groups;
+ else if (uStrCaseCmp(field, "groups") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveMask
+ (value, &rtrn, SimpleLookup, (XPointer) groupNames))
+ return ReportIndicatorBadType(xkb->dpy, led, field, "group mask");
+ led->groups = rtrn.uval;
+ led->defs.defined |= _LED_Groups;
}
- else if ((uStrCaseCmp(field,"controls")==0)||
- (uStrCaseCmp(field,"ctrls")==0)) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,(XPointer)ctrlNames))
- return ReportIndicatorBadType(xkb->dpy,led,field,"controls mask");
- led->ctrls= rtrn.uval;
- led->defs.defined|= _LED_Ctrls;
+ else if ((uStrCaseCmp(field, "controls") == 0) ||
+ (uStrCaseCmp(field, "ctrls") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveMask
+ (value, &rtrn, SimpleLookup, (XPointer) ctrlNames))
+ return ReportIndicatorBadType(xkb->dpy, led, field,
+ "controls mask");
+ led->ctrls = rtrn.uval;
+ led->defs.defined |= _LED_Ctrls;
}
- else if (uStrCaseCmp(field,"allowexplicit")==0) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveBoolean(value,&rtrn,NULL,NULL))
- return ReportIndicatorBadType(xkb->dpy,led,field,"boolean");
- if (rtrn.uval) led->flags&= ~XkbIM_NoExplicit;
- else led->flags|= XkbIM_NoExplicit;
- led->defs.defined|= _LED_Explicit;
+ else if (uStrCaseCmp(field, "allowexplicit") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveBoolean(value, &rtrn, NULL, NULL))
+ return ReportIndicatorBadType(xkb->dpy, led, field, "boolean");
+ if (rtrn.uval)
+ led->flags &= ~XkbIM_NoExplicit;
+ else
+ led->flags |= XkbIM_NoExplicit;
+ led->defs.defined |= _LED_Explicit;
}
- else if ((uStrCaseCmp(field,"whichmodstate")==0)||
- (uStrCaseCmp(field,"whichmodifierstate")==0)) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,
- (XPointer)modComponentNames)) {
- return ReportIndicatorBadType(xkb->dpy,led,field,
- "mask of modifier state components");
- }
- led->which_mods= rtrn.uval;
+ else if ((uStrCaseCmp(field, "whichmodstate") == 0) ||
+ (uStrCaseCmp(field, "whichmodifierstate") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveMask(value, &rtrn, SimpleLookup,
+ (XPointer) modComponentNames))
+ {
+ return ReportIndicatorBadType(xkb->dpy, led, field,
+ "mask of modifier state components");
+ }
+ led->which_mods = rtrn.uval;
}
- else if (uStrCaseCmp(field,"whichgroupstate")==0) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,
- (XPointer)groupComponentNames)){
- return ReportIndicatorBadType(xkb->dpy,led,field,
- "mask of group state components");
- }
- led->which_groups= rtrn.uval;
- }
- else if ((uStrCaseCmp(field,"driveskbd")==0)||
- (uStrCaseCmp(field,"driveskeyboard")==0)||
- (uStrCaseCmp(field,"leddriveskbd")==0)||
- (uStrCaseCmp(field,"leddriveskeyboard")==0)||
- (uStrCaseCmp(field,"indicatordriveskbd")==0)||
- (uStrCaseCmp(field,"indicatordriveskeyboard")==0)) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveBoolean(value,&rtrn,NULL,NULL))
- return ReportIndicatorBadType(xkb->dpy,led,field,"boolean");
- if (rtrn.uval) led->flags|= XkbIM_LEDDrivesKB;
- else led->flags&= ~XkbIM_LEDDrivesKB;
- led->defs.defined|= _LED_DrivesKbd;
+ else if (uStrCaseCmp(field, "whichgroupstate") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveMask(value, &rtrn, SimpleLookup,
+ (XPointer) groupComponentNames))
+ {
+ return ReportIndicatorBadType(xkb->dpy, led, field,
+ "mask of group state components");
+ }
+ led->which_groups = rtrn.uval;
}
- else if (uStrCaseCmp(field,"index")==0) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportIndicatorBadType(xkb->dpy,led,field,"indicator index");
- if ((rtrn.uval<1)||(rtrn.uval>32)) {
- ERROR2("Illegal indicator index %d (range 1..%d)\n",rtrn.uval,
- XkbNumIndicators);
- ACTION1("Index definition for %s indicator ignored\n",
- XkbAtomText(NULL,led->name,XkbMessage));
- return False;
- }
- led->indicator= rtrn.uval;
- led->defs.defined|= _LED_Index;
+ else if ((uStrCaseCmp(field, "driveskbd") == 0) ||
+ (uStrCaseCmp(field, "driveskeyboard") == 0) ||
+ (uStrCaseCmp(field, "leddriveskbd") == 0) ||
+ (uStrCaseCmp(field, "leddriveskeyboard") == 0) ||
+ (uStrCaseCmp(field, "indicatordriveskbd") == 0) ||
+ (uStrCaseCmp(field, "indicatordriveskeyboard") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveBoolean(value, &rtrn, NULL, NULL))
+ return ReportIndicatorBadType(xkb->dpy, led, field, "boolean");
+ if (rtrn.uval)
+ led->flags |= XkbIM_LEDDrivesKB;
+ else
+ led->flags &= ~XkbIM_LEDDrivesKB;
+ led->defs.defined |= _LED_DrivesKbd;
}
- else {
- ERROR2("Unknown field %s in map for %s indicator\n",field,
- XkbAtomText(NULL,led->name,XkbMessage));
- ACTION("Definition ignored\n");
- ok= False;
+ else if (uStrCaseCmp(field, "index") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportIndicatorBadType(xkb->dpy, led, field,
+ "indicator index");
+ if ((rtrn.uval < 1) || (rtrn.uval > 32))
+ {
+ ERROR2("Illegal indicator index %d (range 1..%d)\n",
+ rtrn.uval, XkbNumIndicators);
+ ACTION1("Index definition for %s indicator ignored\n",
+ XkbAtomText(NULL, led->name, XkbMessage));
+ return False;
+ }
+ led->indicator = rtrn.uval;
+ led->defs.defined |= _LED_Index;
+ }
+ else
+ {
+ ERROR2("Unknown field %s in map for %s indicator\n", field,
+ XkbAtomText(NULL, led->name, XkbMessage));
+ ACTION("Definition ignored\n");
+ ok = False;
}
return ok;
}
LEDInfo *
-HandleIndicatorMapDef( IndicatorMapDef * def,
- XkbDescPtr xkb,
- LEDInfo * dflt,
- LEDInfo * oldLEDs,
- unsigned merge)
+HandleIndicatorMapDef(IndicatorMapDef * def,
+ XkbDescPtr xkb,
+ LEDInfo * dflt, LEDInfo * oldLEDs, unsigned merge)
{
-LEDInfo led,*rtrn;
-VarDef * var;
-Bool ok;
-
- if (def->merge!=MergeDefault)
- merge= def->merge;
+ LEDInfo led, *rtrn;
+ VarDef *var;
+ Bool ok;
- led= *dflt;
- led.defs.merge= merge;
- led.name= def->name;
+ if (def->merge != MergeDefault)
+ merge = def->merge;
- ok= True;
- for (var= def->body;var!=NULL;var= (VarDef *)var->common.next) {
- ExprResult elem,field;
- ExprDef * arrayNdx;
- if (!ExprResolveLhs(var->name,&elem,&field,&arrayNdx)) {
- ok= False;
- continue;
- }
- if (elem.str!=NULL) {
- ERROR1("Cannot set defaults for \"%s\" element in indicator map\n",
- elem.str);
- ACTION2("Assignment to %s.%s ignored\n",elem.str,field.str);
- ok= False;
- }
- else {
- ok=SetIndicatorMapField(&led,xkb,field.str,arrayNdx,var->value)&&ok;
- }
+ led = *dflt;
+ led.defs.merge = merge;
+ led.name = def->name;
+
+ ok = True;
+ for (var = def->body; var != NULL; var = (VarDef *) var->common.next)
+ {
+ ExprResult elem, field;
+ ExprDef *arrayNdx;
+ if (!ExprResolveLhs(var->name, &elem, &field, &arrayNdx))
+ {
+ ok = False;
+ continue;
+ }
+ if (elem.str != NULL)
+ {
+ ERROR1
+ ("Cannot set defaults for \"%s\" element in indicator map\n",
+ elem.str);
+ ACTION2("Assignment to %s.%s ignored\n", elem.str, field.str);
+ ok = False;
+ }
+ else
+ {
+ ok = SetIndicatorMapField(&led, xkb, field.str, arrayNdx,
+ var->value) && ok;
+ }
}
- if (ok) {
- rtrn= AddIndicatorMap(oldLEDs,&led);
- return rtrn;
+ if (ok)
+ {
+ rtrn = AddIndicatorMap(oldLEDs, &led);
+ return rtrn;
}
return NULL;
}
-Bool
-CopyIndicatorMapDefs(XkbFileInfo *result,LEDInfo *leds,LEDInfo **unboundRtrn)
+Bool
+CopyIndicatorMapDefs(XkbFileInfo * result, LEDInfo * leds,
+ LEDInfo ** unboundRtrn)
{
-LEDInfo * led,*next;
-LEDInfo * unbound,*last;
-XkbDescPtr xkb;
+ LEDInfo *led, *next;
+ LEDInfo *unbound, *last;
+ XkbDescPtr xkb;
- xkb= result->xkb;
- if (XkbAllocNames(xkb,XkbIndicatorNamesMask,0,0)!=Success) {
- WSGO("Couldn't allocate names\n");
- ACTION("Indicator names may be incorrect\n");
+ xkb = result->xkb;
+ if (XkbAllocNames(xkb, XkbIndicatorNamesMask, 0, 0) != Success)
+ {
+ WSGO("Couldn't allocate names\n");
+ ACTION("Indicator names may be incorrect\n");
}
- if (XkbAllocIndicatorMaps(xkb)!=Success) {
- WSGO("Can't allocate indicator maps\n");
- ACTION("Indicator map definitions may be lost\n");
- return False;
+ if (XkbAllocIndicatorMaps(xkb) != Success)
+ {
+ WSGO("Can't allocate indicator maps\n");
+ ACTION("Indicator map definitions may be lost\n");
+ return False;
}
- last= unbound= (unboundRtrn?*unboundRtrn:NULL);
- while ((last!=NULL) && (last->defs.next!=NULL)) {
- last= (LEDInfo *)last->defs.next;
+ last = unbound = (unboundRtrn ? *unboundRtrn : NULL);
+ while ((last != NULL) && (last->defs.next != NULL))
+ {
+ last = (LEDInfo *) last->defs.next;
}
- for (led=leds;led!=NULL;led=next) {
- next= (LEDInfo *)led->defs.next;
- if ((led->groups!=0)&&(led->which_groups==0))
- led->which_groups= XkbIM_UseEffective;
- if ((led->which_mods==0)&&((led->real_mods)||(led->vmods)))
- led->which_mods= XkbIM_UseEffective;
- if ((led->indicator==_LED_NotBound)||(!xkb->indicators)) {
- if (unboundRtrn!=NULL) {
- led->defs.next= NULL;
- if (last!=NULL) last->defs.next= (CommonInfo *)led;
- else unbound= led;
- last= led;
- }
- else uFree(led);
- }
- else {
- register XkbIndicatorMapPtr im;
- im= &xkb->indicators->maps[led->indicator-1];
- im->flags= led->flags;
- im->which_groups= led->which_groups;
- im->groups= led->groups;
- im->which_mods= led->which_mods;
- im->mods.mask= led->real_mods;
- im->mods.real_mods= led->real_mods;
- im->mods.vmods= led->vmods;
- im->ctrls= led->ctrls;
- if (xkb->names!=NULL)
- xkb->names->indicators[led->indicator-1]= led->name;
- uFree(led);
- }
+ for (led = leds; led != NULL; led = next)
+ {
+ next = (LEDInfo *) led->defs.next;
+ if ((led->groups != 0) && (led->which_groups == 0))
+ led->which_groups = XkbIM_UseEffective;
+ if ((led->which_mods == 0) && ((led->real_mods) || (led->vmods)))
+ led->which_mods = XkbIM_UseEffective;
+ if ((led->indicator == _LED_NotBound) || (!xkb->indicators))
+ {
+ if (unboundRtrn != NULL)
+ {
+ led->defs.next = NULL;
+ if (last != NULL)
+ last->defs.next = (CommonInfo *) led;
+ else
+ unbound = led;
+ last = led;
+ }
+ else
+ uFree(led);
+ }
+ else
+ {
+ register XkbIndicatorMapPtr im;
+ im = &xkb->indicators->maps[led->indicator - 1];
+ im->flags = led->flags;
+ im->which_groups = led->which_groups;
+ im->groups = led->groups;
+ im->which_mods = led->which_mods;
+ im->mods.mask = led->real_mods;
+ im->mods.real_mods = led->real_mods;
+ im->mods.vmods = led->vmods;
+ im->ctrls = led->ctrls;
+ if (xkb->names != NULL)
+ xkb->names->indicators[led->indicator - 1] = led->name;
+ uFree(led);
+ }
}
- if (unboundRtrn!=NULL) {
- *unboundRtrn= unbound;
+ if (unboundRtrn != NULL)
+ {
+ *unboundRtrn = unbound;
}
return True;
}
Bool
-BindIndicators( XkbFileInfo * result,
- Bool force,
- LEDInfo * unbound,
- LEDInfo ** unboundRtrn)
+BindIndicators(XkbFileInfo * result,
+ Bool force, LEDInfo * unbound, LEDInfo ** unboundRtrn)
{
-XkbDescPtr xkb;
-register int i;
-register LEDInfo *led,*next,*last;
+ XkbDescPtr xkb;
+ register int i;
+ register LEDInfo *led, *next, *last;
- xkb= result->xkb;
- if (xkb->names!=NULL) {
- for (led=unbound;led!=NULL;led= (LEDInfo *)led->defs.next) {
- if (led->indicator==_LED_NotBound) {
- for (i=0;i<XkbNumIndicators;i++) {
- if (xkb->names->indicators[i]==led->name) {
- led->indicator= i+1;
- break;
- }
- }
- }
- }
- if (force) {
- for (led=unbound;led!=NULL;led= (LEDInfo *)led->defs.next) {
- if (led->indicator==_LED_NotBound) {
- for (i=0;i<XkbNumIndicators;i++) {
- if (xkb->names->indicators[i]==None) {
- xkb->names->indicators[i]= led->name;
- led->indicator= i+1;
- xkb->indicators->phys_indicators&= ~(1<<i);
- break;
- }
- }
- if (led->indicator==_LED_NotBound) {
- ERROR("No unnamed indicators found\n");
- ACTION1("Virtual indicator map \"%s\" not bound\n",
- XkbAtomGetString(xkb->dpy,led->name));
- continue;
- }
- }
- }
- }
+ xkb = result->xkb;
+ if (xkb->names != NULL)
+ {
+ for (led = unbound; led != NULL; led = (LEDInfo *) led->defs.next)
+ {
+ if (led->indicator == _LED_NotBound)
+ {
+ for (i = 0; i < XkbNumIndicators; i++)
+ {
+ if (xkb->names->indicators[i] == led->name)
+ {
+ led->indicator = i + 1;
+ break;
+ }
+ }
+ }
+ }
+ if (force)
+ {
+ for (led = unbound; led != NULL; led = (LEDInfo *) led->defs.next)
+ {
+ if (led->indicator == _LED_NotBound)
+ {
+ for (i = 0; i < XkbNumIndicators; i++)
+ {
+ if (xkb->names->indicators[i] == None)
+ {
+ xkb->names->indicators[i] = led->name;
+ led->indicator = i + 1;
+ xkb->indicators->phys_indicators &= ~(1 << i);
+ break;
+ }
+ }
+ if (led->indicator == _LED_NotBound)
+ {
+ ERROR("No unnamed indicators found\n");
+ ACTION1
+ ("Virtual indicator map \"%s\" not bound\n",
+ XkbAtomGetString(xkb->dpy, led->name));
+ continue;
+ }
+ }
+ }
+ }
}
- for (last=NULL,led=unbound;led!=NULL;led= next) {
- next= (LEDInfo *)led->defs.next;
- if (led->indicator==_LED_NotBound) {
- if (force) {
- unbound= next;
- uFree(led);
- }
- else {
- if (last)
- last->defs.next= &led->defs;
- else unbound= led;
- last= led;
- }
- }
- else {
- if ((xkb->names!=NULL)&&
- (xkb->names->indicators[led->indicator-1]!=led->name)) {
- Atom old= xkb->names->indicators[led->indicator-1];
- ERROR1("Multiple names bound to indicator %d\n",(unsigned int)led->indicator);
- ACTION2("Using %s, ignoring %s\n",
- XkbAtomGetString(xkb->dpy,old),
- XkbAtomGetString(xkb->dpy,led->name));
- led->indicator= _LED_NotBound;
- if (force) {
- uFree(led);
- unbound= next;
- }
- else {
- if (last)
- last->defs.next= &led->defs;
- else unbound= led;
- last= led;
- }
- }
- else {
- XkbIndicatorMapPtr map;
- map= &xkb->indicators->maps[led->indicator-1];
- map->flags= led->flags;
- map->which_groups= led->which_groups;
- map->groups= led->groups;
- map->which_mods= led->which_mods;
- map->mods.mask= led->real_mods;
- map->mods.real_mods= led->real_mods;
- map->mods.vmods= led->vmods;
- map->ctrls= led->ctrls;
- if (last) last->defs.next= &next->defs;
- else unbound= next;
- led->defs.next= NULL;
- uFree(led);
- }
- }
+ for (last = NULL, led = unbound; led != NULL; led = next)
+ {
+ next = (LEDInfo *) led->defs.next;
+ if (led->indicator == _LED_NotBound)
+ {
+ if (force)
+ {
+ unbound = next;
+ uFree(led);
+ }
+ else
+ {
+ if (last)
+ last->defs.next = &led->defs;
+ else
+ unbound = led;
+ last = led;
+ }
+ }
+ else
+ {
+ if ((xkb->names != NULL) &&
+ (xkb->names->indicators[led->indicator - 1] != led->name))
+ {
+ Atom old = xkb->names->indicators[led->indicator - 1];
+ ERROR1("Multiple names bound to indicator %d\n",
+ (unsigned int) led->indicator);
+ ACTION2("Using %s, ignoring %s\n",
+ XkbAtomGetString(xkb->dpy, old),
+ XkbAtomGetString(xkb->dpy, led->name));
+ led->indicator = _LED_NotBound;
+ if (force)
+ {
+ uFree(led);
+ unbound = next;
+ }
+ else
+ {
+ if (last)
+ last->defs.next = &led->defs;
+ else
+ unbound = led;
+ last = led;
+ }
+ }
+ else
+ {
+ XkbIndicatorMapPtr map;
+ map = &xkb->indicators->maps[led->indicator - 1];
+ map->flags = led->flags;
+ map->which_groups = led->which_groups;
+ map->groups = led->groups;
+ map->which_mods = led->which_mods;
+ map->mods.mask = led->real_mods;
+ map->mods.real_mods = led->real_mods;
+ map->mods.vmods = led->vmods;
+ map->ctrls = led->ctrls;
+ if (last)
+ last->defs.next = &next->defs;
+ else
+ unbound = next;
+ led->defs.next = NULL;
+ uFree(led);
+ }
+ }
}
- if (unboundRtrn) {
- *unboundRtrn= unbound;
+ if (unboundRtrn)
+ {
+ *unboundRtrn = unbound;
}
- else if (unbound) {
- for (led=unbound;led!=NULL;led=next) {
- next= (LEDInfo *)led->defs.next;
- uFree(led);
- }
+ else if (unbound)
+ {
+ for (led = unbound; led != NULL; led = next)
+ {
+ next = (LEDInfo *) led->defs.next;
+ uFree(led);
+ }
}
return True;
}
diff --git a/indicators.h b/indicators.h
index 56d2f8c..35ae38a 100644
--- a/indicators.h
+++ b/indicators.h
@@ -37,57 +37,52 @@
#define _LED_NotBound 255
-typedef struct _LEDInfo {
- CommonInfo defs;
- Atom name;
- unsigned char indicator;
- unsigned char flags;
- unsigned char which_mods;
- unsigned char real_mods;
- unsigned short vmods;
- unsigned char which_groups;
- unsigned char groups;
- unsigned int ctrls;
+typedef struct _LEDInfo
+{
+ CommonInfo defs;
+ Atom name;
+ unsigned char indicator;
+ unsigned char flags;
+ unsigned char which_mods;
+ unsigned char real_mods;
+ unsigned short vmods;
+ unsigned char which_groups;
+ unsigned char groups;
+ unsigned int ctrls;
} LEDInfo;
-extern void ClearIndicatorMapInfo(
- Display * /* dpy */,
- LEDInfo * /* info */
-);
+extern void ClearIndicatorMapInfo(Display * /* dpy */ ,
+ LEDInfo * /* info */
+ );
-extern LEDInfo *AddIndicatorMap(
- LEDInfo * /* oldLEDs */,
- LEDInfo * /* newLED */
-);
+extern LEDInfo *AddIndicatorMap(LEDInfo * /* oldLEDs */ ,
+ LEDInfo * /* newLED */
+ );
-extern int SetIndicatorMapField(
- LEDInfo * /* led */,
- XkbDescPtr /* xkb */,
- char * /* field */,
- ExprDef * /* arrayNdx */,
- ExprDef * /* value */
-);
+extern int SetIndicatorMapField(LEDInfo * /* led */ ,
+ XkbDescPtr /* xkb */ ,
+ char * /* field */ ,
+ ExprDef * /* arrayNdx */ ,
+ ExprDef * /* value */
+ );
-extern LEDInfo *HandleIndicatorMapDef(
- IndicatorMapDef * /* stmt */,
- XkbDescPtr /* xkb */,
- LEDInfo * /* dflt */,
- LEDInfo * /* oldLEDs */,
- unsigned /* mergeMode */
-);
+extern LEDInfo *HandleIndicatorMapDef(IndicatorMapDef * /* stmt */ ,
+ XkbDescPtr /* xkb */ ,
+ LEDInfo * /* dflt */ ,
+ LEDInfo * /* oldLEDs */ ,
+ unsigned /* mergeMode */
+ );
-extern Bool CopyIndicatorMapDefs(
- XkbFileInfo * /* result */,
- LEDInfo * /* leds */,
- LEDInfo ** /* unboundRtrn */
-);
+extern Bool CopyIndicatorMapDefs(XkbFileInfo * /* result */ ,
+ LEDInfo * /* leds */ ,
+ LEDInfo ** /* unboundRtrn */
+ );
-extern Bool BindIndicators(
- XkbFileInfo * /* result */,
- Bool /* force */,
- LEDInfo * /* unbound */,
- LEDInfo ** /* unboundRtrn */
-);
+extern Bool BindIndicators(XkbFileInfo * /* result */ ,
+ Bool /* force */ ,
+ LEDInfo * /* unbound */ ,
+ LEDInfo ** /* unboundRtrn */
+ );
#endif /* INDICATORS_H */
diff --git a/keycodes.c b/keycodes.c
index e147b5e..1fe5e87 100644
--- a/keycodes.c
+++ b/keycodes.c
@@ -32,715 +32,821 @@
#include "alias.h"
char *
-longText(unsigned long val,unsigned format)
+longText(unsigned long val, unsigned format)
{
-char buf[4];
+ char buf[4];
- LongToKeyName(val,buf);
- return XkbKeyNameText(buf,format);
+ LongToKeyName(val, buf);
+ return XkbKeyNameText(buf, format);
}
/***====================================================================***/
void
-LongToKeyName(unsigned long val,char *name)
+LongToKeyName(unsigned long val, char *name)
{
- name[0]= ((val>>24)&0xff);
- name[1]= ((val>>16)&0xff);
- name[2]= ((val>>8)&0xff);
- name[3]= (val&0xff);
+ name[0] = ((val >> 24) & 0xff);
+ name[1] = ((val >> 16) & 0xff);
+ name[2] = ((val >> 8) & 0xff);
+ name[3] = (val & 0xff);
return;
}
/***====================================================================***/
-typedef struct _IndicatorNameInfo {
- CommonInfo defs;
- int ndx;
- Atom name;
- Bool virtual;
+typedef struct _IndicatorNameInfo
+{
+ CommonInfo defs;
+ int ndx;
+ Atom name;
+ Bool virtual;
} IndicatorNameInfo;
-typedef struct _KeyNamesInfo {
- char * name;
- int errorCount;
- unsigned fileID;
- unsigned merge;
- int computedMin;
- int computedMax;
- int explicitMin;
- int explicitMax;
- int effectiveMin;
- int effectiveMax;
- unsigned long names[XkbMaxLegalKeyCode+1];
- unsigned files[XkbMaxLegalKeyCode+1];
- unsigned char has_alt_forms[XkbMaxLegalKeyCode+1];
- IndicatorNameInfo * leds;
- AliasInfo * aliases;
+typedef struct _KeyNamesInfo
+{
+ char *name;
+ int errorCount;
+ unsigned fileID;
+ unsigned merge;
+ int computedMin;
+ int computedMax;
+ int explicitMin;
+ int explicitMax;
+ int effectiveMin;
+ int effectiveMax;
+ unsigned long names[XkbMaxLegalKeyCode + 1];
+ unsigned files[XkbMaxLegalKeyCode + 1];
+ unsigned char has_alt_forms[XkbMaxLegalKeyCode + 1];
+ IndicatorNameInfo *leds;
+ AliasInfo *aliases;
} KeyNamesInfo;
static void
-InitIndicatorNameInfo(IndicatorNameInfo *ii,KeyNamesInfo *info)
+InitIndicatorNameInfo(IndicatorNameInfo * ii, KeyNamesInfo * info)
{
- ii->defs.defined= 0;
- ii->defs.merge= info->merge;
- ii->defs.fileID= info->fileID;
- ii->defs.next= NULL;
- ii->ndx= 0;
- ii->name= None;
- ii->virtual= False;
+ ii->defs.defined = 0;
+ ii->defs.merge = info->merge;
+ ii->defs.fileID = info->fileID;
+ ii->defs.next = NULL;
+ ii->ndx = 0;
+ ii->name = None;
+ ii->virtual = False;
return;
}
-static void
-ClearIndicatorNameInfo(IndicatorNameInfo *ii,KeyNamesInfo *info)
+static void
+ClearIndicatorNameInfo(IndicatorNameInfo * ii, KeyNamesInfo * info)
{
- if (ii==info->leds) {
- ClearCommonInfo(&ii->defs);
- info->leds= NULL;
+ if (ii == info->leds)
+ {
+ ClearCommonInfo(&ii->defs);
+ info->leds = NULL;
}
return;
}
static IndicatorNameInfo *
-NextIndicatorName(KeyNamesInfo *info)
+NextIndicatorName(KeyNamesInfo * info)
{
-IndicatorNameInfo * ii;
+ IndicatorNameInfo *ii;
- ii= uTypedAlloc(IndicatorNameInfo);
- if (ii) {
- InitIndicatorNameInfo(ii,info);
- info->leds= (IndicatorNameInfo *)AddCommonInfo(&info->leds->defs,
- (CommonInfo *)ii);
+ ii = uTypedAlloc(IndicatorNameInfo);
+ if (ii)
+ {
+ InitIndicatorNameInfo(ii, info);
+ info->leds = (IndicatorNameInfo *) AddCommonInfo(&info->leds->defs,
+ (CommonInfo *) ii);
}
return ii;
}
static IndicatorNameInfo *
-FindIndicatorByIndex(KeyNamesInfo *info,int ndx)
+FindIndicatorByIndex(KeyNamesInfo * info, int ndx)
{
-IndicatorNameInfo * old;
+ IndicatorNameInfo *old;
- for (old= info->leds;old!=NULL;old=(IndicatorNameInfo *)old->defs.next) {
- if (old->ndx==ndx)
- return old;
+ for (old = info->leds; old != NULL;
+ old = (IndicatorNameInfo *) old->defs.next)
+ {
+ if (old->ndx == ndx)
+ return old;
}
return NULL;
}
static IndicatorNameInfo *
-FindIndicatorByName(KeyNamesInfo *info,Atom name)
+FindIndicatorByName(KeyNamesInfo * info, Atom name)
{
-IndicatorNameInfo * old;
+ IndicatorNameInfo *old;
- for (old= info->leds;old!=NULL;old=(IndicatorNameInfo *)old->defs.next) {
- if (old->name==name)
- return old;
+ for (old = info->leds; old != NULL;
+ old = (IndicatorNameInfo *) old->defs.next)
+ {
+ if (old->name == name)
+ return old;
}
return NULL;
}
static Bool
-AddIndicatorName(KeyNamesInfo *info,IndicatorNameInfo *new)
+AddIndicatorName(KeyNamesInfo * info, IndicatorNameInfo * new)
{
-IndicatorNameInfo *old;
-Bool replace;
-const char *action;
-
- replace= (new->defs.merge==MergeReplace)||
- (new->defs.merge==MergeOverride);
- old= FindIndicatorByName(info,new->name);
- if (old) {
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple indicators named %s\n",
- XkbAtomText(NULL,new->name,XkbMessage));
- if (old->ndx==new->ndx) {
- if (old->virtual!=new->virtual) {
- if (replace)
- old->virtual= new->virtual;
- action= "Using %s instead of %s\n";
- }
- else {
- action= "Identical definitions ignored\n";
- }
- ACTION2(action,(old->virtual?"virtual":"real"),
- (old->virtual?"real":"virtual"));
- return True;
- }
- else {
- if (replace) action= "Ignoring %d, using %d\n";
- else action= "Using %d, ignoring %d\n";
- ACTION2(action,old->ndx,new->ndx);
- }
- if (replace) {
- if (info->leds==old)
- info->leds= (IndicatorNameInfo *)old->defs.next;
- else {
- IndicatorNameInfo *tmp;
- tmp= info->leds;
- for (;tmp!=NULL;tmp=(IndicatorNameInfo *)tmp->defs.next) {
- if (tmp->defs.next==(CommonInfo *)old) {
- tmp->defs.next= old->defs.next;
- break;
- }
- }
- }
- uFree(old);
- }
- }
- }
- old= FindIndicatorByIndex(info,new->ndx);
- if (old) {
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple names for indicator %d\n",new->ndx);
- if ((old->name==new->name)&&(old->virtual==new->virtual))
- action= "Identical definitions ignored\n";
- else {
- const char *oldType,*newType;
- Atom using,ignoring;
- if (old->virtual) oldType= "virtual indicator";
- else oldType= "real indicator";
- if (new->virtual) newType= "virtual indicator";
- else newType= "real indicator";
- if (replace) {
- using= new->name;
- ignoring= old->name;
- }
- else {
- using= old->name;
- ignoring= new->name;
- }
- ACTION4("Using %s %s, ignoring %s %s\n",
- oldType,XkbAtomText(NULL,using,XkbMessage),
- newType,XkbAtomText(NULL,ignoring,XkbMessage));
- }
- }
- if (replace) {
- old->name= new->name;
- old->virtual= new->virtual;
- }
- return True;
- }
- old= new;
- new= NextIndicatorName(info);
- if (!new) {
- WSGO1("Couldn't allocate name for indicator %d\n",new->ndx);
- ACTION("Ignored\n");
- return False;
- }
- new->name= old->name;
- new->ndx= old->ndx;
- new->virtual= old->virtual;
+ IndicatorNameInfo *old;
+ Bool replace;
+ const char *action;
+
+ replace = (new->defs.merge == MergeReplace) ||
+ (new->defs.merge == MergeOverride);
+ old = FindIndicatorByName(info, new->name);
+ if (old)
+ {
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple indicators named %s\n",
+ XkbAtomText(NULL, new->name, XkbMessage));
+ if (old->ndx == new->ndx)
+ {
+ if (old->virtual != new->virtual)
+ {
+ if (replace)
+ old->virtual = new->virtual;
+ action = "Using %s instead of %s\n";
+ }
+ else
+ {
+ action = "Identical definitions ignored\n";
+ }
+ ACTION2(action, (old->virtual ? "virtual" : "real"),
+ (old->virtual ? "real" : "virtual"));
+ return True;
+ }
+ else
+ {
+ if (replace)
+ action = "Ignoring %d, using %d\n";
+ else
+ action = "Using %d, ignoring %d\n";
+ ACTION2(action, old->ndx, new->ndx);
+ }
+ if (replace)
+ {
+ if (info->leds == old)
+ info->leds = (IndicatorNameInfo *) old->defs.next;
+ else
+ {
+ IndicatorNameInfo *tmp;
+ tmp = info->leds;
+ for (; tmp != NULL;
+ tmp = (IndicatorNameInfo *) tmp->defs.next)
+ {
+ if (tmp->defs.next == (CommonInfo *) old)
+ {
+ tmp->defs.next = old->defs.next;
+ break;
+ }
+ }
+ }
+ uFree(old);
+ }
+ }
+ }
+ old = FindIndicatorByIndex(info, new->ndx);
+ if (old)
+ {
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple names for indicator %d\n", new->ndx);
+ if ((old->name == new->name) && (old->virtual == new->virtual))
+ action = "Identical definitions ignored\n";
+ else
+ {
+ const char *oldType, *newType;
+ Atom using, ignoring;
+ if (old->virtual)
+ oldType = "virtual indicator";
+ else
+ oldType = "real indicator";
+ if (new->virtual)
+ newType = "virtual indicator";
+ else
+ newType = "real indicator";
+ if (replace)
+ {
+ using = new->name;
+ ignoring = old->name;
+ }
+ else
+ {
+ using = old->name;
+ ignoring = new->name;
+ }
+ ACTION4("Using %s %s, ignoring %s %s\n",
+ oldType, XkbAtomText(NULL, using, XkbMessage),
+ newType, XkbAtomText(NULL, ignoring, XkbMessage));
+ }
+ }
+ if (replace)
+ {
+ old->name = new->name;
+ old->virtual = new->virtual;
+ }
+ return True;
+ }
+ old = new;
+ new = NextIndicatorName(info);
+ if (!new)
+ {
+ WSGO1("Couldn't allocate name for indicator %d\n", new->ndx);
+ ACTION("Ignored\n");
+ return False;
+ }
+ new->name = old->name;
+ new->ndx = old->ndx;
+ new->virtual = old->virtual;
return True;
}
static void
-ClearKeyNamesInfo(KeyNamesInfo *info)
+ClearKeyNamesInfo(KeyNamesInfo * info)
{
- if (info->name!=NULL)
- uFree(info->name);
- info->name= NULL;
- info->computedMax= info->explicitMax= info->explicitMin= -1;
- info->computedMin= 256;
- info->effectiveMin= 8;
- info->effectiveMax= 255;
- bzero((char *)info->names,sizeof(info->names));
- bzero((char *)info->files,sizeof(info->files));
- bzero((char *)info->has_alt_forms,sizeof(info->has_alt_forms));
+ if (info->name != NULL)
+ uFree(info->name);
+ info->name = NULL;
+ info->computedMax = info->explicitMax = info->explicitMin = -1;
+ info->computedMin = 256;
+ info->effectiveMin = 8;
+ info->effectiveMax = 255;
+ bzero((char *) info->names, sizeof(info->names));
+ bzero((char *) info->files, sizeof(info->files));
+ bzero((char *) info->has_alt_forms, sizeof(info->has_alt_forms));
if (info->leds)
- ClearIndicatorNameInfo(info->leds,info);
+ ClearIndicatorNameInfo(info->leds, info);
if (info->aliases)
- ClearAliases(&info->aliases);
+ ClearAliases(&info->aliases);
return;
}
static void
-InitKeyNamesInfo(KeyNamesInfo *info)
+InitKeyNamesInfo(KeyNamesInfo * info)
{
- info->name= NULL;
- info->leds= NULL;
- info->aliases= NULL;
+ info->name = NULL;
+ info->leds = NULL;
+ info->aliases = NULL;
ClearKeyNamesInfo(info);
- info->errorCount= 0;
+ info->errorCount = 0;
return;
}
static int
-FindKeyByLong(KeyNamesInfo *info,unsigned long name)
+FindKeyByLong(KeyNamesInfo * info, unsigned long name)
{
-register int i;
+ register int i;
- for (i=info->effectiveMin;i<=info->effectiveMax;i++) {
- if (info->names[i]==name)
- return i;
+ for (i = info->effectiveMin; i <= info->effectiveMax; i++)
+ {
+ if (info->names[i] == name)
+ return i;
}
return 0;
}
static Bool
-AddKeyName( KeyNamesInfo * info,
- int kc,
- char * name,
- unsigned merge,
- unsigned fileID,
- Bool reportCollisions)
+AddKeyName(KeyNamesInfo * info,
+ int kc,
+ char *name, unsigned merge, unsigned fileID, Bool reportCollisions)
{
-int old;
-unsigned long lval;
-
- if ((kc<info->effectiveMin)||(kc>info->effectiveMax)) {
- ERROR2("Illegal keycode %d for name <%s>\n",kc,name);
- ACTION2("Must be in the range %d-%d inclusive\n",info->effectiveMin,
- info->effectiveMax);
- return False;
- }
- if (kc<info->computedMin) info->computedMin= kc;
- if (kc>info->computedMax) info->computedMax= kc;
- lval= KeyNameToLong(name);
-
- if (reportCollisions) {
- reportCollisions= ((warningLevel>7)||
- ((warningLevel>0)&&(fileID==info->files[kc])));
- }
-
- if (info->names[kc]!=0) {
- char buf[6];
-
- LongToKeyName(info->names[kc],buf);
- buf[4]= '\0';
- if (info->names[kc]==lval) {
- if (info->has_alt_forms[kc] || (merge==MergeAltForm)) {
- info->has_alt_forms[kc]= True;
- }
- else if (reportCollisions) {
- WARN("Multiple identical key name definitions\n");
- ACTION2("Later occurences of \"<%s> = %d\" ignored\n",buf,kc);
- }
- return True;
- }
- if (merge==MergeAugment) {
- if (reportCollisions) {
- WARN1("Multiple names for keycode %d\n",kc);
- ACTION2("Using <%s>, ignoring <%s>\n",buf,name);
- }
- return True;
- }
- else {
- if (reportCollisions) {
- WARN1("Multiple names for keycode %d\n",kc);
- ACTION2("Using <%s>, ignoring <%s>\n",name,buf);
- }
- info->names[kc]= 0;
- info->files[kc]= 0;
- }
- }
- old= FindKeyByLong(info,lval);
- if ((old!=0)&&(old!=kc)) {
- if (merge==MergeOverride) {
- info->names[old]= 0;
- info->files[old]= 0;
- info->has_alt_forms[old]= True;
- if (reportCollisions) {
- WARN1("Key name <%s> assigned to multiple keys\n",name);
- ACTION2("Using %d, ignoring %d\n",kc,old);
- }
- }
- else if (merge!=MergeAltForm) {
- if ((reportCollisions)&&(warningLevel>3)) {
- WARN1("Key name <%s> assigned to multiple keys\n",name);
- ACTION2("Using %d, ignoring %d\n",old,kc);
- ACTION("Use 'alternate' keyword to assign the same name to multiple keys\n");
- }
- return True;
- }
- else {
- info->has_alt_forms[old]= True;
- }
- }
- info->names[kc]= lval;
- info->files[kc]= fileID;
- info->has_alt_forms[kc]= (merge==MergeAltForm);
+ int old;
+ unsigned long lval;
+
+ if ((kc < info->effectiveMin) || (kc > info->effectiveMax))
+ {
+ ERROR2("Illegal keycode %d for name <%s>\n", kc, name);
+ ACTION2("Must be in the range %d-%d inclusive\n",
+ info->effectiveMin, info->effectiveMax);
+ return False;
+ }
+ if (kc < info->computedMin)
+ info->computedMin = kc;
+ if (kc > info->computedMax)
+ info->computedMax = kc;
+ lval = KeyNameToLong(name);
+
+ if (reportCollisions)
+ {
+ reportCollisions = ((warningLevel > 7) ||
+ ((warningLevel > 0)
+ && (fileID == info->files[kc])));
+ }
+
+ if (info->names[kc] != 0)
+ {
+ char buf[6];
+
+ LongToKeyName(info->names[kc], buf);
+ buf[4] = '\0';
+ if (info->names[kc] == lval)
+ {
+ if (info->has_alt_forms[kc] || (merge == MergeAltForm))
+ {
+ info->has_alt_forms[kc] = True;
+ }
+ else if (reportCollisions)
+ {
+ WARN("Multiple identical key name definitions\n");
+ ACTION2("Later occurences of \"<%s> = %d\" ignored\n",
+ buf, kc);
+ }
+ return True;
+ }
+ if (merge == MergeAugment)
+ {
+ if (reportCollisions)
+ {
+ WARN1("Multiple names for keycode %d\n", kc);
+ ACTION2("Using <%s>, ignoring <%s>\n", buf, name);
+ }
+ return True;
+ }
+ else
+ {
+ if (reportCollisions)
+ {
+ WARN1("Multiple names for keycode %d\n", kc);
+ ACTION2("Using <%s>, ignoring <%s>\n", name, buf);
+ }
+ info->names[kc] = 0;
+ info->files[kc] = 0;
+ }
+ }
+ old = FindKeyByLong(info, lval);
+ if ((old != 0) && (old != kc))
+ {
+ if (merge == MergeOverride)
+ {
+ info->names[old] = 0;
+ info->files[old] = 0;
+ info->has_alt_forms[old] = True;
+ if (reportCollisions)
+ {
+ WARN1("Key name <%s> assigned to multiple keys\n", name);
+ ACTION2("Using %d, ignoring %d\n", kc, old);
+ }
+ }
+ else if (merge != MergeAltForm)
+ {
+ if ((reportCollisions) && (warningLevel > 3))
+ {
+ WARN1("Key name <%s> assigned to multiple keys\n", name);
+ ACTION2("Using %d, ignoring %d\n", old, kc);
+ ACTION
+ ("Use 'alternate' keyword to assign the same name to multiple keys\n");
+ }
+ return True;
+ }
+ else
+ {
+ info->has_alt_forms[old] = True;
+ }
+ }
+ info->names[kc] = lval;
+ info->files[kc] = fileID;
+ info->has_alt_forms[kc] = (merge == MergeAltForm);
return True;
}
/***====================================================================***/
static void
-MergeIncludedKeycodes(KeyNamesInfo *into,KeyNamesInfo *from,unsigned merge)
+MergeIncludedKeycodes(KeyNamesInfo * into, KeyNamesInfo * from,
+ unsigned merge)
{
-register int i;
-char buf[5];
-
- if (from->errorCount>0) {
- into->errorCount+= from->errorCount;
- return;
- }
- if (into->name==NULL) {
- into->name= from->name;
- from->name= NULL;
- }
- for (i=from->computedMin;i<=from->computedMax;i++) {
- unsigned thisMerge;
- if (from->names[i]==0)
- continue;
- LongToKeyName(from->names[i],buf);
- buf[4]= '\0';
- if (from->has_alt_forms[i])
- thisMerge= MergeAltForm;
- else thisMerge= merge;
- if (!AddKeyName(into,i,buf,thisMerge,from->fileID,False))
- into->errorCount++;
- }
- if (from->leds) {
- IndicatorNameInfo *led,*next;
- for (led=from->leds;led!=NULL;led=next) {
- if (merge!=MergeDefault)
- led->defs.merge= merge;
- if (!AddIndicatorName(into,led))
- into->errorCount++;
- next= (IndicatorNameInfo *)led->defs.next;
- }
- }
- if (!MergeAliases(&into->aliases,&from->aliases,merge))
- into->errorCount++;
- if (from->explicitMin>0) {
- if ((into->explicitMin<0)||(into->explicitMin>from->explicitMin))
- into->effectiveMin= into->explicitMin= from->explicitMin;
- }
- if (from->explicitMax>0) {
- if ((into->explicitMax<0)||(into->explicitMax<from->explicitMax))
- into->effectiveMax= into->explicitMax= from->explicitMax;
+ register int i;
+ char buf[5];
+
+ if (from->errorCount > 0)
+ {
+ into->errorCount += from->errorCount;
+ return;
+ }
+ if (into->name == NULL)
+ {
+ into->name = from->name;
+ from->name = NULL;
+ }
+ for (i = from->computedMin; i <= from->computedMax; i++)
+ {
+ unsigned thisMerge;
+ if (from->names[i] == 0)
+ continue;
+ LongToKeyName(from->names[i], buf);
+ buf[4] = '\0';
+ if (from->has_alt_forms[i])
+ thisMerge = MergeAltForm;
+ else
+ thisMerge = merge;
+ if (!AddKeyName(into, i, buf, thisMerge, from->fileID, False))
+ into->errorCount++;
+ }
+ if (from->leds)
+ {
+ IndicatorNameInfo *led, *next;
+ for (led = from->leds; led != NULL; led = next)
+ {
+ if (merge != MergeDefault)
+ led->defs.merge = merge;
+ if (!AddIndicatorName(into, led))
+ into->errorCount++;
+ next = (IndicatorNameInfo *) led->defs.next;
+ }
+ }
+ if (!MergeAliases(&into->aliases, &from->aliases, merge))
+ into->errorCount++;
+ if (from->explicitMin > 0)
+ {
+ if ((into->explicitMin < 0)
+ || (into->explicitMin > from->explicitMin))
+ into->effectiveMin = into->explicitMin = from->explicitMin;
+ }
+ if (from->explicitMax > 0)
+ {
+ if ((into->explicitMax < 0)
+ || (into->explicitMax < from->explicitMax))
+ into->effectiveMax = into->explicitMax = from->explicitMax;
}
return;
}
-typedef void (*FileHandler)(
- XkbFile * /* rtrn */,
- XkbDescPtr /* xkb */,
- unsigned /* merge */,
- KeyNamesInfo * /* included */
-);
+typedef void (*FileHandler) (XkbFile * /* rtrn */ ,
+ XkbDescPtr /* xkb */ ,
+ unsigned /* merge */ ,
+ KeyNamesInfo * /* included */
+ );
static Bool
-HandleIncludeKeycodes( IncludeStmt * stmt,
- XkbDescPtr xkb,
- KeyNamesInfo * info,
- FileHandler hndlr)
+HandleIncludeKeycodes(IncludeStmt * stmt,
+ XkbDescPtr xkb, KeyNamesInfo * info, FileHandler hndlr)
{
-unsigned newMerge;
-XkbFile * rtrn;
-KeyNamesInfo included;
-Bool haveSelf;
-
- haveSelf= False;
- if ((stmt->file==NULL)&&(stmt->map==NULL)) {
- haveSelf= True;
- included= *info;
- bzero(info,sizeof(KeyNamesInfo));
- }
- else if (strcmp(stmt->file,"computed")==0) {
- xkb->flags|= AutoKeyNames;
- info->explicitMin= XkbMinLegalKeyCode;
- info->explicitMax= XkbMaxLegalKeyCode;
- return (info->errorCount==0);
- }
- else if (ProcessIncludeFile(stmt,XkmKeyNamesIndex,&rtrn,&newMerge)) {
- InitKeyNamesInfo(&included);
- (*hndlr)(rtrn,xkb,MergeOverride,&included);
- if (stmt->stmt!=NULL) {
- if (included.name!=NULL)
- uFree(included.name);
- included.name= stmt->stmt;
- stmt->stmt= NULL;
- }
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- if ((stmt->next!=NULL)&&(included.errorCount<1)) {
- IncludeStmt * next;
- unsigned op;
- KeyNamesInfo next_incl;
-
- for (next=stmt->next;next!=NULL;next=next->next) {
- if ((next->file==NULL)&&(next->map==NULL)) {
- haveSelf= True;
- MergeIncludedKeycodes(&included,info,next->merge);
- ClearKeyNamesInfo(info);
- }
- else if (ProcessIncludeFile(next,XkmKeyNamesIndex,&rtrn,&op)) {
- InitKeyNamesInfo(&next_incl);
- (*hndlr)(rtrn,xkb,MergeOverride,&next_incl);
- MergeIncludedKeycodes(&included,&next_incl,op);
- ClearKeyNamesInfo(&next_incl);
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- }
+ unsigned newMerge;
+ XkbFile *rtrn;
+ KeyNamesInfo included;
+ Bool haveSelf;
+
+ haveSelf = False;
+ if ((stmt->file == NULL) && (stmt->map == NULL))
+ {
+ haveSelf = True;
+ included = *info;
+ bzero(info, sizeof(KeyNamesInfo));
+ }
+ else if (strcmp(stmt->file, "computed") == 0)
+ {
+ xkb->flags |= AutoKeyNames;
+ info->explicitMin = XkbMinLegalKeyCode;
+ info->explicitMax = XkbMaxLegalKeyCode;
+ return (info->errorCount == 0);
+ }
+ else if (ProcessIncludeFile(stmt, XkmKeyNamesIndex, &rtrn, &newMerge))
+ {
+ InitKeyNamesInfo(&included);
+ (*hndlr) (rtrn, xkb, MergeOverride, &included);
+ if (stmt->stmt != NULL)
+ {
+ if (included.name != NULL)
+ uFree(included.name);
+ included.name = stmt->stmt;
+ stmt->stmt = NULL;
+ }
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ if ((stmt->next != NULL) && (included.errorCount < 1))
+ {
+ IncludeStmt *next;
+ unsigned op;
+ KeyNamesInfo next_incl;
+
+ for (next = stmt->next; next != NULL; next = next->next)
+ {
+ if ((next->file == NULL) && (next->map == NULL))
+ {
+ haveSelf = True;
+ MergeIncludedKeycodes(&included, info, next->merge);
+ ClearKeyNamesInfo(info);
+ }
+ else if (ProcessIncludeFile(next, XkmKeyNamesIndex, &rtrn, &op))
+ {
+ InitKeyNamesInfo(&next_incl);
+ (*hndlr) (rtrn, xkb, MergeOverride, &next_incl);
+ MergeIncludedKeycodes(&included, &next_incl, op);
+ ClearKeyNamesInfo(&next_incl);
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ }
}
if (haveSelf)
- *info= included;
- else {
- MergeIncludedKeycodes(info,&included,newMerge);
- ClearKeyNamesInfo(&included);
+ *info = included;
+ else
+ {
+ MergeIncludedKeycodes(info, &included, newMerge);
+ ClearKeyNamesInfo(&included);
}
- return (info->errorCount==0);
+ return (info->errorCount == 0);
}
static int
-HandleKeycodeDef( KeycodeDef * stmt,
- XkbDescPtr xkb,
- unsigned merge,
- KeyNamesInfo * info)
+HandleKeycodeDef(KeycodeDef * stmt,
+ XkbDescPtr xkb, unsigned merge, KeyNamesInfo * info)
{
-int code;
-ExprResult result;
-
- if (!ExprResolveInteger(stmt->value,&result,NULL,NULL)) {
- ACTION1("No value keycode assigned to name <%s>\n",stmt->name);
- return 0;
- }
- code= result.ival;
- if ((code<info->effectiveMin)||(code>info->effectiveMax)) {
- ERROR2("Illegal keycode %d for name <%s>\n",code,stmt->name);
- ACTION2("Must be in the range %d-%d inclusive\n",info->effectiveMin,
- info->effectiveMax);
- return 0;
- }
- if (stmt->merge!=MergeDefault) {
- if (stmt->merge==MergeReplace)
- merge= MergeOverride;
- else merge= stmt->merge;
- }
- return AddKeyName(info,code,stmt->name,merge,info->fileID,True);
+ int code;
+ ExprResult result;
+
+ if (!ExprResolveInteger(stmt->value, &result, NULL, NULL))
+ {
+ ACTION1("No value keycode assigned to name <%s>\n", stmt->name);
+ return 0;
+ }
+ code = result.ival;
+ if ((code < info->effectiveMin) || (code > info->effectiveMax))
+ {
+ ERROR2("Illegal keycode %d for name <%s>\n", code, stmt->name);
+ ACTION2("Must be in the range %d-%d inclusive\n",
+ info->effectiveMin, info->effectiveMax);
+ return 0;
+ }
+ if (stmt->merge != MergeDefault)
+ {
+ if (stmt->merge == MergeReplace)
+ merge = MergeOverride;
+ else
+ merge = stmt->merge;
+ }
+ return AddKeyName(info, code, stmt->name, merge, info->fileID, True);
}
#define MIN_KEYCODE_DEF 0
#define MAX_KEYCODE_DEF 1
static int
-HandleKeyNameVar(VarDef *stmt,XkbDescPtr xkb,unsigned merge,KeyNamesInfo *info)
+HandleKeyNameVar(VarDef * stmt, XkbDescPtr xkb, unsigned merge,
+ KeyNamesInfo * info)
{
-ExprResult tmp,field;
-ExprDef * arrayNdx;
-int which;
-
- if (ExprResolveLhs(stmt->name,&tmp,&field,&arrayNdx)==0)
- return 0; /* internal error, already reported */
-
- if (tmp.str!=NULL) {
- ERROR1("Unknown element %s encountered\n",tmp.str);
- ACTION1("Default for field %s ignored\n",field.str);
- return 0;
- }
- if (uStrCaseCmp(field.str,"minimum")==0) which= MIN_KEYCODE_DEF;
- else if (uStrCaseCmp(field.str,"maximum")==0) which= MAX_KEYCODE_DEF;
- else {
- ERROR("Unknown field encountered\n");
- ACTION1("Assigment to field %s ignored\n",field.str);
- return 0;
- }
- if (arrayNdx!=NULL) {
- ERROR1("The %s setting is not an array\n",field.str);
- ACTION("Illegal array reference ignored\n");
- return 0;
- }
-
- if (ExprResolveInteger(stmt->value,&tmp,NULL,NULL)==0) {
- ACTION1("Assignment to field %s ignored\n",field.str);
- return 0;
- }
- if ((tmp.ival<XkbMinLegalKeyCode)||(tmp.ival>XkbMaxLegalKeyCode)) {
- ERROR3("Illegal keycode %d (must be in the range %d-%d inclusive)\n",
- tmp.ival,XkbMinLegalKeyCode,XkbMaxLegalKeyCode);
- ACTION1("Value of \"%s\" not changed\n",field.str);
- return 0;
- }
- if (which==MIN_KEYCODE_DEF) {
- if ((info->explicitMax>0)&&(info->explicitMax<tmp.ival)) {
- ERROR2("Minimum key code (%d) must be <= maximum key code (%d)\n",
- tmp.ival,info->explicitMax);
- ACTION("Minimum key code value not changed\n");
- return 0;
- }
- if ((info->computedMax>0)&&(info->computedMin<tmp.ival)) {
- ERROR2("Minimum key code (%d) must be <= lowest defined key (%d)\n",
- tmp.ival,info->computedMin);
- ACTION("Minimum key code value not changed\n");
- return 0;
- }
- info->explicitMin= tmp.ival;
- info->effectiveMin= tmp.ival;
- }
- if (which==MAX_KEYCODE_DEF) {
- if ((info->explicitMin>0)&&(info->explicitMin>tmp.ival)) {
- ERROR2("Maximum code (%d) must be >= minimum key code (%d)\n",
- tmp.ival,info->explicitMin);
- ACTION("Maximum code value not changed\n");
- return 0;
- }
- if ((info->computedMax>0)&&(info->computedMax>tmp.ival)) {
- ERROR2("Maximum code (%d) must be >= highest defined key (%d)\n",
- tmp.ival,info->computedMax);
- ACTION("Maximum code value not changed\n");
- return 0;
- }
- info->explicitMax= tmp.ival;
- info->effectiveMax= tmp.ival;
+ ExprResult tmp, field;
+ ExprDef *arrayNdx;
+ int which;
+
+ if (ExprResolveLhs(stmt->name, &tmp, &field, &arrayNdx) == 0)
+ return 0; /* internal error, already reported */
+
+ if (tmp.str != NULL)
+ {
+ ERROR1("Unknown element %s encountered\n", tmp.str);
+ ACTION1("Default for field %s ignored\n", field.str);
+ return 0;
+ }
+ if (uStrCaseCmp(field.str, "minimum") == 0)
+ which = MIN_KEYCODE_DEF;
+ else if (uStrCaseCmp(field.str, "maximum") == 0)
+ which = MAX_KEYCODE_DEF;
+ else
+ {
+ ERROR("Unknown field encountered\n");
+ ACTION1("Assigment to field %s ignored\n", field.str);
+ return 0;
+ }
+ if (arrayNdx != NULL)
+ {
+ ERROR1("The %s setting is not an array\n", field.str);
+ ACTION("Illegal array reference ignored\n");
+ return 0;
+ }
+
+ if (ExprResolveInteger(stmt->value, &tmp, NULL, NULL) == 0)
+ {
+ ACTION1("Assignment to field %s ignored\n", field.str);
+ return 0;
+ }
+ if ((tmp.ival < XkbMinLegalKeyCode) || (tmp.ival > XkbMaxLegalKeyCode))
+ {
+ ERROR3
+ ("Illegal keycode %d (must be in the range %d-%d inclusive)\n",
+ tmp.ival, XkbMinLegalKeyCode, XkbMaxLegalKeyCode);
+ ACTION1("Value of \"%s\" not changed\n", field.str);
+ return 0;
+ }
+ if (which == MIN_KEYCODE_DEF)
+ {
+ if ((info->explicitMax > 0) && (info->explicitMax < tmp.ival))
+ {
+ ERROR2
+ ("Minimum key code (%d) must be <= maximum key code (%d)\n",
+ tmp.ival, info->explicitMax);
+ ACTION("Minimum key code value not changed\n");
+ return 0;
+ }
+ if ((info->computedMax > 0) && (info->computedMin < tmp.ival))
+ {
+ ERROR2
+ ("Minimum key code (%d) must be <= lowest defined key (%d)\n",
+ tmp.ival, info->computedMin);
+ ACTION("Minimum key code value not changed\n");
+ return 0;
+ }
+ info->explicitMin = tmp.ival;
+ info->effectiveMin = tmp.ival;
+ }
+ if (which == MAX_KEYCODE_DEF)
+ {
+ if ((info->explicitMin > 0) && (info->explicitMin > tmp.ival))
+ {
+ ERROR2("Maximum code (%d) must be >= minimum key code (%d)\n",
+ tmp.ival, info->explicitMin);
+ ACTION("Maximum code value not changed\n");
+ return 0;
+ }
+ if ((info->computedMax > 0) && (info->computedMax > tmp.ival))
+ {
+ ERROR2
+ ("Maximum code (%d) must be >= highest defined key (%d)\n",
+ tmp.ival, info->computedMax);
+ ACTION("Maximum code value not changed\n");
+ return 0;
+ }
+ info->explicitMax = tmp.ival;
+ info->effectiveMax = tmp.ival;
}
return 1;
}
static int
-HandleIndicatorNameDef( IndicatorNameDef * def,
- XkbDescPtr xkb,
- unsigned merge,
- KeyNamesInfo * info)
+HandleIndicatorNameDef(IndicatorNameDef * def,
+ XkbDescPtr xkb, unsigned merge, KeyNamesInfo * info)
{
-IndicatorNameInfo ii;
-ExprResult tmp;
-
- if ((def->ndx<1)||(def->ndx>XkbNumIndicators)) {
- info->errorCount++;
- ERROR1("Name specified for illegal indicator index %d\n",def->ndx);
- ACTION("Ignored\n");
- return False;
- }
- InitIndicatorNameInfo(&ii,info);
- ii.ndx= def->ndx;
- if (!ExprResolveString(def->name,&tmp,NULL,NULL)) {
- char buf[20];
- sprintf(buf,"%d",def->ndx);
- info->errorCount++;
- return ReportBadType("indicator","name",buf,"string");
- }
- ii.name= XkbInternAtom(NULL,tmp.str,False);
- ii.virtual= def->virtual;
- if (!AddIndicatorName(info,&ii))
- return False;
+ IndicatorNameInfo ii;
+ ExprResult tmp;
+
+ if ((def->ndx < 1) || (def->ndx > XkbNumIndicators))
+ {
+ info->errorCount++;
+ ERROR1("Name specified for illegal indicator index %d\n", def->ndx);
+ ACTION("Ignored\n");
+ return False;
+ }
+ InitIndicatorNameInfo(&ii, info);
+ ii.ndx = def->ndx;
+ if (!ExprResolveString(def->name, &tmp, NULL, NULL))
+ {
+ char buf[20];
+ sprintf(buf, "%d", def->ndx);
+ info->errorCount++;
+ return ReportBadType("indicator", "name", buf, "string");
+ }
+ ii.name = XkbInternAtom(NULL, tmp.str, False);
+ ii.virtual = def->virtual;
+ if (!AddIndicatorName(info, &ii))
+ return False;
return True;
}
static void
-HandleKeycodesFile( XkbFile * file,
- XkbDescPtr xkb,
- unsigned merge,
- KeyNamesInfo * info)
+HandleKeycodesFile(XkbFile * file,
+ XkbDescPtr xkb, unsigned merge, KeyNamesInfo * info)
{
-ParseCommon *stmt;
-
- info->name= uStringDup(file->name);
- stmt= file->defs;
- while (stmt) {
- switch (stmt->stmtType) {
- case StmtInclude:
- if (!HandleIncludeKeycodes((IncludeStmt *)stmt,xkb,info,
- HandleKeycodesFile))
- info->errorCount++;
- break;
- case StmtKeycodeDef:
- if (!HandleKeycodeDef((KeycodeDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtKeyAliasDef:
- if (!HandleAliasDef((KeyAliasDef *)stmt,
- merge,info->fileID,&info->aliases))
- info->errorCount++;
- break;
- case StmtVarDef:
- if (!HandleKeyNameVar((VarDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtIndicatorNameDef:
- if (!HandleIndicatorNameDef((IndicatorNameDef *)stmt,xkb,
- merge,info)) {
- info->errorCount++;
- }
- break;
- case StmtInterpDef:
- case StmtVModDef:
- ERROR("Keycode files may define key and indicator names only\n");
- ACTION1("Ignoring definition of %s\n",
- ((stmt->stmtType==StmtInterpDef)?
- "a symbol interpretation":
- "virtual modifiers"));
- info->errorCount++;
- break;
- default:
- WSGO1("Unexpected statement type %d in HandleKeycodesFile\n",
- stmt->stmtType);
- break;
- }
- stmt= stmt->next;
- if (info->errorCount>10) {
+ ParseCommon *stmt;
+
+ info->name = uStringDup(file->name);
+ stmt = file->defs;
+ while (stmt)
+ {
+ switch (stmt->stmtType)
+ {
+ case StmtInclude:
+ if (!HandleIncludeKeycodes((IncludeStmt *) stmt, xkb, info,
+ HandleKeycodesFile))
+ info->errorCount++;
+ break;
+ case StmtKeycodeDef:
+ if (!HandleKeycodeDef((KeycodeDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtKeyAliasDef:
+ if (!HandleAliasDef((KeyAliasDef *) stmt,
+ merge, info->fileID, &info->aliases))
+ info->errorCount++;
+ break;
+ case StmtVarDef:
+ if (!HandleKeyNameVar((VarDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtIndicatorNameDef:
+ if (!HandleIndicatorNameDef((IndicatorNameDef *) stmt, xkb,
+ merge, info))
+ {
+ info->errorCount++;
+ }
+ break;
+ case StmtInterpDef:
+ case StmtVModDef:
+ ERROR("Keycode files may define key and indicator names only\n");
+ ACTION1("Ignoring definition of %s\n",
+ ((stmt->stmtType ==
+ StmtInterpDef) ? "a symbol interpretation" :
+ "virtual modifiers"));
+ info->errorCount++;
+ break;
+ default:
+ WSGO1("Unexpected statement type %d in HandleKeycodesFile\n",
+ stmt->stmtType);
+ break;
+ }
+ stmt = stmt->next;
+ if (info->errorCount > 10)
+ {
#ifdef NOISY
- ERROR("Too many errors\n");
+ ERROR("Too many errors\n");
#endif
- ACTION1("Abandoning keycodes file \"%s\"\n",file->topName);
- break;
- }
+ ACTION1("Abandoning keycodes file \"%s\"\n", file->topName);
+ break;
+ }
}
return;
}
Bool
-CompileKeycodes(XkbFile *file,XkbFileInfo *result,unsigned merge)
+CompileKeycodes(XkbFile * file, XkbFileInfo * result, unsigned merge)
{
-KeyNamesInfo info;
-XkbDescPtr xkb;
+ KeyNamesInfo info;
+ XkbDescPtr xkb;
- xkb= result->xkb;
+ xkb = result->xkb;
InitKeyNamesInfo(&info);
- HandleKeycodesFile(file,xkb,merge,&info);
-
- if (info.errorCount==0) {
- if (info.explicitMin>0)
- xkb->min_key_code= info.effectiveMin;
- else xkb->min_key_code= info.computedMin;
- if (info.explicitMax>0)
- xkb->max_key_code= info.effectiveMax;
- else xkb->max_key_code= info.computedMax;
- if (XkbAllocNames(xkb,XkbKeyNamesMask|XkbIndicatorNamesMask,0,0)==Success) {
- register int i;
- xkb->names->keycodes= XkbInternAtom(xkb->dpy,info.name,False);
- uDEBUG2(1,"key range: %d..%d\n",xkb->min_key_code,xkb->max_key_code);
- for (i=info.computedMin;i<=info.computedMax;i++) {
- LongToKeyName(info.names[i],xkb->names->keys[i].name);
- uDEBUG2(2,"key %d = %s\n",i,
- XkbKeyNameText(xkb->names->keys[i].name,XkbMessage));
- }
- }
- else {
- WSGO("Cannot create XkbNamesRec in CompileKeycodes\n");
- return False;
- }
- if (info.leds) {
- IndicatorNameInfo *ii;
- if (XkbAllocIndicatorMaps(xkb)!=Success) {
- WSGO("Couldn't allocate IndicatorRec in CompileKeycodes\n");
- ACTION("Physical indicators not set\n");
- }
- for (ii=info.leds;ii!=NULL;ii=(IndicatorNameInfo *)ii->defs.next){
- xkb->names->indicators[ii->ndx-1]=
- XkbInternAtom(xkb->dpy,
- XkbAtomGetString(NULL,ii->name),False);
- if (xkb->indicators!=NULL) {
- register unsigned bit;
- bit= 1<<(ii->ndx-1);
- if (ii->virtual)
- xkb->indicators->phys_indicators&= ~bit;
- else xkb->indicators->phys_indicators|= bit;
- }
- }
- }
- if (info.aliases)
- ApplyAliases(xkb,False,&info.aliases);
- return True;
+ HandleKeycodesFile(file, xkb, merge, &info);
+
+ if (info.errorCount == 0)
+ {
+ if (info.explicitMin > 0)
+ xkb->min_key_code = info.effectiveMin;
+ else
+ xkb->min_key_code = info.computedMin;
+ if (info.explicitMax > 0)
+ xkb->max_key_code = info.effectiveMax;
+ else
+ xkb->max_key_code = info.computedMax;
+ if (XkbAllocNames(xkb, XkbKeyNamesMask | XkbIndicatorNamesMask, 0, 0)
+ == Success)
+ {
+ register int i;
+ xkb->names->keycodes = XkbInternAtom(xkb->dpy, info.name, False);
+ uDEBUG2(1, "key range: %d..%d\n", xkb->min_key_code,
+ xkb->max_key_code);
+ for (i = info.computedMin; i <= info.computedMax; i++)
+ {
+ LongToKeyName(info.names[i], xkb->names->keys[i].name);
+ uDEBUG2(2, "key %d = %s\n", i,
+ XkbKeyNameText(xkb->names->keys[i].name, XkbMessage));
+ }
+ }
+ else
+ {
+ WSGO("Cannot create XkbNamesRec in CompileKeycodes\n");
+ return False;
+ }
+ if (info.leds)
+ {
+ IndicatorNameInfo *ii;
+ if (XkbAllocIndicatorMaps(xkb) != Success)
+ {
+ WSGO("Couldn't allocate IndicatorRec in CompileKeycodes\n");
+ ACTION("Physical indicators not set\n");
+ }
+ for (ii = info.leds; ii != NULL;
+ ii = (IndicatorNameInfo *) ii->defs.next)
+ {
+ xkb->names->indicators[ii->ndx - 1] =
+ XkbInternAtom(xkb->dpy,
+ XkbAtomGetString(NULL, ii->name), False);
+ if (xkb->indicators != NULL)
+ {
+ register unsigned bit;
+ bit = 1 << (ii->ndx - 1);
+ if (ii->virtual)
+ xkb->indicators->phys_indicators &= ~bit;
+ else
+ xkb->indicators->phys_indicators |= bit;
+ }
+ }
+ }
+ if (info.aliases)
+ ApplyAliases(xkb, False, &info.aliases);
+ return True;
}
ClearKeyNamesInfo(&info);
return False;
diff --git a/keycodes.h b/keycodes.h
index 5e2680d..11f4460 100644
--- a/keycodes.h
+++ b/keycodes.h
@@ -29,14 +29,12 @@
#define KeyNameToLong(n) ((((unsigned long)n[0])<<24)|(((unsigned long)n[1])<<16)|(((unsigned long)n[2])<<8)|n[3])
-extern char * longText(
- unsigned long /* val */,
- unsigned /* format */
-);
+extern char *longText(unsigned long /* val */ ,
+ unsigned /* format */
+ );
-extern void LongToKeyName(
- unsigned long /* val */,
- char * /* name_rtrn */
-);
+extern void LongToKeyName(unsigned long /* val */ ,
+ char * /* name_rtrn */
+ );
#endif /* KEYCODES_H */
diff --git a/keymap.c b/keymap.c
index 5cc4c95..a1f3865 100644
--- a/keymap.c
+++ b/keymap.c
@@ -39,133 +39,143 @@
#define SYMBOLS 4
#define MAX_SECTIONS 5
-XkbFile * sections[MAX_SECTIONS];
+XkbFile *sections[MAX_SECTIONS];
/**
* Compile the given file and store the output in result.
*/
Bool
-CompileKeymap(XkbFile *file,XkbFileInfo *result,unsigned merge)
+CompileKeymap(XkbFile * file, XkbFileInfo * result, unsigned merge)
{
-unsigned have;
-Bool ok;
-unsigned required,legal;
-unsigned mainType;
-char * mainName;
-LEDInfo * unbound= NULL;
+ unsigned have;
+ Bool ok;
+ unsigned required, legal;
+ unsigned mainType;
+ char *mainName;
+ LEDInfo *unbound = NULL;
- bzero(sections,MAX_SECTIONS*sizeof(XkbFile *));
- mainType= file->type;
- mainName= file->name;
- switch (mainType) {
- case XkmSemanticsFile:
- required= XkmSemanticsRequired;
- legal= XkmSemanticsLegal;
- break;
- case XkmLayoutFile: /* standard type if setxkbmap -print */
- required= XkmLayoutRequired;
- legal= XkmKeymapLegal;
- break;
- case XkmKeymapFile:
- required= XkmKeymapRequired;
- legal= XkmKeymapLegal;
- break;
- default:
- ERROR1("Cannot compile %s alone into an XKM file\n",
- XkbConfigText(mainType,XkbMessage));
- return False;
+ bzero(sections, MAX_SECTIONS * sizeof(XkbFile *));
+ mainType = file->type;
+ mainName = file->name;
+ switch (mainType)
+ {
+ case XkmSemanticsFile:
+ required = XkmSemanticsRequired;
+ legal = XkmSemanticsLegal;
+ break;
+ case XkmLayoutFile: /* standard type if setxkbmap -print */
+ required = XkmLayoutRequired;
+ legal = XkmKeymapLegal;
+ break;
+ case XkmKeymapFile:
+ required = XkmKeymapRequired;
+ legal = XkmKeymapLegal;
+ break;
+ default:
+ ERROR1("Cannot compile %s alone into an XKM file\n",
+ XkbConfigText(mainType, XkbMessage));
+ return False;
}
- have= 0;
- ok= 1;
- file= (XkbFile *)file->defs;
+ have = 0;
+ ok = 1;
+ file = (XkbFile *) file->defs;
/* Check for duplicate entries in the input file */
- while ((file)&&(ok)) {
- file->topName= mainName;
- if ((have&(1<<file->type))!=0) {
- ERROR2("More than one %s section in a %s file\n",
- XkbConfigText(file->type,XkbMessage),
- XkbConfigText(mainType,XkbMessage));
- ACTION("All sections after the first ignored\n");
- ok= False;
- }
- else if ((1<<file->type)&(~legal)) {
- ERROR2("Cannot define %s in a %s file\n",
- XkbConfigText(file->type,XkbMessage),
- XkbConfigText(mainType,XkbMessage));
- ok= False;
- }
- else switch (file->type) {
- case XkmSemanticsFile:
- case XkmLayoutFile:
- case XkmKeymapFile:
- WSGO2("Illegal %s configuration in a %s file\n",
- XkbConfigText(file->type,XkbMessage),
- XkbConfigText(mainType,XkbMessage));
- ACTION("Ignored\n");
- ok= False;
- break;
- case XkmKeyNamesIndex:
- sections[KEYCODES]= file;
- break;
- case XkmTypesIndex:
- sections[TYPES]= file;
- break;
- case XkmSymbolsIndex:
- sections[SYMBOLS]= file;
- break;
- case XkmCompatMapIndex:
- sections[COMPAT]= file;
- break;
- case XkmGeometryIndex:
- case XkmGeometryFile:
- sections[GEOMETRY]= file;
- break;
- case XkmVirtualModsIndex:
- case XkmIndicatorsIndex:
- WSGO1("Found an isolated %s section\n",
- XkbConfigText(file->type,XkbMessage));
- break;
- default:
- WSGO1("Unknown file type %d\n",file->type);
- break;
- }
- if (ok)
- have|= (1<<file->type);
- file= (XkbFile*)file->common.next;
+ while ((file) && (ok))
+ {
+ file->topName = mainName;
+ if ((have & (1 << file->type)) != 0)
+ {
+ ERROR2("More than one %s section in a %s file\n",
+ XkbConfigText(file->type, XkbMessage),
+ XkbConfigText(mainType, XkbMessage));
+ ACTION("All sections after the first ignored\n");
+ ok = False;
+ }
+ else if ((1 << file->type) & (~legal))
+ {
+ ERROR2("Cannot define %s in a %s file\n",
+ XkbConfigText(file->type, XkbMessage),
+ XkbConfigText(mainType, XkbMessage));
+ ok = False;
+ }
+ else
+ switch (file->type)
+ {
+ case XkmSemanticsFile:
+ case XkmLayoutFile:
+ case XkmKeymapFile:
+ WSGO2("Illegal %s configuration in a %s file\n",
+ XkbConfigText(file->type, XkbMessage),
+ XkbConfigText(mainType, XkbMessage));
+ ACTION("Ignored\n");
+ ok = False;
+ break;
+ case XkmKeyNamesIndex:
+ sections[KEYCODES] = file;
+ break;
+ case XkmTypesIndex:
+ sections[TYPES] = file;
+ break;
+ case XkmSymbolsIndex:
+ sections[SYMBOLS] = file;
+ break;
+ case XkmCompatMapIndex:
+ sections[COMPAT] = file;
+ break;
+ case XkmGeometryIndex:
+ case XkmGeometryFile:
+ sections[GEOMETRY] = file;
+ break;
+ case XkmVirtualModsIndex:
+ case XkmIndicatorsIndex:
+ WSGO1("Found an isolated %s section\n",
+ XkbConfigText(file->type, XkbMessage));
+ break;
+ default:
+ WSGO1("Unknown file type %d\n", file->type);
+ break;
+ }
+ if (ok)
+ have |= (1 << file->type);
+ file = (XkbFile *) file->common.next;
}
/* compile the sections we have in the file one-by-one, or fail. */
- if (ok) {
- if (ok && (sections[KEYCODES]!=NULL))
- ok= CompileKeycodes(sections[KEYCODES],result,MergeOverride);
- if (ok && (sections[GEOMETRY]!=NULL))
- ok= CompileGeometry(sections[GEOMETRY],result,MergeOverride);
- if (ok && (sections[TYPES]!=NULL))
- ok= CompileKeyTypes(sections[TYPES],result,MergeOverride);
- if (ok && (sections[COMPAT]!=NULL))
- ok=CompileCompatMap(sections[COMPAT],result,MergeOverride,&unbound);
- if (ok && (sections[SYMBOLS]!=NULL))
- ok= CompileSymbols(sections[SYMBOLS],result,MergeOverride);
+ if (ok)
+ {
+ if (ok && (sections[KEYCODES] != NULL))
+ ok = CompileKeycodes(sections[KEYCODES], result, MergeOverride);
+ if (ok && (sections[GEOMETRY] != NULL))
+ ok = CompileGeometry(sections[GEOMETRY], result, MergeOverride);
+ if (ok && (sections[TYPES] != NULL))
+ ok = CompileKeyTypes(sections[TYPES], result, MergeOverride);
+ if (ok && (sections[COMPAT] != NULL))
+ ok = CompileCompatMap(sections[COMPAT], result, MergeOverride,
+ &unbound);
+ if (ok && (sections[SYMBOLS] != NULL))
+ ok = CompileSymbols(sections[SYMBOLS], result, MergeOverride);
}
if (!ok)
- return False;
- result->defined= have;
- if (required&(~have)) {
- register int i,bit;
- unsigned missing;
- missing= required&(~have);
- for (i=0,bit=1;missing!=0;i++,bit<<=1) {
- if (missing&bit) {
- ERROR2("Missing %s section in a %s file\n",
- XkbConfigText(i,XkbMessage),
- XkbConfigText(mainType,XkbMessage));
- missing&=~bit;
- }
- }
- ACTION1("Description of %s not compiled\n",
- XkbConfigText(mainType,XkbMessage));
- ok= False;
+ return False;
+ result->defined = have;
+ if (required & (~have))
+ {
+ register int i, bit;
+ unsigned missing;
+ missing = required & (~have);
+ for (i = 0, bit = 1; missing != 0; i++, bit <<= 1)
+ {
+ if (missing & bit)
+ {
+ ERROR2("Missing %s section in a %s file\n",
+ XkbConfigText(i, XkbMessage),
+ XkbConfigText(mainType, XkbMessage));
+ missing &= ~bit;
+ }
+ }
+ ACTION1("Description of %s not compiled\n",
+ XkbConfigText(mainType, XkbMessage));
+ ok = False;
}
- ok= BindIndicators(result,True,unbound,NULL);
+ ok = BindIndicators(result, True, unbound, NULL);
return ok;
}
-
diff --git a/keytypes.c b/keytypes.c
index 89c3ba1..f51a7d5 100644
--- a/keytypes.c
+++ b/keytypes.c
@@ -31,13 +31,14 @@
#include "action.h"
#include "misc.h"
-typedef struct _PreserveInfo {
- CommonInfo defs;
- short matchingMapIndex;
- unsigned char indexMods;
- unsigned char preMods;
- unsigned short indexVMods;
- unsigned short preVMods;
+typedef struct _PreserveInfo
+{
+ CommonInfo defs;
+ short matchingMapIndex;
+ unsigned char indexMods;
+ unsigned char preMods;
+ unsigned short indexVMods;
+ unsigned short preVMods;
} PreserveInfo;
#define _KT_Name (1<<0)
@@ -46,39 +47,41 @@ typedef struct _PreserveInfo {
#define _KT_Preserve (1<<3)
#define _KT_LevelNames (1<<4)
-typedef struct _KeyTypeInfo {
- CommonInfo defs;
- Display * dpy;
- Atom name;
- int fileID;
- unsigned mask;
- unsigned vmask;
- Bool groupInfo;
- int numLevels;
- int nEntries;
- int szEntries;
- XkbKTMapEntryPtr entries;
- PreserveInfo * preserve;
- int szNames;
- Atom * lvlNames;
+typedef struct _KeyTypeInfo
+{
+ CommonInfo defs;
+ Display *dpy;
+ Atom name;
+ int fileID;
+ unsigned mask;
+ unsigned vmask;
+ Bool groupInfo;
+ int numLevels;
+ int nEntries;
+ int szEntries;
+ XkbKTMapEntryPtr entries;
+ PreserveInfo *preserve;
+ int szNames;
+ Atom *lvlNames;
} KeyTypeInfo;
-typedef struct _KeyTypesInfo {
- Display * dpy;
- char * name;
- int errorCount;
- int fileID;
- unsigned stdPresent;
- int nTypes;
- KeyTypeInfo * types;
- KeyTypeInfo dflt;
- VModInfo vmods;
+typedef struct _KeyTypesInfo
+{
+ Display *dpy;
+ char *name;
+ int errorCount;
+ int fileID;
+ unsigned stdPresent;
+ int nTypes;
+ KeyTypeInfo *types;
+ KeyTypeInfo dflt;
+ VModInfo vmods;
} KeyTypesInfo;
-Atom tok_ONE_LEVEL;
-Atom tok_TWO_LEVEL;
-Atom tok_ALPHABETIC;
-Atom tok_KEYPAD;
+Atom tok_ONE_LEVEL;
+Atom tok_TWO_LEVEL;
+Atom tok_ALPHABETIC;
+Atom tok_KEYPAD;
/***====================================================================***/
@@ -89,29 +92,26 @@ Atom tok_KEYPAD;
/***====================================================================***/
-extern Bool AddMapEntry(
- XkbDescPtr /* xkb */,
- KeyTypeInfo * /* type */,
- XkbKTMapEntryPtr /* new */,
- Bool /* clobber */,
- Bool /* report */
-);
-
-extern Bool AddPreserve(
- XkbDescPtr /* xkb */,
- KeyTypeInfo * /* type */,
- PreserveInfo * /* new */,
- Bool /* clobber */,
- Bool /* report */
-);
-
-extern Bool AddLevelName(
- KeyTypeInfo * /* type */,
- unsigned /* level */,
- Atom /* name */,
- Bool /* clobber */,
- Bool /* report */
-);
+extern Bool AddMapEntry(XkbDescPtr /* xkb */ ,
+ KeyTypeInfo * /* type */ ,
+ XkbKTMapEntryPtr /* new */ ,
+ Bool /* clobber */ ,
+ Bool /* report */
+ );
+
+extern Bool AddPreserve(XkbDescPtr /* xkb */ ,
+ KeyTypeInfo * /* type */ ,
+ PreserveInfo * /* new */ ,
+ Bool /* clobber */ ,
+ Bool /* report */
+ );
+
+extern Bool AddLevelName(KeyTypeInfo * /* type */ ,
+ unsigned /* level */ ,
+ Atom /* name */ ,
+ Bool /* clobber */ ,
+ Bool /* report */
+ );
#define MapEntryTxt(t,x,e) \
XkbVModMaskText((t)->dpy,(x),(e)->mods.real_mods,(e)->mods.vmods,XkbMessage)
@@ -126,131 +126,147 @@ extern Bool AddLevelName(
/***====================================================================***/
static void
-InitKeyTypesInfo(KeyTypesInfo *info,XkbDescPtr xkb,KeyTypesInfo *from)
+InitKeyTypesInfo(KeyTypesInfo * info, XkbDescPtr xkb, KeyTypesInfo * from)
{
- tok_ONE_LEVEL= XkbInternAtom(NULL,"ONE_LEVEL",False);
- tok_TWO_LEVEL= XkbInternAtom(NULL,"TWO_LEVEL",False);
- tok_ALPHABETIC= XkbInternAtom(NULL,"ALPHABETIC",False);
- tok_KEYPAD= XkbInternAtom(NULL,"KEYPAD",False);
- info->dpy= NULL;
- info->name= uStringDup("default");
- info->errorCount= 0;
- info->stdPresent= 0;
- info->nTypes= 0;
- info->types= NULL;
- info->dflt.defs.defined= 0;
- info->dflt.defs.fileID= 0;
- info->dflt.defs.merge= MergeOverride;
- info->dflt.defs.next= NULL;
- info->dflt.name= None;
- info->dflt.mask= 0;
- info->dflt.vmask= 0;
- info->dflt.groupInfo= False;
- info->dflt.numLevels= 1;
- info->dflt.nEntries= info->dflt.szEntries= 0;
- info->dflt.entries= NULL;
- info->dflt.szNames= 0;
- info->dflt.lvlNames= NULL;
- info->dflt.preserve= NULL;
- InitVModInfo(&info->vmods,xkb);
- if (from!=NULL) {
- info->dpy= from->dpy;
- info->dflt= from->dflt;
- if (from->dflt.entries) {
- info->dflt.entries= uTypedCalloc(from->dflt.szEntries,
- XkbKTMapEntryRec);
- if (info->dflt.entries) {
- unsigned sz = from->dflt.nEntries*sizeof(XkbKTMapEntryRec);
- memcpy(info->dflt.entries,from->dflt.entries,sz);
- }
- }
- if (from->dflt.lvlNames) {
- info->dflt.lvlNames= uTypedCalloc(from->dflt.szNames,Atom);
- if (info->dflt.lvlNames) {
- register unsigned sz = from->dflt.szNames*sizeof(Atom);
- memcpy(info->dflt.lvlNames,from->dflt.lvlNames,sz);
- }
- }
- if (from->dflt.preserve) {
- PreserveInfo *old,*new,*last;
- last= NULL;
- old= from->dflt.preserve;
- for (;old;old=(PreserveInfo *)old->defs.next) {
- new= uTypedAlloc(PreserveInfo);
- if (!new)
- return;
- *new= *old;
- new->defs.next= NULL;
- if (last) last->defs.next= (CommonInfo *)new;
- else info->dflt.preserve= new;
- last= new;
- }
- }
+ tok_ONE_LEVEL = XkbInternAtom(NULL, "ONE_LEVEL", False);
+ tok_TWO_LEVEL = XkbInternAtom(NULL, "TWO_LEVEL", False);
+ tok_ALPHABETIC = XkbInternAtom(NULL, "ALPHABETIC", False);
+ tok_KEYPAD = XkbInternAtom(NULL, "KEYPAD", False);
+ info->dpy = NULL;
+ info->name = uStringDup("default");
+ info->errorCount = 0;
+ info->stdPresent = 0;
+ info->nTypes = 0;
+ info->types = NULL;
+ info->dflt.defs.defined = 0;
+ info->dflt.defs.fileID = 0;
+ info->dflt.defs.merge = MergeOverride;
+ info->dflt.defs.next = NULL;
+ info->dflt.name = None;
+ info->dflt.mask = 0;
+ info->dflt.vmask = 0;
+ info->dflt.groupInfo = False;
+ info->dflt.numLevels = 1;
+ info->dflt.nEntries = info->dflt.szEntries = 0;
+ info->dflt.entries = NULL;
+ info->dflt.szNames = 0;
+ info->dflt.lvlNames = NULL;
+ info->dflt.preserve = NULL;
+ InitVModInfo(&info->vmods, xkb);
+ if (from != NULL)
+ {
+ info->dpy = from->dpy;
+ info->dflt = from->dflt;
+ if (from->dflt.entries)
+ {
+ info->dflt.entries = uTypedCalloc(from->dflt.szEntries,
+ XkbKTMapEntryRec);
+ if (info->dflt.entries)
+ {
+ unsigned sz = from->dflt.nEntries * sizeof(XkbKTMapEntryRec);
+ memcpy(info->dflt.entries, from->dflt.entries, sz);
+ }
+ }
+ if (from->dflt.lvlNames)
+ {
+ info->dflt.lvlNames = uTypedCalloc(from->dflt.szNames, Atom);
+ if (info->dflt.lvlNames)
+ {
+ register unsigned sz = from->dflt.szNames * sizeof(Atom);
+ memcpy(info->dflt.lvlNames, from->dflt.lvlNames, sz);
+ }
+ }
+ if (from->dflt.preserve)
+ {
+ PreserveInfo *old, *new, *last;
+ last = NULL;
+ old = from->dflt.preserve;
+ for (; old; old = (PreserveInfo *) old->defs.next)
+ {
+ new = uTypedAlloc(PreserveInfo);
+ if (!new)
+ return;
+ *new = *old;
+ new->defs.next = NULL;
+ if (last)
+ last->defs.next = (CommonInfo *) new;
+ else
+ info->dflt.preserve = new;
+ last = new;
+ }
+ }
}
return;
}
static void
-FreeKeyTypeInfo(KeyTypeInfo *type)
+FreeKeyTypeInfo(KeyTypeInfo * type)
{
- if (type->entries!=NULL) {
- uFree(type->entries);
- type->entries= NULL;
+ if (type->entries != NULL)
+ {
+ uFree(type->entries);
+ type->entries = NULL;
}
- if (type->lvlNames!=NULL) {
- uFree(type->lvlNames);
- type->lvlNames= NULL;
+ if (type->lvlNames != NULL)
+ {
+ uFree(type->lvlNames);
+ type->lvlNames = NULL;
}
- if (type->preserve!=NULL) {
- ClearCommonInfo(&type->preserve->defs);
- type->preserve= NULL;
+ if (type->preserve != NULL)
+ {
+ ClearCommonInfo(&type->preserve->defs);
+ type->preserve = NULL;
}
return;
}
static void
-FreeKeyTypesInfo(KeyTypesInfo *info)
+FreeKeyTypesInfo(KeyTypesInfo * info)
{
- info->dpy= NULL;
+ info->dpy = NULL;
if (info->name)
- uFree(info->name);
- info->name= NULL;
- if (info->types) {
- register KeyTypeInfo *type;
- for (type= info->types;type;type=(KeyTypeInfo *)type->defs.next) {
- FreeKeyTypeInfo(type);
- }
- info->types= (KeyTypeInfo *)ClearCommonInfo(&info->types->defs);
+ uFree(info->name);
+ info->name = NULL;
+ if (info->types)
+ {
+ register KeyTypeInfo *type;
+ for (type = info->types; type; type = (KeyTypeInfo *) type->defs.next)
+ {
+ FreeKeyTypeInfo(type);
+ }
+ info->types = (KeyTypeInfo *) ClearCommonInfo(&info->types->defs);
}
FreeKeyTypeInfo(&info->dflt);
return;
}
static KeyTypeInfo *
-NextKeyType(KeyTypesInfo *info)
+NextKeyType(KeyTypesInfo * info)
{
-KeyTypeInfo * type;
-
- type= uTypedAlloc(KeyTypeInfo);
- if (type!=NULL) {
- bzero(type,sizeof(KeyTypeInfo));
- type->defs.fileID= info->fileID;
- type->dpy= info->dpy;
- info->types= (KeyTypeInfo *)AddCommonInfo(&info->types->defs,
- (CommonInfo *)type);
- info->nTypes++;
+ KeyTypeInfo *type;
+
+ type = uTypedAlloc(KeyTypeInfo);
+ if (type != NULL)
+ {
+ bzero(type, sizeof(KeyTypeInfo));
+ type->defs.fileID = info->fileID;
+ type->dpy = info->dpy;
+ info->types = (KeyTypeInfo *) AddCommonInfo(&info->types->defs,
+ (CommonInfo *) type);
+ info->nTypes++;
}
return type;
}
static KeyTypeInfo *
-FindMatchingKeyType(KeyTypesInfo *info,KeyTypeInfo *new)
+FindMatchingKeyType(KeyTypesInfo * info, KeyTypeInfo * new)
{
-KeyTypeInfo *old;
+ KeyTypeInfo *old;
- for (old=info->types;old;old=(KeyTypeInfo *)old->defs.next) {
- if (old->name==new->name)
- return old;
+ for (old = info->types; old; old = (KeyTypeInfo *) old->defs.next)
+ {
+ if (old->name == new->name)
+ return old;
}
return NULL;
}
@@ -258,900 +274,989 @@ KeyTypeInfo *old;
static Bool
ReportTypeBadWidth(const char *type, int has, int needs)
{
- ERROR3("Key type \"%s\" has %d levels, must have %d\n",type,has,needs);
+ ERROR3("Key type \"%s\" has %d levels, must have %d\n", type, has, needs);
ACTION("Illegal type definition ignored\n");
return False;
}
static Bool
-AddKeyType(XkbDescPtr xkb,KeyTypesInfo *info,KeyTypeInfo *new)
+AddKeyType(XkbDescPtr xkb, KeyTypesInfo * info, KeyTypeInfo * new)
{
-KeyTypeInfo * old;
-
- if (new->name==tok_ONE_LEVEL) {
- if (new->numLevels>1)
- return ReportTypeBadWidth("ONE_LEVEL",new->numLevels,1);
- info->stdPresent|= XkbOneLevelMask;
+ KeyTypeInfo *old;
+
+ if (new->name == tok_ONE_LEVEL)
+ {
+ if (new->numLevels > 1)
+ return ReportTypeBadWidth("ONE_LEVEL", new->numLevels, 1);
+ info->stdPresent |= XkbOneLevelMask;
}
- else if (new->name==tok_TWO_LEVEL) {
- if (new->numLevels>2)
- return ReportTypeBadWidth("TWO_LEVEL",new->numLevels,2);
- else if (new->numLevels<2)
- new->numLevels= 2;
- info->stdPresent|= XkbTwoLevelMask;
+ else if (new->name == tok_TWO_LEVEL)
+ {
+ if (new->numLevels > 2)
+ return ReportTypeBadWidth("TWO_LEVEL", new->numLevels, 2);
+ else if (new->numLevels < 2)
+ new->numLevels = 2;
+ info->stdPresent |= XkbTwoLevelMask;
}
- else if (new->name==tok_ALPHABETIC) {
- if (new->numLevels>2)
- return ReportTypeBadWidth("ALPHABETIC",new->numLevels,2);
- else if (new->numLevels<2)
- new->numLevels= 2;
- info->stdPresent|= XkbAlphabeticMask;
+ else if (new->name == tok_ALPHABETIC)
+ {
+ if (new->numLevels > 2)
+ return ReportTypeBadWidth("ALPHABETIC", new->numLevels, 2);
+ else if (new->numLevels < 2)
+ new->numLevels = 2;
+ info->stdPresent |= XkbAlphabeticMask;
}
- else if (new->name==tok_KEYPAD) {
- if (new->numLevels>2)
- return ReportTypeBadWidth("KEYPAD",new->numLevels,2);
- else if (new->numLevels<2)
- new->numLevels= 2;
- info->stdPresent|= XkbKeypadMask;
+ else if (new->name == tok_KEYPAD)
+ {
+ if (new->numLevels > 2)
+ return ReportTypeBadWidth("KEYPAD", new->numLevels, 2);
+ else if (new->numLevels < 2)
+ new->numLevels = 2;
+ info->stdPresent |= XkbKeypadMask;
}
- old= FindMatchingKeyType(info,new);
- if (old!=NULL) {
- Bool report;
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- KeyTypeInfo *next= (KeyTypeInfo *)old->defs.next;
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple definitions of the %s key type\n",
- XkbAtomGetString(NULL,new->name));
- ACTION("Earlier definition ignored\n");
- }
- FreeKeyTypeInfo(old);
- *old= *new;
- new->szEntries= new->nEntries= 0;
- new->entries= NULL;
- new->preserve= NULL;
- new->lvlNames= NULL;
- old->defs.next= &next->defs;
- return True;
- }
- report= (old->defs.fileID==new->defs.fileID)&&(warningLevel>0);
- if (report) {
- WARN1("Multiple definitions of the %s key type\n",
- XkbAtomGetString(NULL,new->name));
- ACTION("Later definition ignored\n");
- }
- FreeKeyTypeInfo(new);
- return True;
+ old = FindMatchingKeyType(info, new);
+ if (old != NULL)
+ {
+ Bool report;
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ KeyTypeInfo *next = (KeyTypeInfo *) old->defs.next;
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Multiple definitions of the %s key type\n",
+ XkbAtomGetString(NULL, new->name));
+ ACTION("Earlier definition ignored\n");
+ }
+ FreeKeyTypeInfo(old);
+ *old = *new;
+ new->szEntries = new->nEntries = 0;
+ new->entries = NULL;
+ new->preserve = NULL;
+ new->lvlNames = NULL;
+ old->defs.next = &next->defs;
+ return True;
+ }
+ report = (old->defs.fileID == new->defs.fileID) && (warningLevel > 0);
+ if (report)
+ {
+ WARN1("Multiple definitions of the %s key type\n",
+ XkbAtomGetString(NULL, new->name));
+ ACTION("Later definition ignored\n");
+ }
+ FreeKeyTypeInfo(new);
+ return True;
}
- old= NextKeyType(info);
- if (old==NULL)
- return False;
- *old= *new;
- old->defs.next= NULL;
- new->nEntries= new->szEntries= 0;
- new->entries= NULL;
- new->szNames= 0;
- new->lvlNames= NULL;
- new->preserve= NULL;
+ old = NextKeyType(info);
+ if (old == NULL)
+ return False;
+ *old = *new;
+ old->defs.next = NULL;
+ new->nEntries = new->szEntries = 0;
+ new->entries = NULL;
+ new->szNames = 0;
+ new->lvlNames = NULL;
+ new->preserve = NULL;
return True;
}
/***====================================================================***/
static void
-MergeIncludedKeyTypes( KeyTypesInfo * into,
- KeyTypesInfo * from,
- unsigned merge,
- XkbDescPtr xkb)
+MergeIncludedKeyTypes(KeyTypesInfo * into,
+ KeyTypesInfo * from, unsigned merge, XkbDescPtr xkb)
{
-KeyTypeInfo * type;
+ KeyTypeInfo *type;
- if (from->errorCount>0) {
- into->errorCount+= from->errorCount;
- return;
+ if (from->errorCount > 0)
+ {
+ into->errorCount += from->errorCount;
+ return;
}
- if (into->name==NULL) {
- into->name= from->name;
- from->name= NULL;
+ if (into->name == NULL)
+ {
+ into->name = from->name;
+ from->name = NULL;
}
- for (type=from->types;type;type=(KeyTypeInfo *)type->defs.next) {
- if (merge!=MergeDefault)
- type->defs.merge= merge;
- if (!AddKeyType(xkb,into,type))
- into->errorCount++;
+ for (type = from->types; type; type = (KeyTypeInfo *) type->defs.next)
+ {
+ if (merge != MergeDefault)
+ type->defs.merge = merge;
+ if (!AddKeyType(xkb, into, type))
+ into->errorCount++;
}
- into->stdPresent|= from->stdPresent;
+ into->stdPresent |= from->stdPresent;
return;
}
-typedef void (*FileHandler)(
- XkbFile * /* file */,
- XkbDescPtr /* xkb */,
- unsigned /* merge */,
- KeyTypesInfo * /* included */
-);
+typedef void (*FileHandler) (XkbFile * /* file */ ,
+ XkbDescPtr /* xkb */ ,
+ unsigned /* merge */ ,
+ KeyTypesInfo * /* included */
+ );
static Bool
-HandleIncludeKeyTypes( IncludeStmt * stmt,
- XkbDescPtr xkb,
- KeyTypesInfo * info,
- FileHandler hndlr)
+HandleIncludeKeyTypes(IncludeStmt * stmt,
+ XkbDescPtr xkb, KeyTypesInfo * info, FileHandler hndlr)
{
-unsigned newMerge;
-XkbFile * rtrn;
-KeyTypesInfo included;
-Bool haveSelf;
-
- haveSelf= False;
- if ((stmt->file==NULL)&&(stmt->map==NULL)) {
- haveSelf= True;
- included= *info;
- bzero(info,sizeof(KeyTypesInfo));
+ unsigned newMerge;
+ XkbFile *rtrn;
+ KeyTypesInfo included;
+ Bool haveSelf;
+
+ haveSelf = False;
+ if ((stmt->file == NULL) && (stmt->map == NULL))
+ {
+ haveSelf = True;
+ included = *info;
+ bzero(info, sizeof(KeyTypesInfo));
}
- else if (ProcessIncludeFile(stmt,XkmTypesIndex,&rtrn,&newMerge)) {
- InitKeyTypesInfo(&included,xkb,info);
- included.fileID= included.dflt.defs.fileID= rtrn->id;
- included.dflt.defs.merge= newMerge;
-
- (*hndlr)(rtrn,xkb,newMerge,&included);
- if (stmt->stmt!=NULL) {
- if (included.name!=NULL)
- uFree(included.name);
- included.name= stmt->stmt;
- stmt->stmt= NULL;
- }
+ else if (ProcessIncludeFile(stmt, XkmTypesIndex, &rtrn, &newMerge))
+ {
+ InitKeyTypesInfo(&included, xkb, info);
+ included.fileID = included.dflt.defs.fileID = rtrn->id;
+ included.dflt.defs.merge = newMerge;
+
+ (*hndlr) (rtrn, xkb, newMerge, &included);
+ if (stmt->stmt != NULL)
+ {
+ if (included.name != NULL)
+ uFree(included.name);
+ included.name = stmt->stmt;
+ stmt->stmt = NULL;
+ }
}
- else {
- info->errorCount+= 10;
- return False;
+ else
+ {
+ info->errorCount += 10;
+ return False;
}
- if ((stmt->next!=NULL)&&(included.errorCount<1)) {
- IncludeStmt * next;
- unsigned op;
- KeyTypesInfo next_incl;
-
- for (next=stmt->next;next!=NULL;next=next->next) {
- if ((next->file==NULL)&&(next->map==NULL)) {
- haveSelf= True;
- MergeIncludedKeyTypes(&included,info,next->merge,xkb);
- FreeKeyTypesInfo(info);
- }
- else if (ProcessIncludeFile(next,XkmTypesIndex,&rtrn,&op)) {
- InitKeyTypesInfo(&next_incl,xkb,&included);
- next_incl.fileID= next_incl.dflt.defs.fileID= rtrn->id;
- next_incl.dflt.defs.merge= op;
- (*hndlr)(rtrn,xkb,op,&next_incl);
- MergeIncludedKeyTypes(&included,&next_incl,op,xkb);
- FreeKeyTypesInfo(&next_incl);
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- }
+ if ((stmt->next != NULL) && (included.errorCount < 1))
+ {
+ IncludeStmt *next;
+ unsigned op;
+ KeyTypesInfo next_incl;
+
+ for (next = stmt->next; next != NULL; next = next->next)
+ {
+ if ((next->file == NULL) && (next->map == NULL))
+ {
+ haveSelf = True;
+ MergeIncludedKeyTypes(&included, info, next->merge, xkb);
+ FreeKeyTypesInfo(info);
+ }
+ else if (ProcessIncludeFile(next, XkmTypesIndex, &rtrn, &op))
+ {
+ InitKeyTypesInfo(&next_incl, xkb, &included);
+ next_incl.fileID = next_incl.dflt.defs.fileID = rtrn->id;
+ next_incl.dflt.defs.merge = op;
+ (*hndlr) (rtrn, xkb, op, &next_incl);
+ MergeIncludedKeyTypes(&included, &next_incl, op, xkb);
+ FreeKeyTypesInfo(&next_incl);
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ }
}
if (haveSelf)
- *info= included;
- else {
- MergeIncludedKeyTypes(info,&included,newMerge,xkb);
- FreeKeyTypesInfo(&included);
+ *info = included;
+ else
+ {
+ MergeIncludedKeyTypes(info, &included, newMerge, xkb);
+ FreeKeyTypesInfo(&included);
}
- return (info->errorCount==0);
+ return (info->errorCount == 0);
}
/***====================================================================***/
static XkbKTMapEntryPtr
-FindMatchingMapEntry(KeyTypeInfo *type,unsigned mask,unsigned vmask)
+FindMatchingMapEntry(KeyTypeInfo * type, unsigned mask, unsigned vmask)
{
-register int i;
-XkbKTMapEntryPtr entry;
+ register int i;
+ XkbKTMapEntryPtr entry;
- for (i=0,entry=type->entries;i<type->nEntries;i++,entry++) {
- if ((entry->mods.real_mods==mask)&&(entry->mods.vmods==vmask))
- return entry;
+ for (i = 0, entry = type->entries; i < type->nEntries; i++, entry++)
+ {
+ if ((entry->mods.real_mods == mask) && (entry->mods.vmods == vmask))
+ return entry;
}
return NULL;
}
static void
-DeleteLevel1MapEntries(KeyTypeInfo *type)
+DeleteLevel1MapEntries(KeyTypeInfo * type)
{
-register int i,n;
-
- for (i=0;i<type->nEntries;i++) {
- if (type->entries[i].level==0) {
- for (n=i;n<type->nEntries-1;n++) {
- type->entries[n]= type->entries[n+1];
- }
- type->nEntries--;
- }
+ register int i, n;
+
+ for (i = 0; i < type->nEntries; i++)
+ {
+ if (type->entries[i].level == 0)
+ {
+ for (n = i; n < type->nEntries - 1; n++)
+ {
+ type->entries[n] = type->entries[n + 1];
+ }
+ type->nEntries--;
+ }
}
return;
}
static XkbKTMapEntryPtr
-NextMapEntry(KeyTypeInfo *type)
+NextMapEntry(KeyTypeInfo * type)
{
- if (type->entries==NULL) {
- type->entries= uTypedCalloc(2,XkbKTMapEntryRec);
- if (type->entries==NULL) {
- ERROR1("Couldn't allocate map entries for %s\n",TypeTxt(type));
- ACTION("Map entries lost\n");
- return NULL;
- }
- type->szEntries= 2;
- type->nEntries= 0;
+ if (type->entries == NULL)
+ {
+ type->entries = uTypedCalloc(2, XkbKTMapEntryRec);
+ if (type->entries == NULL)
+ {
+ ERROR1("Couldn't allocate map entries for %s\n", TypeTxt(type));
+ ACTION("Map entries lost\n");
+ return NULL;
+ }
+ type->szEntries = 2;
+ type->nEntries = 0;
}
- else if (type->nEntries>=type->szEntries) {
- type->szEntries*=2;
- type->entries= uTypedRecalloc(type->entries,
- type->nEntries,type->szEntries,
- XkbKTMapEntryRec);
- if (type->entries==NULL) {
- ERROR1("Couldn't reallocate map entries for %s\n",TypeTxt(type));
- ACTION("Map entries lost\n");
- return NULL;
- }
+ else if (type->nEntries >= type->szEntries)
+ {
+ type->szEntries *= 2;
+ type->entries = uTypedRecalloc(type->entries,
+ type->nEntries, type->szEntries,
+ XkbKTMapEntryRec);
+ if (type->entries == NULL)
+ {
+ ERROR1("Couldn't reallocate map entries for %s\n", TypeTxt(type));
+ ACTION("Map entries lost\n");
+ return NULL;
+ }
}
return &type->entries[type->nEntries++];
}
Bool
-AddPreserve( XkbDescPtr xkb,
- KeyTypeInfo * type,
- PreserveInfo * new,
- Bool clobber,
- Bool report)
+AddPreserve(XkbDescPtr xkb,
+ KeyTypeInfo * type, PreserveInfo * new, Bool clobber, Bool report)
{
-PreserveInfo *old;
-
- old= type->preserve;
- while (old!=NULL) {
- if ((old->indexMods!=new->indexMods)||
- (old->indexVMods!=new->indexVMods)) {
- old= (PreserveInfo *)old->defs.next;
- continue;
- }
- if ((old->preMods==new->preMods)&&(old->preVMods==new->preVMods)) {
- if (warningLevel>9) {
+ PreserveInfo *old;
+
+ old = type->preserve;
+ while (old != NULL)
+ {
+ if ((old->indexMods != new->indexMods) ||
+ (old->indexVMods != new->indexVMods))
+ {
+ old = (PreserveInfo *) old->defs.next;
+ continue;
+ }
+ if ((old->preMods == new->preMods)
+ && (old->preVMods == new->preVMods))
+ {
+ if (warningLevel > 9)
+ {
WARN2("Identical definitions for preserve[%s] in %s\n",
- PreserveIndexTxt(type,xkb,old),TypeTxt(type));
+ PreserveIndexTxt(type, xkb, old), TypeTxt(type));
ACTION("Ignored\n");
- }
- return True;
- }
- if (report && (warningLevel>0)) {
- char *str;
- WARN2("Multiple definitions for preserve[%s] in %s\n",
- PreserveIndexTxt(type,xkb,old),TypeTxt(type));
-
- if (clobber) str= PreserveTxt(type,xkb,new);
- else str= PreserveTxt(type,xkb,old);
- ACTION1("Using %s, ",str);
- if (clobber) str= PreserveTxt(type,xkb,old);
- else str= PreserveTxt(type,xkb,new);
- INFO1("ignoring %s\n",str);
- }
- if (clobber) {
- old->preMods= new->preMods;
- old->preVMods= new->preVMods;
- }
- return True;
+ }
+ return True;
+ }
+ if (report && (warningLevel > 0))
+ {
+ char *str;
+ WARN2("Multiple definitions for preserve[%s] in %s\n",
+ PreserveIndexTxt(type, xkb, old), TypeTxt(type));
+
+ if (clobber)
+ str = PreserveTxt(type, xkb, new);
+ else
+ str = PreserveTxt(type, xkb, old);
+ ACTION1("Using %s, ", str);
+ if (clobber)
+ str = PreserveTxt(type, xkb, old);
+ else
+ str = PreserveTxt(type, xkb, new);
+ INFO1("ignoring %s\n", str);
+ }
+ if (clobber)
+ {
+ old->preMods = new->preMods;
+ old->preVMods = new->preVMods;
+ }
+ return True;
}
- old= uTypedAlloc(PreserveInfo);
- if (!old) {
- WSGO1("Couldn't allocate preserve in %s\n",TypeTxt(type));
- ACTION1("Preserve[%s] lost\n",PreserveIndexTxt(type,xkb,old));
- return False;
+ old = uTypedAlloc(PreserveInfo);
+ if (!old)
+ {
+ WSGO1("Couldn't allocate preserve in %s\n", TypeTxt(type));
+ ACTION1("Preserve[%s] lost\n", PreserveIndexTxt(type, xkb, old));
+ return False;
}
- *old= *new;
- old->matchingMapIndex= -1;
- type->preserve=(PreserveInfo*)AddCommonInfo(&type->preserve->defs,&old->defs);
+ *old = *new;
+ old->matchingMapIndex = -1;
+ type->preserve =
+ (PreserveInfo *) AddCommonInfo(&type->preserve->defs, &old->defs);
return True;
}
Bool
-AddMapEntry( XkbDescPtr xkb,
- KeyTypeInfo * type,
- XkbKTMapEntryPtr new,
- Bool clobber,
- Bool report)
+AddMapEntry(XkbDescPtr xkb,
+ KeyTypeInfo * type,
+ XkbKTMapEntryPtr new, Bool clobber, Bool report)
{
-XkbKTMapEntryPtr old;
-
- if ((old=FindMatchingMapEntry(type,new->mods.real_mods,new->mods.vmods))) {
- if (report&&(old->level!=new->level)) {
- unsigned use,ignore;
- if (clobber) {
- use= new->level+1;
- ignore= old->level+1;
- }
- else {
- use= old->level+1;
- ignore= new->level+1;
- }
- WARN2("Multiple map entries for %s in %s\n",
- MapEntryTxt(type,xkb,new),TypeTxt(type));
- ACTION2("Using %d, ignoring %d\n",use,ignore);
- }
- else if (warningLevel>9) {
- WARN3("Multiple occurences of map[%s]= %d in %s\n",
- MapEntryTxt(type,xkb,new),new->level+1,TypeTxt(type));
- ACTION("Ignored\n");
- return True;
- }
- if (clobber)
- old->level= new->level;
- return True;
+ XkbKTMapEntryPtr old;
+
+ if ((old =
+ FindMatchingMapEntry(type, new->mods.real_mods, new->mods.vmods)))
+ {
+ if (report && (old->level != new->level))
+ {
+ unsigned use, ignore;
+ if (clobber)
+ {
+ use = new->level + 1;
+ ignore = old->level + 1;
+ }
+ else
+ {
+ use = old->level + 1;
+ ignore = new->level + 1;
+ }
+ WARN2("Multiple map entries for %s in %s\n",
+ MapEntryTxt(type, xkb, new), TypeTxt(type));
+ ACTION2("Using %d, ignoring %d\n", use, ignore);
+ }
+ else if (warningLevel > 9)
+ {
+ WARN3("Multiple occurences of map[%s]= %d in %s\n",
+ MapEntryTxt(type, xkb, new), new->level + 1, TypeTxt(type));
+ ACTION("Ignored\n");
+ return True;
+ }
+ if (clobber)
+ old->level = new->level;
+ return True;
}
- if ((old=NextMapEntry(type))==NULL)
- return False; /* allocation failure, already reported */
- if (new->level>=type->numLevels)
- type->numLevels= new->level+1;
- if (new->mods.vmods==0) old->active= True;
- else old->active= False;
- old->mods.mask= new->mods.real_mods;
- old->mods.real_mods= new->mods.real_mods;
- old->mods.vmods= new->mods.vmods;
- old->level= new->level;
+ if ((old = NextMapEntry(type)) == NULL)
+ return False; /* allocation failure, already reported */
+ if (new->level >= type->numLevels)
+ type->numLevels = new->level + 1;
+ if (new->mods.vmods == 0)
+ old->active = True;
+ else
+ old->active = False;
+ old->mods.mask = new->mods.real_mods;
+ old->mods.real_mods = new->mods.real_mods;
+ old->mods.vmods = new->mods.vmods;
+ old->level = new->level;
return True;
}
static LookupEntry lnames[] = {
- { "level1", 1 },
- { "level2", 2 },
- { "level3", 3 },
- { "level4", 4 },
- { "level5", 5 },
- { "level6", 6 },
- { "level7", 7 },
- { "level8", 8 },
- { NULL, 0 }
+ {"level1", 1},
+ {"level2", 2},
+ {"level3", 3},
+ {"level4", 4},
+ {"level5", 5},
+ {"level6", 6},
+ {"level7", 7},
+ {"level8", 8},
+ {NULL, 0}
};
static Bool
-SetMapEntry( KeyTypeInfo * type,
- XkbDescPtr xkb,
- ExprDef * arrayNdx,
- ExprDef * value)
+SetMapEntry(KeyTypeInfo * type,
+ XkbDescPtr xkb, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult rtrn;
-XkbKTMapEntryRec entry;
-
- if (arrayNdx==NULL)
- return ReportTypeShouldBeArray(type,"map entry");
- if (!ExprResolveModMask(arrayNdx,&rtrn,LookupVModMask,(XPointer)xkb))
- return ReportTypeBadType(type,"map entry","modifier mask");
- entry.mods.real_mods= rtrn.uval&0xff;
- entry.mods.vmods= (rtrn.uval>>8)&0xffff;
- if ((entry.mods.real_mods&(~type->mask))||
- ((entry.mods.vmods&(~type->vmask))!=0)) {
- if (warningLevel>0) {
- WARN1("Map entry for unused modifiers in %s\n",TypeTxt(type));
- ACTION1("Using %s instead of ",XkbVModMaskText(type->dpy,xkb,
- entry.mods.real_mods&type->mask,
- entry.mods.vmods&type->vmask,
- XkbMessage));
- INFO1("%s\n",MapEntryTxt(type,xkb,&entry));
- }
- entry.mods.real_mods&= type->mask;
- entry.mods.vmods&= type->vmask;
+ ExprResult rtrn;
+ XkbKTMapEntryRec entry;
+
+ if (arrayNdx == NULL)
+ return ReportTypeShouldBeArray(type, "map entry");
+ if (!ExprResolveModMask(arrayNdx, &rtrn, LookupVModMask, (XPointer) xkb))
+ return ReportTypeBadType(type, "map entry", "modifier mask");
+ entry.mods.real_mods = rtrn.uval & 0xff;
+ entry.mods.vmods = (rtrn.uval >> 8) & 0xffff;
+ if ((entry.mods.real_mods & (~type->mask)) ||
+ ((entry.mods.vmods & (~type->vmask)) != 0))
+ {
+ if (warningLevel > 0)
+ {
+ WARN1("Map entry for unused modifiers in %s\n", TypeTxt(type));
+ ACTION1("Using %s instead of ",
+ XkbVModMaskText(type->dpy, xkb,
+ entry.mods.real_mods & type->mask,
+ entry.mods.vmods & type->vmask,
+ XkbMessage));
+ INFO1("%s\n", MapEntryTxt(type, xkb, &entry));
+ }
+ entry.mods.real_mods &= type->mask;
+ entry.mods.vmods &= type->vmask;
}
- if (!ExprResolveInteger(value,&rtrn,SimpleLookup,(XPointer)lnames)) {
- ERROR("Level specifications in a key type must be integer\n");
- ACTION("Ignoring malformed level specification\n");
- return False;
+ if (!ExprResolveInteger(value, &rtrn, SimpleLookup, (XPointer) lnames))
+ {
+ ERROR("Level specifications in a key type must be integer\n");
+ ACTION("Ignoring malformed level specification\n");
+ return False;
}
- if ((rtrn.ival<1)||(rtrn.ival>XkbMaxShiftLevel+1)) {
- ERROR3("Shift level %d out of range (1..%d) in key type %s\n",
- XkbMaxShiftLevel+1,
- rtrn.ival,TypeTxt(type));
- ACTION1("Ignoring illegal definition of map[%s]\n",
- MapEntryTxt(type,xkb,&entry));
- return False;
+ if ((rtrn.ival < 1) || (rtrn.ival > XkbMaxShiftLevel + 1))
+ {
+ ERROR3("Shift level %d out of range (1..%d) in key type %s\n",
+ XkbMaxShiftLevel + 1, rtrn.ival, TypeTxt(type));
+ ACTION1("Ignoring illegal definition of map[%s]\n",
+ MapEntryTxt(type, xkb, &entry));
+ return False;
}
- entry.level= rtrn.ival-1;
- return AddMapEntry(xkb,type,&entry,True,True);
+ entry.level = rtrn.ival - 1;
+ return AddMapEntry(xkb, type, &entry, True, True);
}
static Bool
-SetPreserve( KeyTypeInfo * type,
- XkbDescPtr xkb,
- ExprDef * arrayNdx,
- ExprDef * value)
+SetPreserve(KeyTypeInfo * type,
+ XkbDescPtr xkb, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult rtrn;
-PreserveInfo new;
-
- if (arrayNdx==NULL)
- return ReportTypeShouldBeArray(type,"preserve entry");
- if (!ExprResolveModMask(arrayNdx,&rtrn,LookupVModMask,(XPointer)xkb))
- return ReportTypeBadType(type,"preserve entry","modifier mask");
- new.defs= type->defs;
- new.defs.next= NULL;
- new.indexMods= rtrn.uval&0xff;
- new.indexVMods= (rtrn.uval>>8)&0xffff;
- if ((new.indexMods&(~type->mask))||(new.indexVMods&(~type->vmask))) {
- if (warningLevel>0) {
- WARN1("Preserve for modifiers not used by the %s type\n",
- TypeTxt(type));
- ACTION1("Index %s converted to ",PreserveIndexTxt(type,xkb,&new));
- }
- new.indexMods&= type->mask;
- new.indexVMods&= type->vmask;
- if (warningLevel>0)
- INFO1("%s\n",PreserveIndexTxt(type,xkb,&new));
+ ExprResult rtrn;
+ PreserveInfo new;
+
+ if (arrayNdx == NULL)
+ return ReportTypeShouldBeArray(type, "preserve entry");
+ if (!ExprResolveModMask(arrayNdx, &rtrn, LookupVModMask, (XPointer) xkb))
+ return ReportTypeBadType(type, "preserve entry", "modifier mask");
+ new.defs = type->defs;
+ new.defs.next = NULL;
+ new.indexMods = rtrn.uval & 0xff;
+ new.indexVMods = (rtrn.uval >> 8) & 0xffff;
+ if ((new.indexMods & (~type->mask)) || (new.indexVMods & (~type->vmask)))
+ {
+ if (warningLevel > 0)
+ {
+ WARN1("Preserve for modifiers not used by the %s type\n",
+ TypeTxt(type));
+ ACTION1("Index %s converted to ",
+ PreserveIndexTxt(type, xkb, &new));
+ }
+ new.indexMods &= type->mask;
+ new.indexVMods &= type->vmask;
+ if (warningLevel > 0)
+ INFO1("%s\n", PreserveIndexTxt(type, xkb, &new));
}
- if (!ExprResolveModMask(value,&rtrn,LookupVModMask,(XPointer)xkb)) {
- ERROR("Preserve value in a key type is not a modifier mask\n");
- ACTION2("Ignoring preserve[%s] in type %s\n",
- PreserveIndexTxt(type,xkb,&new),
- TypeTxt(type));
- return False;
+ if (!ExprResolveModMask(value, &rtrn, LookupVModMask, (XPointer) xkb))
+ {
+ ERROR("Preserve value in a key type is not a modifier mask\n");
+ ACTION2("Ignoring preserve[%s] in type %s\n",
+ PreserveIndexTxt(type, xkb, &new), TypeTxt(type));
+ return False;
}
- new.preMods= rtrn.uval&0xff;
- new.preVMods= (rtrn.uval>>16)&0xffff;
- if ((new.preMods&(~new.indexMods))||(new.preVMods&&(~new.indexVMods))) {
- if (warningLevel>0) {
- WARN2("Illegal value for preserve[%s] in type %s\n",
- PreserveTxt(type,xkb,&new),
- TypeTxt(type));
- ACTION1("Converted %s to ",PreserveIndexTxt(type,xkb,&new));
- }
- new.preMods&= new.indexMods;
- new.preVMods&= new.indexVMods;
- if (warningLevel>0) {
- INFO1("%s\n",PreserveIndexTxt(type,xkb,&new));
- }
+ new.preMods = rtrn.uval & 0xff;
+ new.preVMods = (rtrn.uval >> 16) & 0xffff;
+ if ((new.preMods & (~new.indexMods))
+ || (new.preVMods && (~new.indexVMods)))
+ {
+ if (warningLevel > 0)
+ {
+ WARN2("Illegal value for preserve[%s] in type %s\n",
+ PreserveTxt(type, xkb, &new), TypeTxt(type));
+ ACTION1("Converted %s to ", PreserveIndexTxt(type, xkb, &new));
+ }
+ new.preMods &= new.indexMods;
+ new.preVMods &= new.indexVMods;
+ if (warningLevel > 0)
+ {
+ INFO1("%s\n", PreserveIndexTxt(type, xkb, &new));
+ }
}
- return AddPreserve(xkb,type,&new,True,True);
+ return AddPreserve(xkb, type, &new, True, True);
}
/***====================================================================***/
Bool
-AddLevelName( KeyTypeInfo * type,
- unsigned level,
- Atom name,
- Bool clobber,
- Bool report)
+AddLevelName(KeyTypeInfo * type,
+ unsigned level, Atom name, Bool clobber, Bool report)
{
- if ((type->lvlNames==NULL)||(type->szNames<=level)) {
- type->lvlNames=
- uTypedRecalloc(type->lvlNames,type->szNames,level+1,Atom);
- if (type->lvlNames==NULL) {
- ERROR1("Couldn't allocate level names for type %s\n",TypeTxt(type));
- ACTION("Level names lost\n");
- type->szNames= 0;
- return False;
- }
- type->szNames= level+1;
+ if ((type->lvlNames == NULL) || (type->szNames <= level))
+ {
+ type->lvlNames =
+ uTypedRecalloc(type->lvlNames, type->szNames, level + 1, Atom);
+ if (type->lvlNames == NULL)
+ {
+ ERROR1("Couldn't allocate level names for type %s\n",
+ TypeTxt(type));
+ ACTION("Level names lost\n");
+ type->szNames = 0;
+ return False;
+ }
+ type->szNames = level + 1;
}
- else if (type->lvlNames[level]==name) {
- if (warningLevel>9) {
- WARN2("Duplicate names for level %d of key type %s\n",level+1,
- TypeTxt(type));
- ACTION("Ignored\n");
- }
- return True;
+ else if (type->lvlNames[level] == name)
+ {
+ if (warningLevel > 9)
+ {
+ WARN2("Duplicate names for level %d of key type %s\n",
+ level + 1, TypeTxt(type));
+ ACTION("Ignored\n");
+ }
+ return True;
}
- else if (type->lvlNames[level]!=None) {
- if (warningLevel>0) {
- char *old,*new;
- old= XkbAtomText(type->dpy,type->lvlNames[level],XkbMessage);
- new= XkbAtomText(type->dpy,name,XkbMessage);
- WARN2("Multiple names for level %d of key type %s\n",level+1,
- TypeTxt(type));
- if (clobber)
- ACTION2("Using %s, ignoring %s\n",new,old);
- else ACTION2("Using %s, ignoring %s\n",old,new);
- }
- if (!clobber)
- return True;
+ else if (type->lvlNames[level] != None)
+ {
+ if (warningLevel > 0)
+ {
+ char *old, *new;
+ old = XkbAtomText(type->dpy, type->lvlNames[level], XkbMessage);
+ new = XkbAtomText(type->dpy, name, XkbMessage);
+ WARN2("Multiple names for level %d of key type %s\n",
+ level + 1, TypeTxt(type));
+ if (clobber)
+ ACTION2("Using %s, ignoring %s\n", new, old);
+ else
+ ACTION2("Using %s, ignoring %s\n", old, new);
+ }
+ if (!clobber)
+ return True;
}
- if (level>=type->numLevels)
- type->numLevels= level+1;
- type->lvlNames[level]= name;
+ if (level >= type->numLevels)
+ type->numLevels = level + 1;
+ type->lvlNames[level] = name;
return True;
}
static Bool
-SetLevelName(KeyTypeInfo *type,ExprDef *arrayNdx,ExprDef *value)
+SetLevelName(KeyTypeInfo * type, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult rtrn;
-unsigned level;
-
- if (arrayNdx==NULL)
- return ReportTypeShouldBeArray(type,"level name");
- if (!ExprResolveInteger(arrayNdx,&rtrn,SimpleLookup,(XPointer)lnames))
- return ReportTypeBadType(type,"level name","integer");
- if ((rtrn.ival<1)||(rtrn.ival>XkbMaxShiftLevel+1)) {
- ERROR3("Level name %d out of range (1..%d) in key type %s\n",
- rtrn.ival,
- XkbMaxShiftLevel+1,
- XkbAtomText(type->dpy,type->name,XkbMessage));
- ACTION("Ignoring illegal level name definition\n");
- return False;
+ ExprResult rtrn;
+ unsigned level;
+
+ if (arrayNdx == NULL)
+ return ReportTypeShouldBeArray(type, "level name");
+ if (!ExprResolveInteger(arrayNdx, &rtrn, SimpleLookup, (XPointer) lnames))
+ return ReportTypeBadType(type, "level name", "integer");
+ if ((rtrn.ival < 1) || (rtrn.ival > XkbMaxShiftLevel + 1))
+ {
+ ERROR3("Level name %d out of range (1..%d) in key type %s\n",
+ rtrn.ival,
+ XkbMaxShiftLevel + 1,
+ XkbAtomText(type->dpy, type->name, XkbMessage));
+ ACTION("Ignoring illegal level name definition\n");
+ return False;
}
- level= rtrn.ival-1;
- if (!ExprResolveString(value,&rtrn,NULL,NULL)) {
- ERROR2("Non-string name for level %d in key type %s\n",level+1,
- XkbAtomText(type->dpy,type->name,XkbMessage));
- ACTION("Ignoring illegal level name definition\n");
- return False;
+ level = rtrn.ival - 1;
+ if (!ExprResolveString(value, &rtrn, NULL, NULL))
+ {
+ ERROR2("Non-string name for level %d in key type %s\n", level + 1,
+ XkbAtomText(type->dpy, type->name, XkbMessage));
+ ACTION("Ignoring illegal level name definition\n");
+ return False;
}
- return
- AddLevelName(type,level,XkbInternAtom(NULL,rtrn.str,False),True,True);
+ return
+ AddLevelName(type, level, XkbInternAtom(NULL, rtrn.str, False), True,
+ True);
}
/***====================================================================***/
static Bool
-SetKeyTypeField( KeyTypeInfo * type,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- KeyTypesInfo * info)
+SetKeyTypeField(KeyTypeInfo * type,
+ XkbDescPtr xkb,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, KeyTypesInfo * info)
{
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"modifiers")==0) {
- unsigned mods,vmods;
- if (arrayNdx!=NULL) {
- WARN("The modifiers field of a key type is not an array\n");
- ACTION("Illegal array subscript ignored\n");
- }
- if (!ExprResolveModMask(value,&tmp,LookupVModMask,(XPointer)xkb)) {
- ERROR("Key type mask field must be a modifier mask\n");
- ACTION("Key type definition ignored\n");
- return False;
- }
- mods= tmp.uval&0xff;
- vmods= (tmp.uval>>8)&0xffff;
- if (type->defs.defined&_KT_Mask) {
- WARN1("Multiple modifier mask definitions for key type %s\n",
- XkbAtomText(type->dpy,type->name,XkbMessage));
- ACTION1("Using %s, ",TypeMaskTxt(type,xkb));
- INFO1("ignoring %s\n",XkbVModMaskText(type->dpy,xkb,mods,
- vmods,
- XkbMessage));
- return False;
- }
- type->mask= mods;
- type->vmask= vmods;
- type->defs.defined|= _KT_Mask;
- return True;
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "modifiers") == 0)
+ {
+ unsigned mods, vmods;
+ if (arrayNdx != NULL)
+ {
+ WARN("The modifiers field of a key type is not an array\n");
+ ACTION("Illegal array subscript ignored\n");
+ }
+ if (!ExprResolveModMask(value, &tmp, LookupVModMask, (XPointer) xkb))
+ {
+ ERROR("Key type mask field must be a modifier mask\n");
+ ACTION("Key type definition ignored\n");
+ return False;
+ }
+ mods = tmp.uval & 0xff;
+ vmods = (tmp.uval >> 8) & 0xffff;
+ if (type->defs.defined & _KT_Mask)
+ {
+ WARN1("Multiple modifier mask definitions for key type %s\n",
+ XkbAtomText(type->dpy, type->name, XkbMessage));
+ ACTION1("Using %s, ", TypeMaskTxt(type, xkb));
+ INFO1("ignoring %s\n", XkbVModMaskText(type->dpy, xkb, mods,
+ vmods, XkbMessage));
+ return False;
+ }
+ type->mask = mods;
+ type->vmask = vmods;
+ type->defs.defined |= _KT_Mask;
+ return True;
}
- else if (uStrCaseCmp(field,"map")==0) {
- type->defs.defined|= _KT_Map;
- return SetMapEntry(type,xkb,arrayNdx,value);
+ else if (uStrCaseCmp(field, "map") == 0)
+ {
+ type->defs.defined |= _KT_Map;
+ return SetMapEntry(type, xkb, arrayNdx, value);
}
- else if (uStrCaseCmp(field,"preserve")==0) {
- type->defs.defined|= _KT_Preserve;
- return SetPreserve(type,xkb,arrayNdx,value);
+ else if (uStrCaseCmp(field, "preserve") == 0)
+ {
+ type->defs.defined |= _KT_Preserve;
+ return SetPreserve(type, xkb, arrayNdx, value);
}
- else if ((uStrCaseCmp(field,"levelname")==0)||
- (uStrCaseCmp(field,"level_name")==0)) {
- type->defs.defined|= _KT_LevelNames;
- return SetLevelName(type,arrayNdx,value);
+ else if ((uStrCaseCmp(field, "levelname") == 0) ||
+ (uStrCaseCmp(field, "level_name") == 0))
+ {
+ type->defs.defined |= _KT_LevelNames;
+ return SetLevelName(type, arrayNdx, value);
}
- ERROR2("Unknown field %s in key type %s\n",field,TypeTxt(type));
+ ERROR2("Unknown field %s in key type %s\n", field, TypeTxt(type));
ACTION("Definition ignored\n");
return False;
}
static Bool
-HandleKeyTypeVar(VarDef *stmt,XkbDescPtr xkb,KeyTypesInfo *info)
+HandleKeyTypeVar(VarDef * stmt, XkbDescPtr xkb, KeyTypesInfo * info)
{
-ExprResult elem,field;
-ExprDef * arrayNdx;
-
- if (!ExprResolveLhs(stmt->name,&elem,&field,&arrayNdx))
- return False; /* internal error, already reported */
- if (elem.str&&(uStrCaseCmp(elem.str,"type")==0))
- return SetKeyTypeField(&info->dflt,xkb,field.str,arrayNdx,stmt->value,
- info);
- if (elem.str!=NULL) {
- ERROR1("Default for unknown element %s\n",uStringText(elem.str));
- ACTION1("Value for field %s ignored\n",uStringText(field.str));
+ ExprResult elem, field;
+ ExprDef *arrayNdx;
+
+ if (!ExprResolveLhs(stmt->name, &elem, &field, &arrayNdx))
+ return False; /* internal error, already reported */
+ if (elem.str && (uStrCaseCmp(elem.str, "type") == 0))
+ return SetKeyTypeField(&info->dflt, xkb, field.str, arrayNdx,
+ stmt->value, info);
+ if (elem.str != NULL)
+ {
+ ERROR1("Default for unknown element %s\n", uStringText(elem.str));
+ ACTION1("Value for field %s ignored\n", uStringText(field.str));
}
- else if (field.str!=NULL) {
- ERROR1("Default defined for unknown field %s\n",uStringText(field.str));
- ACTION("Ignored\n");
+ else if (field.str != NULL)
+ {
+ ERROR1("Default defined for unknown field %s\n",
+ uStringText(field.str));
+ ACTION("Ignored\n");
}
return False;
}
static int
-HandleKeyTypeBody( VarDef * def,
- XkbDescPtr xkb,
- KeyTypeInfo * type,
- KeyTypesInfo * info)
+HandleKeyTypeBody(VarDef * def,
+ XkbDescPtr xkb, KeyTypeInfo * type, KeyTypesInfo * info)
{
-int ok= 1;
-ExprResult tmp,field;
-ExprDef * arrayNdx;
-
- for (;def!=NULL;def= (VarDef *)def->common.next) {
- if ((def->name)&&(def->name->type==ExprFieldRef)) {
- ok= HandleKeyTypeVar(def,xkb,info);
- continue;
- }
- ok= ExprResolveLhs(def->name,&tmp,&field,&arrayNdx);
- if (ok)
- ok= SetKeyTypeField(type,xkb,field.str,arrayNdx,def->value,info);
+ int ok = 1;
+ ExprResult tmp, field;
+ ExprDef *arrayNdx;
+
+ for (; def != NULL; def = (VarDef *) def->common.next)
+ {
+ if ((def->name) && (def->name->type == ExprFieldRef))
+ {
+ ok = HandleKeyTypeVar(def, xkb, info);
+ continue;
+ }
+ ok = ExprResolveLhs(def->name, &tmp, &field, &arrayNdx);
+ if (ok)
+ ok = SetKeyTypeField(type, xkb, field.str, arrayNdx, def->value,
+ info);
}
return ok;
}
static int
-HandleKeyTypeDef( KeyTypeDef * def,
- XkbDescPtr xkb,
- unsigned merge,
- KeyTypesInfo * info)
+HandleKeyTypeDef(KeyTypeDef * def,
+ XkbDescPtr xkb, unsigned merge, KeyTypesInfo * info)
{
-register int i;
-KeyTypeInfo type;
-
- if (def->merge!=MergeDefault)
- merge= def->merge;
-
- type.defs.defined= 0;
- type.defs.fileID= info->fileID;
- type.defs.merge= merge;
- type.defs.next= 0;
- type.dpy= info->dpy;
- type.name= def->name;
- type.mask= info->dflt.mask;
- type.vmask= info->dflt.vmask;
- type.groupInfo= info->dflt.groupInfo;
- type.numLevels= 1;
- type.nEntries= type.szEntries= 0;
- type.entries= NULL;
- type.szNames= 0;
- type.lvlNames= NULL;
- type.preserve= NULL;
-
- if (!HandleKeyTypeBody(def->body,xkb,&type,info)) {
- info->errorCount++;
- return False;
+ register int i;
+ KeyTypeInfo type;
+
+ if (def->merge != MergeDefault)
+ merge = def->merge;
+
+ type.defs.defined = 0;
+ type.defs.fileID = info->fileID;
+ type.defs.merge = merge;
+ type.defs.next = 0;
+ type.dpy = info->dpy;
+ type.name = def->name;
+ type.mask = info->dflt.mask;
+ type.vmask = info->dflt.vmask;
+ type.groupInfo = info->dflt.groupInfo;
+ type.numLevels = 1;
+ type.nEntries = type.szEntries = 0;
+ type.entries = NULL;
+ type.szNames = 0;
+ type.lvlNames = NULL;
+ type.preserve = NULL;
+
+ if (!HandleKeyTypeBody(def->body, xkb, &type, info))
+ {
+ info->errorCount++;
+ return False;
}
/* now copy any appropriate map, preserve or level names from the */
/* default type */
- for (i=0;i<info->dflt.nEntries;i++) {
- XkbKTMapEntryPtr dflt;
- dflt= &info->dflt.entries[i];
- if (((dflt->mods.real_mods&type.mask)==dflt->mods.real_mods)&&
- ((dflt->mods.vmods&type.vmask)==dflt->mods.vmods)) {
- AddMapEntry(xkb,&type,dflt,False,False);
- }
+ for (i = 0; i < info->dflt.nEntries; i++)
+ {
+ XkbKTMapEntryPtr dflt;
+ dflt = &info->dflt.entries[i];
+ if (((dflt->mods.real_mods & type.mask) == dflt->mods.real_mods) &&
+ ((dflt->mods.vmods & type.vmask) == dflt->mods.vmods))
+ {
+ AddMapEntry(xkb, &type, dflt, False, False);
+ }
}
- if (info->dflt.preserve) {
- PreserveInfo *dflt= info->dflt.preserve;
- while (dflt) {
- if (((dflt->indexMods&type.mask)==dflt->indexMods)&&
- ((dflt->indexVMods&type.vmask)==dflt->indexVMods)) {
- AddPreserve(xkb,&type,dflt,False,False);
- }
- dflt= (PreserveInfo *)dflt->defs.next;
- }
+ if (info->dflt.preserve)
+ {
+ PreserveInfo *dflt = info->dflt.preserve;
+ while (dflt)
+ {
+ if (((dflt->indexMods & type.mask) == dflt->indexMods) &&
+ ((dflt->indexVMods & type.vmask) == dflt->indexVMods))
+ {
+ AddPreserve(xkb, &type, dflt, False, False);
+ }
+ dflt = (PreserveInfo *) dflt->defs.next;
+ }
}
- for (i=0;i<info->dflt.szNames;i++) {
- if ((i<type.numLevels)&&(info->dflt.lvlNames[i]!=None)) {
- AddLevelName(&type,i,info->dflt.lvlNames[i],False,False);
- }
+ for (i = 0; i < info->dflt.szNames; i++)
+ {
+ if ((i < type.numLevels) && (info->dflt.lvlNames[i] != None))
+ {
+ AddLevelName(&type, i, info->dflt.lvlNames[i], False, False);
+ }
}
- if (!AddKeyType(xkb,info,&type)) {
- info->errorCount++;
- return False;
+ if (!AddKeyType(xkb, info, &type))
+ {
+ info->errorCount++;
+ return False;
}
return True;
}
static void
-HandleKeyTypesFile( XkbFile * file,
- XkbDescPtr xkb,
- unsigned merge,
- KeyTypesInfo * info)
+HandleKeyTypesFile(XkbFile * file,
+ XkbDescPtr xkb, unsigned merge, KeyTypesInfo * info)
{
-ParseCommon *stmt;
-
- info->name= uStringDup(file->name);
- stmt= file->defs;
- while (stmt) {
- switch (stmt->stmtType) {
- case StmtInclude:
- if (!HandleIncludeKeyTypes((IncludeStmt *)stmt,xkb,info,
- HandleKeyTypesFile))
- info->errorCount++;
- break;
- case StmtKeyTypeDef:
- if (!HandleKeyTypeDef((KeyTypeDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtVarDef:
- if (!HandleKeyTypeVar((VarDef *)stmt,xkb,info))
- info->errorCount++;
- break;
- case StmtVModDef:
- if (!HandleVModDef((VModDef *)stmt,merge,&info->vmods))
- info->errorCount++;
- break;
- case StmtKeyAliasDef:
- ERROR("Key type files may not include other declarations\n");
- ACTION("Ignoring definition of key alias\n");
- info->errorCount++;
- break;
- case StmtKeycodeDef:
- ERROR("Key type files may not include other declarations\n");
- ACTION("Ignoring definition of key name\n");
- info->errorCount++;
- break;
- case StmtInterpDef:
- ERROR("Key type files may not include other declarations\n");
- ACTION("Ignoring definition of symbol interpretation\n");
- info->errorCount++;
- break;
- default:
- WSGO1("Unexpected statement type %d in HandleKeyTypesFile\n",
- stmt->stmtType);
- break;
- }
- stmt= stmt->next;
- if (info->errorCount>10) {
+ ParseCommon *stmt;
+
+ info->name = uStringDup(file->name);
+ stmt = file->defs;
+ while (stmt)
+ {
+ switch (stmt->stmtType)
+ {
+ case StmtInclude:
+ if (!HandleIncludeKeyTypes((IncludeStmt *) stmt, xkb, info,
+ HandleKeyTypesFile))
+ info->errorCount++;
+ break;
+ case StmtKeyTypeDef:
+ if (!HandleKeyTypeDef((KeyTypeDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtVarDef:
+ if (!HandleKeyTypeVar((VarDef *) stmt, xkb, info))
+ info->errorCount++;
+ break;
+ case StmtVModDef:
+ if (!HandleVModDef((VModDef *) stmt, merge, &info->vmods))
+ info->errorCount++;
+ break;
+ case StmtKeyAliasDef:
+ ERROR("Key type files may not include other declarations\n");
+ ACTION("Ignoring definition of key alias\n");
+ info->errorCount++;
+ break;
+ case StmtKeycodeDef:
+ ERROR("Key type files may not include other declarations\n");
+ ACTION("Ignoring definition of key name\n");
+ info->errorCount++;
+ break;
+ case StmtInterpDef:
+ ERROR("Key type files may not include other declarations\n");
+ ACTION("Ignoring definition of symbol interpretation\n");
+ info->errorCount++;
+ break;
+ default:
+ WSGO1("Unexpected statement type %d in HandleKeyTypesFile\n",
+ stmt->stmtType);
+ break;
+ }
+ stmt = stmt->next;
+ if (info->errorCount > 10)
+ {
#ifdef NOISY
- ERROR("Too many errors\n");
+ ERROR("Too many errors\n");
#endif
- ACTION1("Abandoning keytypes file \"%s\"\n",file->topName);
- break;
- }
+ ACTION1("Abandoning keytypes file \"%s\"\n", file->topName);
+ break;
+ }
}
return;
}
static Bool
-CopyDefToKeyType(XkbDescPtr xkb,XkbKeyTypePtr type,KeyTypeInfo *def)
+CopyDefToKeyType(XkbDescPtr xkb, XkbKeyTypePtr type, KeyTypeInfo * def)
{
-register int i;
-PreserveInfo *pre;
-
- for (pre=def->preserve;pre!=NULL;pre=(PreserveInfo *)pre->defs.next) {
- XkbKTMapEntryPtr match;
- XkbKTMapEntryRec tmp;
- tmp.mods.real_mods= pre->indexMods;
- tmp.mods.vmods= pre->indexVMods;
- tmp.level= 0;
- AddMapEntry(xkb,def,&tmp,False,False);
- match= FindMatchingMapEntry(def,pre->indexMods,pre->indexVMods);
- if (!match) {
- WSGO("Couldn't find matching entry for preserve\n");
- ACTION("Aborting\n");
- return False;
- }
- pre->matchingMapIndex= match-def->entries;
+ register int i;
+ PreserveInfo *pre;
+
+ for (pre = def->preserve; pre != NULL;
+ pre = (PreserveInfo *) pre->defs.next)
+ {
+ XkbKTMapEntryPtr match;
+ XkbKTMapEntryRec tmp;
+ tmp.mods.real_mods = pre->indexMods;
+ tmp.mods.vmods = pre->indexVMods;
+ tmp.level = 0;
+ AddMapEntry(xkb, def, &tmp, False, False);
+ match = FindMatchingMapEntry(def, pre->indexMods, pre->indexVMods);
+ if (!match)
+ {
+ WSGO("Couldn't find matching entry for preserve\n");
+ ACTION("Aborting\n");
+ return False;
+ }
+ pre->matchingMapIndex = match - def->entries;
}
- type->mods.real_mods= def->mask;
- type->mods.vmods= def->vmask;
- type->num_levels= def->numLevels;
- type->map_count= def->nEntries;
- type->map= def->entries;
- if (def->preserve) {
- type->preserve= uTypedCalloc(type->map_count,XkbModsRec);
- if (!type->preserve) {
- WARN("Couldn't allocate preserve array in CopyDefToKeyType\n");
- ACTION1("Preserve setting for type %s lost\n",
- XkbAtomText(def->dpy,def->name,XkbMessage));
- }
- else {
- pre= def->preserve;
- for (;pre!=NULL;pre=(PreserveInfo *)pre->defs.next) {
- int ndx= pre->matchingMapIndex;
- type->preserve[ndx].mask= pre->preMods;
- type->preserve[ndx].real_mods= pre->preMods;
- type->preserve[ndx].vmods= pre->preVMods;
- }
- }
+ type->mods.real_mods = def->mask;
+ type->mods.vmods = def->vmask;
+ type->num_levels = def->numLevels;
+ type->map_count = def->nEntries;
+ type->map = def->entries;
+ if (def->preserve)
+ {
+ type->preserve = uTypedCalloc(type->map_count, XkbModsRec);
+ if (!type->preserve)
+ {
+ WARN("Couldn't allocate preserve array in CopyDefToKeyType\n");
+ ACTION1("Preserve setting for type %s lost\n",
+ XkbAtomText(def->dpy, def->name, XkbMessage));
+ }
+ else
+ {
+ pre = def->preserve;
+ for (; pre != NULL; pre = (PreserveInfo *) pre->defs.next)
+ {
+ int ndx = pre->matchingMapIndex;
+ type->preserve[ndx].mask = pre->preMods;
+ type->preserve[ndx].real_mods = pre->preMods;
+ type->preserve[ndx].vmods = pre->preVMods;
+ }
+ }
}
- else type->preserve= NULL;
- type->name= (Atom)def->name;
- if (def->szNames>0) {
- type->level_names= uTypedCalloc(def->numLevels,Atom);
-
- /* assert def->szNames<=def->numLevels */
- for (i=0;i<def->szNames;i++) {
- type->level_names[i]= (Atom)def->lvlNames[i];
- }
+ else
+ type->preserve = NULL;
+ type->name = (Atom) def->name;
+ if (def->szNames > 0)
+ {
+ type->level_names = uTypedCalloc(def->numLevels, Atom);
+
+ /* assert def->szNames<=def->numLevels */
+ for (i = 0; i < def->szNames; i++)
+ {
+ type->level_names[i] = (Atom) def->lvlNames[i];
+ }
}
- else {
- type->level_names= NULL;
+ else
+ {
+ type->level_names = NULL;
}
- def->nEntries= def->szEntries= 0;
- def->entries= NULL;
- return XkbComputeEffectiveMap(xkb,type,NULL);
+ def->nEntries = def->szEntries = 0;
+ def->entries = NULL;
+ return XkbComputeEffectiveMap(xkb, type, NULL);
}
Bool
-CompileKeyTypes(XkbFile *file,XkbFileInfo *result,unsigned merge)
+CompileKeyTypes(XkbFile * file, XkbFileInfo * result, unsigned merge)
{
-KeyTypesInfo info;
-XkbDescPtr xkb;
-
- xkb= result->xkb;
- InitKeyTypesInfo(&info,xkb,NULL);
- info.fileID= file->id;
- HandleKeyTypesFile(file,xkb,merge,&info);
-
- if (info.errorCount==0) {
- register int i;
- register KeyTypeInfo *def;
- register XkbKeyTypePtr type,next;
-
- if (info.name!=None) {
- if (XkbAllocNames(xkb,XkbTypesNameMask,0,0)==Success)
- xkb->names->types= XkbInternAtom(xkb->dpy,info.name,False);
- else {
- WSGO("Couldn't allocate space for types name\n");
- ACTION2("Name \"%s\" (from %s) NOT assigned\n",scanFile,
- info.name);
- }
- }
- i= info.nTypes;
- if ((info.stdPresent&XkbOneLevelMask)==0)
- i++;
- if ((info.stdPresent&XkbTwoLevelMask)==0)
- i++;
- if ((info.stdPresent&XkbKeypadMask)==0)
- i++;
- if ((info.stdPresent&XkbAlphabeticMask)==0)
- i++;
- if (XkbAllocClientMap(xkb,XkbKeyTypesMask,i)!=Success) {
- WSGO("Couldn't allocate client map\n");
- ACTION("Exiting\n");
- return False;
- }
- xkb->map->num_types= i;
- if (XkbAllRequiredTypes&(~info.stdPresent)) {
- unsigned missing,keypadVMod;
-
- missing= XkbAllRequiredTypes&(~info.stdPresent);
- keypadVMod= FindKeypadVMod(xkb);
- if (XkbInitCanonicalKeyTypes(xkb,missing,keypadVMod)!=Success) {
- WSGO("Couldn't initialize canonical key types\n");
- ACTION("Exiting\n");
- return False;
- }
- if (missing&XkbOneLevelMask)
- xkb->map->types[XkbOneLevelIndex].name= tok_ONE_LEVEL;
- if (missing&XkbTwoLevelMask)
- xkb->map->types[XkbTwoLevelIndex].name= tok_TWO_LEVEL;
- if (missing&XkbAlphabeticMask)
- xkb->map->types[XkbAlphabeticIndex].name= tok_ALPHABETIC;
- if (missing&XkbKeypadMask)
- xkb->map->types[XkbKeypadIndex].name= tok_KEYPAD;
- }
- next= &xkb->map->types[XkbLastRequiredType+1];
- for (i=0,def=info.types;i<info.nTypes;i++) {
- if (def->name==tok_ONE_LEVEL)
- type= &xkb->map->types[XkbOneLevelIndex];
- else if (def->name==tok_TWO_LEVEL)
- type= &xkb->map->types[XkbTwoLevelIndex];
- else if (def->name==tok_ALPHABETIC)
- type= &xkb->map->types[XkbAlphabeticIndex];
- else if (def->name==tok_KEYPAD)
- type= &xkb->map->types[XkbKeypadIndex];
- else type= next++;
- DeleteLevel1MapEntries(def);
- if (!CopyDefToKeyType(xkb,type,def))
- return False;
- def= (KeyTypeInfo *)def->defs.next;
- }
- return True;
+ KeyTypesInfo info;
+ XkbDescPtr xkb;
+
+ xkb = result->xkb;
+ InitKeyTypesInfo(&info, xkb, NULL);
+ info.fileID = file->id;
+ HandleKeyTypesFile(file, xkb, merge, &info);
+
+ if (info.errorCount == 0)
+ {
+ register int i;
+ register KeyTypeInfo *def;
+ register XkbKeyTypePtr type, next;
+
+ if (info.name != None)
+ {
+ if (XkbAllocNames(xkb, XkbTypesNameMask, 0, 0) == Success)
+ xkb->names->types = XkbInternAtom(xkb->dpy, info.name, False);
+ else
+ {
+ WSGO("Couldn't allocate space for types name\n");
+ ACTION2("Name \"%s\" (from %s) NOT assigned\n",
+ scanFile, info.name);
+ }
+ }
+ i = info.nTypes;
+ if ((info.stdPresent & XkbOneLevelMask) == 0)
+ i++;
+ if ((info.stdPresent & XkbTwoLevelMask) == 0)
+ i++;
+ if ((info.stdPresent & XkbKeypadMask) == 0)
+ i++;
+ if ((info.stdPresent & XkbAlphabeticMask) == 0)
+ i++;
+ if (XkbAllocClientMap(xkb, XkbKeyTypesMask, i) != Success)
+ {
+ WSGO("Couldn't allocate client map\n");
+ ACTION("Exiting\n");
+ return False;
+ }
+ xkb->map->num_types = i;
+ if (XkbAllRequiredTypes & (~info.stdPresent))
+ {
+ unsigned missing, keypadVMod;
+
+ missing = XkbAllRequiredTypes & (~info.stdPresent);
+ keypadVMod = FindKeypadVMod(xkb);
+ if (XkbInitCanonicalKeyTypes(xkb, missing, keypadVMod) != Success)
+ {
+ WSGO("Couldn't initialize canonical key types\n");
+ ACTION("Exiting\n");
+ return False;
+ }
+ if (missing & XkbOneLevelMask)
+ xkb->map->types[XkbOneLevelIndex].name = tok_ONE_LEVEL;
+ if (missing & XkbTwoLevelMask)
+ xkb->map->types[XkbTwoLevelIndex].name = tok_TWO_LEVEL;
+ if (missing & XkbAlphabeticMask)
+ xkb->map->types[XkbAlphabeticIndex].name = tok_ALPHABETIC;
+ if (missing & XkbKeypadMask)
+ xkb->map->types[XkbKeypadIndex].name = tok_KEYPAD;
+ }
+ next = &xkb->map->types[XkbLastRequiredType + 1];
+ for (i = 0, def = info.types; i < info.nTypes; i++)
+ {
+ if (def->name == tok_ONE_LEVEL)
+ type = &xkb->map->types[XkbOneLevelIndex];
+ else if (def->name == tok_TWO_LEVEL)
+ type = &xkb->map->types[XkbTwoLevelIndex];
+ else if (def->name == tok_ALPHABETIC)
+ type = &xkb->map->types[XkbAlphabeticIndex];
+ else if (def->name == tok_KEYPAD)
+ type = &xkb->map->types[XkbKeypadIndex];
+ else
+ type = next++;
+ DeleteLevel1MapEntries(def);
+ if (!CopyDefToKeyType(xkb, type, def))
+ return False;
+ def = (KeyTypeInfo *) def->defs.next;
+ }
+ return True;
}
return False;
}
-
diff --git a/listing.c b/listing.c
index 1c53a7a..5502633 100644
--- a/listing.c
+++ b/listing.c
@@ -141,184 +141,211 @@ SOFTWARE.
#define lowbit(x) ((x) & (-(x)))
-static int szListing= 0;
-static int nListed= 0;
-static int nFilesListed= 0;
+static int szListing = 0;
+static int nListed = 0;
+static int nFilesListed = 0;
-typedef struct _Listing {
- char * file;
- char * map;
+typedef struct _Listing
+{
+ char *file;
+ char *map;
} Listing;
-static int szMapOnly;
-static int nMapOnly;
-static char ** mapOnly;
+static int szMapOnly;
+static int nMapOnly;
+static char **mapOnly;
-static Listing * list= NULL;
+static Listing *list = NULL;
/***====================================================================***/
int
AddMapOnly(char *map)
{
- if (nMapOnly>=szMapOnly) {
- if (szMapOnly<1) szMapOnly= 5;
- else szMapOnly*= 2;
- mapOnly= uTypedRealloc(list,szMapOnly,char *);
- if (!mapOnly) {
- WSGO("Couldn't allocate list of maps\n");
- return 0;
- }
+ if (nMapOnly >= szMapOnly)
+ {
+ if (szMapOnly < 1)
+ szMapOnly = 5;
+ else
+ szMapOnly *= 2;
+ mapOnly = uTypedRealloc(list, szMapOnly, char *);
+ if (!mapOnly)
+ {
+ WSGO("Couldn't allocate list of maps\n");
+ return 0;
+ }
}
- mapOnly[nMapOnly++]= map;
+ mapOnly[nMapOnly++] = map;
return 1;
}
int
-AddListing(char *file,char *map)
+AddListing(char *file, char *map)
{
- if (nListed>=szListing) {
- if (szListing<1) szListing= 10;
- else szListing*= 2;
- list= uTypedRealloc(list,szListing,Listing);
- if (!list) {
- WSGO("Couldn't allocate list of files and maps\n");
- ACTION("Exiting\n");
- exit(1);
- }
+ if (nListed >= szListing)
+ {
+ if (szListing < 1)
+ szListing = 10;
+ else
+ szListing *= 2;
+ list = uTypedRealloc(list, szListing, Listing);
+ if (!list)
+ {
+ WSGO("Couldn't allocate list of files and maps\n");
+ ACTION("Exiting\n");
+ exit(1);
+ }
}
- list[nListed].file= file;
- list[nListed].map= map;
+ list[nListed].file = file;
+ list[nListed].map = map;
nListed++;
- if (file!=NULL)
- nFilesListed++;
+ if (file != NULL)
+ nFilesListed++;
return 1;
}
/***====================================================================***/
static void
-ListFile(FILE *outFile,char *fileName,XkbFile *map)
+ListFile(FILE * outFile, char *fileName, XkbFile * map)
{
-register unsigned flags;
-char * mapName;
-
- flags= map->flags;
- if ((flags&XkbLC_Hidden)&&(!(verboseLevel&WantHiddenMaps)))
- return;
- if ((flags&XkbLC_Partial)&&(!(verboseLevel&WantPartialMaps)))
- return;
- if (verboseLevel&WantLongListing) {
- fprintf(outFile,(flags&XkbLC_Hidden)?"h":"-");
- fprintf(outFile,(flags&XkbLC_Default)?"d":"-");
- fprintf(outFile,(flags&XkbLC_Partial)?"p":"-");
- fprintf(outFile,"----- ");
- if (map->type==XkmSymbolsIndex) {
- fprintf(outFile,(flags&XkbLC_AlphanumericKeys)?"a":"-");
- fprintf(outFile,(flags&XkbLC_ModifierKeys)?"m":"-");
- fprintf(outFile,(flags&XkbLC_KeypadKeys)?"k":"-");
- fprintf(outFile,(flags&XkbLC_FunctionKeys)?"f":"-");
- fprintf(outFile,(flags&XkbLC_AlternateGroup)?"g":"-");
- fprintf(outFile,"--- ");
- }
- else fprintf(outFile,"-------- ");
+ register unsigned flags;
+ char *mapName;
+
+ flags = map->flags;
+ if ((flags & XkbLC_Hidden) && (!(verboseLevel & WantHiddenMaps)))
+ return;
+ if ((flags & XkbLC_Partial) && (!(verboseLevel & WantPartialMaps)))
+ return;
+ if (verboseLevel & WantLongListing)
+ {
+ fprintf(outFile, (flags & XkbLC_Hidden) ? "h" : "-");
+ fprintf(outFile, (flags & XkbLC_Default) ? "d" : "-");
+ fprintf(outFile, (flags & XkbLC_Partial) ? "p" : "-");
+ fprintf(outFile, "----- ");
+ if (map->type == XkmSymbolsIndex)
+ {
+ fprintf(outFile, (flags & XkbLC_AlphanumericKeys) ? "a" : "-");
+ fprintf(outFile, (flags & XkbLC_ModifierKeys) ? "m" : "-");
+ fprintf(outFile, (flags & XkbLC_KeypadKeys) ? "k" : "-");
+ fprintf(outFile, (flags & XkbLC_FunctionKeys) ? "f" : "-");
+ fprintf(outFile, (flags & XkbLC_AlternateGroup) ? "g" : "-");
+ fprintf(outFile, "--- ");
+ }
+ else
+ fprintf(outFile, "-------- ");
}
- mapName= map->name;
- if ((!(verboseLevel&WantFullNames))&&((flags&XkbLC_Default)!=0))
- mapName= NULL;
- if (dirsToStrip>0) {
- char *tmp,*last;
- int i;
- for (i=0,tmp=last=fileName;(i<dirsToStrip)&&tmp;i++) {
- last= tmp;
- tmp= strchr(tmp,'/');
- if (tmp!=NULL)
- tmp++;
- }
- fileName= (tmp?tmp:last);
+ mapName = map->name;
+ if ((!(verboseLevel & WantFullNames)) && ((flags & XkbLC_Default) != 0))
+ mapName = NULL;
+ if (dirsToStrip > 0)
+ {
+ char *tmp, *last;
+ int i;
+ for (i = 0, tmp = last = fileName; (i < dirsToStrip) && tmp; i++)
+ {
+ last = tmp;
+ tmp = strchr(tmp, '/');
+ if (tmp != NULL)
+ tmp++;
+ }
+ fileName = (tmp ? tmp : last);
}
if (mapName)
- fprintf(outFile,"%s(%s)\n",fileName,mapName);
- else fprintf(outFile,"%s\n",fileName);
+ fprintf(outFile, "%s(%s)\n", fileName, mapName);
+ else
+ fprintf(outFile, "%s\n", fileName);
return;
}
/***====================================================================***/
static int
-AddDirectory(char *head,char *ptrn,char *rest,char *map)
+AddDirectory(char *head, char *ptrn, char *rest, char *map)
{
#ifdef WIN32
- HANDLE dirh;
- WIN32_FIND_DATA file;
+ HANDLE dirh;
+ WIN32_FIND_DATA file;
#else
- DIR *dirp;
- struct dirent *file;
+ DIR *dirp;
+ struct dirent *file;
#endif
- int nMatch;
-
- if (map==NULL) {
- char *tmp = ptrn;
- if ((rest==NULL)&&(ptrn!=NULL)&&(strchr(ptrn,'/')==NULL)) {
- tmp= ptrn;
- map= strchr(ptrn,'(');
- }
- else if ((rest==NULL)&&(ptrn==NULL)&&
- (head!=NULL)&&(strchr(head,'/')==NULL)) {
- tmp= head;
- map= strchr(head,'(');
- }
- if (map!=NULL) {
- tmp= strchr(tmp,')');
- if ((tmp==NULL)||(tmp[1]!='\0')) {
- ERROR1("File and map must have the format file(map)\n");
- return 0;
- }
- *map= '\0'; map++;
- *tmp= '\0';
- }
+ int nMatch;
+
+ if (map == NULL)
+ {
+ char *tmp = ptrn;
+ if ((rest == NULL) && (ptrn != NULL) && (strchr(ptrn, '/') == NULL))
+ {
+ tmp = ptrn;
+ map = strchr(ptrn, '(');
+ }
+ else if ((rest == NULL) && (ptrn == NULL) &&
+ (head != NULL) && (strchr(head, '/') == NULL))
+ {
+ tmp = head;
+ map = strchr(head, '(');
+ }
+ if (map != NULL)
+ {
+ tmp = strchr(tmp, ')');
+ if ((tmp == NULL) || (tmp[1] != '\0'))
+ {
+ ERROR1("File and map must have the format file(map)\n");
+ return 0;
+ }
+ *map = '\0';
+ map++;
+ *tmp = '\0';
+ }
}
#ifdef WIN32
if ((dirh = FindFirstFile("*.*", &file)) == INVALID_HANDLE_VALUE)
- return 0;
+ return 0;
#else
- if ((dirp = opendir ((head?head:"."))) == NULL)
- return 0;
- nMatch= 0;
+ if ((dirp = opendir((head ? head : "."))) == NULL)
+ return 0;
+ nMatch = 0;
#endif
#ifdef WIN32
do
#else
- while ((file = readdir (dirp)) != NULL)
+ while ((file = readdir(dirp)) != NULL)
#endif
{
- char *tmp,*filename;
- struct stat sbuf;
-
- filename= FileName(file);
- if (!filename || filename[0]=='.')
- continue;
- if (ptrn && (!XkbNameMatchesPattern(filename,ptrn)))
- continue;
- tmp= (char *)uAlloc((head?strlen(head):0)+strlen(filename)+2);
- if (!tmp)
- continue;
- sprintf(tmp,"%s%s%s",(head?head:""),(head?"/":""),filename);
- if (stat(tmp,&sbuf)<0) {
- uFree(tmp);
- continue;
- }
- if (((rest!=NULL)&&(!S_ISDIR(sbuf.st_mode)))||
- ((map!=NULL)&&(S_ISDIR(sbuf.st_mode)))) {
- uFree(tmp);
- continue;
- }
- if (S_ISDIR(sbuf.st_mode)) {
- if ((rest!=NULL)||(verboseLevel&ListRecursive))
- nMatch+= AddDirectory(tmp,rest,NULL,map);
- }
- else nMatch+= AddListing(tmp,map);
+ char *tmp, *filename;
+ struct stat sbuf;
+
+ filename = FileName(file);
+ if (!filename || filename[0] == '.')
+ continue;
+ if (ptrn && (!XkbNameMatchesPattern(filename, ptrn)))
+ continue;
+ tmp =
+ (char *) uAlloc((head ? strlen(head) : 0) + strlen(filename) + 2);
+ if (!tmp)
+ continue;
+ sprintf(tmp, "%s%s%s", (head ? head : ""), (head ? "/" : ""),
+ filename);
+ if (stat(tmp, &sbuf) < 0)
+ {
+ uFree(tmp);
+ continue;
+ }
+ if (((rest != NULL) && (!S_ISDIR(sbuf.st_mode))) ||
+ ((map != NULL) && (S_ISDIR(sbuf.st_mode))))
+ {
+ uFree(tmp);
+ continue;
+ }
+ if (S_ISDIR(sbuf.st_mode))
+ {
+ if ((rest != NULL) || (verboseLevel & ListRecursive))
+ nMatch += AddDirectory(tmp, rest, NULL, map);
+ }
+ else
+ nMatch += AddListing(tmp, map);
}
#ifdef WIN32
while (FindNextFile(dirh, &file));
@@ -331,42 +358,53 @@ AddDirectory(char *head,char *ptrn,char *rest,char *map)
Bool
AddMatchingFiles(char *head_in)
{
-char *str,*head,*ptrn,*rest= NULL;
-
- if (head_in==NULL)
- return 0;
- ptrn= NULL;
- for (str=head_in;(*str!='\0')&&(*str!='?')&&(*str!='*');str++) {
- if ((str!=head_in)&&(*str=='/'))
- ptrn= str;
+ char *str, *head, *ptrn, *rest = NULL;
+
+ if (head_in == NULL)
+ return 0;
+ ptrn = NULL;
+ for (str = head_in; (*str != '\0') && (*str != '?') && (*str != '*');
+ str++)
+ {
+ if ((str != head_in) && (*str == '/'))
+ ptrn = str;
}
- if (*str=='\0') { /* no wildcards */
- head= head_in;
- ptrn= NULL;
- rest= NULL;
+ if (*str == '\0')
+ { /* no wildcards */
+ head = head_in;
+ ptrn = NULL;
+ rest = NULL;
}
- else if (ptrn==NULL) { /* no slash before the first wildcard */
- head= NULL;
- ptrn= head_in;
+ else if (ptrn == NULL)
+ { /* no slash before the first wildcard */
+ head = NULL;
+ ptrn = head_in;
}
- else { /* slash followed by wildcard */
- head= head_in;
- *ptrn= '\0'; ptrn++;
+ else
+ { /* slash followed by wildcard */
+ head = head_in;
+ *ptrn = '\0';
+ ptrn++;
}
- if (ptrn) {
- rest= strchr(ptrn,'/');
- if (rest!=NULL) {
- *rest= '\0';
- rest++;
- }
+ if (ptrn)
+ {
+ rest = strchr(ptrn, '/');
+ if (rest != NULL)
+ {
+ *rest = '\0';
+ rest++;
+ }
}
- if(((rest && ptrn)&&((strchr(ptrn,'(')!=NULL)||(strchr(ptrn,')')!=NULL)))||
- (head && ((strchr(head,'(')!=NULL)||(strchr(head,')')!=NULL)))) {
- ERROR1("Files/maps to list must have the form file(map)\n");
- ACTION("Illegal specifier ignored\n");
- return 0;
+ if (((rest && ptrn)
+ && ((strchr(ptrn, '(') != NULL) || (strchr(ptrn, ')') != NULL)))
+ || (head
+ && ((strchr(head, '(') != NULL) || (strchr(head, ')') != NULL))))
+ {
+ ERROR1("Files/maps to list must have the form file(map)\n");
+ ACTION("Illegal specifier ignored\n");
+ return 0;
}
- return AddDirectory(head,ptrn,rest,NULL);
+ return AddDirectory(head, ptrn, rest, NULL);
}
/***====================================================================***/
@@ -374,15 +412,16 @@ char *str,*head,*ptrn,*rest= NULL;
static Bool
MapMatches(char *mapToConsider, char *ptrn)
{
-int i;
-
- if (ptrn!=NULL)
- return XkbNameMatchesPattern(mapToConsider,ptrn);
- if (nMapOnly<1)
- return True;
- for (i=0;i<nMapOnly;i++) {
- if (XkbNameMatchesPattern(mapToConsider,mapOnly[i]))
- return True;
+ int i;
+
+ if (ptrn != NULL)
+ return XkbNameMatchesPattern(mapToConsider, ptrn);
+ if (nMapOnly < 1)
+ return True;
+ for (i = 0; i < nMapOnly; i++)
+ {
+ if (XkbNameMatchesPattern(mapToConsider, mapOnly[i]))
+ return True;
}
return False;
}
@@ -390,70 +429,81 @@ int i;
int
GenerateListing(char *out_name)
{
-int i;
-FILE * inputFile,*outFile;
-XkbFile * rtrn,*mapToUse;
-unsigned oldWarningLevel;
-char * mapName;
-
- if (nFilesListed<1) {
- ERROR1("Must specify at least one file or pattern to list\n");
- return 0;
+ int i;
+ FILE *inputFile, *outFile;
+ XkbFile *rtrn, *mapToUse;
+ unsigned oldWarningLevel;
+ char *mapName;
+
+ if (nFilesListed < 1)
+ {
+ ERROR1("Must specify at least one file or pattern to list\n");
+ return 0;
}
- if ((!out_name)||((out_name[0]=='-')&&(out_name[1]=='\0')))
- outFile= stdout;
- else if ((outFile=fopen(out_name,"w"))==NULL) {
- ERROR1("Cannot open \"%s\" to write keyboard description\n",out_name);
- ACTION("Exiting\n");
- return 0;
+ if ((!out_name) || ((out_name[0] == '-') && (out_name[1] == '\0')))
+ outFile = stdout;
+ else if ((outFile = fopen(out_name, "w")) == NULL)
+ {
+ ERROR1("Cannot open \"%s\" to write keyboard description\n",
+ out_name);
+ ACTION("Exiting\n");
+ return 0;
}
#ifdef DEBUG
- if (warningLevel>9)
- fprintf(stderr,"should list:\n");
+ if (warningLevel > 9)
+ fprintf(stderr, "should list:\n");
#endif
- for (i=0;i<nListed;i++) {
+ for (i = 0; i < nListed; i++)
+ {
#ifdef DEBUG
- if (warningLevel>9) {
- fprintf(stderr,"%s(%s)\n",(list[i].file?list[i].file:"*"),
- (list[i].map?list[i].map:"*"));
- }
+ if (warningLevel > 9)
+ {
+ fprintf(stderr, "%s(%s)\n",
+ (list[i].file ? list[i].file : "*"),
+ (list[i].map ? list[i].map : "*"));
+ }
#endif
- oldWarningLevel= warningLevel;
- warningLevel= 0;
- if (list[i].file) {
- struct stat sbuf;
-
- if (stat(list[i].file,&sbuf)<0) {
- if (oldWarningLevel>5)
- WARN1("Couldn't open \"%s\"\n",list[i].file);
- continue;
- }
- if (S_ISDIR(sbuf.st_mode)) {
- if (verboseLevel&ListRecursive)
- AddDirectory(list[i].file,NULL,NULL,NULL);
- continue;
- }
-
- inputFile= fopen(list[i].file,"r");
- if (!inputFile) {
- if (oldWarningLevel>5)
- WARN1("Couldn't open \"%s\"\n",list[i].file);
- continue;
- }
- setScanState(list[i].file, 1);
- if (XKBParseFile(inputFile,&rtrn)&&(rtrn!=NULL)) {
- mapName= list[i].map;
- mapToUse= rtrn;
- for (;mapToUse;mapToUse= (XkbFile *)mapToUse->common.next) {
- if (!MapMatches(mapToUse->name,mapName))
- continue;
- ListFile(outFile,list[i].file,mapToUse);
- }
- }
- fclose(inputFile);
- }
- warningLevel= oldWarningLevel;
+ oldWarningLevel = warningLevel;
+ warningLevel = 0;
+ if (list[i].file)
+ {
+ struct stat sbuf;
+
+ if (stat(list[i].file, &sbuf) < 0)
+ {
+ if (oldWarningLevel > 5)
+ WARN1("Couldn't open \"%s\"\n", list[i].file);
+ continue;
+ }
+ if (S_ISDIR(sbuf.st_mode))
+ {
+ if (verboseLevel & ListRecursive)
+ AddDirectory(list[i].file, NULL, NULL, NULL);
+ continue;
+ }
+
+ inputFile = fopen(list[i].file, "r");
+ if (!inputFile)
+ {
+ if (oldWarningLevel > 5)
+ WARN1("Couldn't open \"%s\"\n", list[i].file);
+ continue;
+ }
+ setScanState(list[i].file, 1);
+ if (XKBParseFile(inputFile, &rtrn) && (rtrn != NULL))
+ {
+ mapName = list[i].map;
+ mapToUse = rtrn;
+ for (; mapToUse; mapToUse = (XkbFile *) mapToUse->common.next)
+ {
+ if (!MapMatches(mapToUse->name, mapName))
+ continue;
+ ListFile(outFile, list[i].file, mapToUse);
+ }
+ }
+ fclose(inputFile);
+ }
+ warningLevel = oldWarningLevel;
}
return 1;
}
-
diff --git a/misc.c b/misc.c
index 052e246..ceae7f5 100644
--- a/misc.c
+++ b/misc.c
@@ -37,72 +37,79 @@
/***====================================================================***/
Bool
-ProcessIncludeFile( IncludeStmt * stmt,
- unsigned file_type,
- XkbFile ** file_rtrn,
- unsigned * merge_rtrn)
+ProcessIncludeFile(IncludeStmt * stmt,
+ unsigned file_type,
+ XkbFile ** file_rtrn, unsigned *merge_rtrn)
{
-FILE *file;
-XkbFile *rtrn,*mapToUse;
-char oldFile[1024];
-int oldLine = lineNum;
-
- rtrn= XkbFindFileInCache(stmt->file,file_type,&stmt->path);
- if (rtrn==NULL) {
- file= XkbFindFileInPath(stmt->file,file_type,&stmt->path);
- if (file==NULL) {
- ERROR2("Can't find file \"%s\" for %s include\n",stmt->file,
- XkbDirectoryForInclude(file_type));
- ACTION("Exiting\n");
- return False;
- }
- strcpy(oldFile,scanFile);
- oldLine= lineNum;
- setScanState(stmt->file,1);
- if (debugFlags&2)
- INFO1("About to parse include file %s\n",stmt->file);
- if ((XKBParseFile(file,&rtrn)==0)||(rtrn==NULL)) {
- setScanState(oldFile,oldLine);
- ERROR1("Error interpreting include file \"%s\"\n",stmt->file);
- ACTION("Exiting\n");
- fclose(file);
- return False;
- }
- fclose(file);
- XkbAddFileToCache(stmt->file,file_type,stmt->path,rtrn);
+ FILE *file;
+ XkbFile *rtrn, *mapToUse;
+ char oldFile[1024];
+ int oldLine = lineNum;
+
+ rtrn = XkbFindFileInCache(stmt->file, file_type, &stmt->path);
+ if (rtrn == NULL)
+ {
+ file = XkbFindFileInPath(stmt->file, file_type, &stmt->path);
+ if (file == NULL)
+ {
+ ERROR2("Can't find file \"%s\" for %s include\n", stmt->file,
+ XkbDirectoryForInclude(file_type));
+ ACTION("Exiting\n");
+ return False;
+ }
+ strcpy(oldFile, scanFile);
+ oldLine = lineNum;
+ setScanState(stmt->file, 1);
+ if (debugFlags & 2)
+ INFO1("About to parse include file %s\n", stmt->file);
+ if ((XKBParseFile(file, &rtrn) == 0) || (rtrn == NULL))
+ {
+ setScanState(oldFile, oldLine);
+ ERROR1("Error interpreting include file \"%s\"\n", stmt->file);
+ ACTION("Exiting\n");
+ fclose(file);
+ return False;
+ }
+ fclose(file);
+ XkbAddFileToCache(stmt->file, file_type, stmt->path, rtrn);
}
- mapToUse= rtrn;
- if (stmt->map!=NULL) {
- while ((mapToUse)&&((!uStringEqual(mapToUse->name,stmt->map))||
- (mapToUse->type!=file_type))) {
- mapToUse= (XkbFile *)mapToUse->common.next;
- }
- if (!mapToUse) {
- ERROR3("No %s named \"%s\" in the include file \"%s\"\n",
- XkbConfigText(file_type,XkbMessage),
- stmt->map,stmt->file);
- ACTION("Exiting\n");
- return False;
- }
+ mapToUse = rtrn;
+ if (stmt->map != NULL)
+ {
+ while ((mapToUse) && ((!uStringEqual(mapToUse->name, stmt->map)) ||
+ (mapToUse->type != file_type)))
+ {
+ mapToUse = (XkbFile *) mapToUse->common.next;
+ }
+ if (!mapToUse)
+ {
+ ERROR3("No %s named \"%s\" in the include file \"%s\"\n",
+ XkbConfigText(file_type, XkbMessage), stmt->map,
+ stmt->file);
+ ACTION("Exiting\n");
+ return False;
+ }
}
- else if ((rtrn->common.next!=NULL)&&(warningLevel>5)) {
- WARN1("No map in include statement, but \"%s\" contains several\n",
- stmt->file);
- ACTION1("Using first defined map, \"%s\"\n",rtrn->name);
+ else if ((rtrn->common.next != NULL) && (warningLevel > 5))
+ {
+ WARN1("No map in include statement, but \"%s\" contains several\n",
+ stmt->file);
+ ACTION1("Using first defined map, \"%s\"\n", rtrn->name);
}
- setScanState(oldFile,oldLine);
- if (mapToUse->type!=file_type) {
- ERROR2("Include file wrong type (expected %s, got %s)\n",
- XkbConfigText(file_type,XkbMessage),
- XkbConfigText(mapToUse->type,XkbMessage));
- ACTION1("Include file \"%s\" ignored\n",stmt->file);
- return False;
+ setScanState(oldFile, oldLine);
+ if (mapToUse->type != file_type)
+ {
+ ERROR2("Include file wrong type (expected %s, got %s)\n",
+ XkbConfigText(file_type, XkbMessage),
+ XkbConfigText(mapToUse->type, XkbMessage));
+ ACTION1("Include file \"%s\" ignored\n", stmt->file);
+ return False;
}
/* FIXME: we have to check recursive includes here (or somewhere) */
- mapToUse->compiled= True;
- *file_rtrn= mapToUse;
- *merge_rtrn= stmt->merge;
+ mapToUse->compiled = True;
+ *file_rtrn = mapToUse;
+ *merge_rtrn = stmt->merge;
return True;
}
@@ -111,16 +118,16 @@ int oldLine = lineNum;
int
ReportNotArray(const char *type, const char *field, const char *name)
{
- ERROR2("The %s %s field is not an array\n",type,field);
- ACTION1("Ignoring illegal assignment in %s\n",name);
+ ERROR2("The %s %s field is not an array\n", type, field);
+ ACTION1("Ignoring illegal assignment in %s\n", name);
return False;
}
int
ReportShouldBeArray(const char *type, const char *field, char *name)
{
- ERROR2("Missing subscript for %s %s\n",type,field);
- ACTION1("Ignoring illegal assignment in %s\n",name);
+ ERROR2("Missing subscript for %s %s\n", type, field);
+ ACTION1("Ignoring illegal assignment in %s\n", name);
return False;
}
@@ -128,373 +135,414 @@ int
ReportBadType(const char *type, const char *field,
const char *name, const char *wanted)
{
- ERROR3("The %s %s field must be a %s\n",type,field,wanted);
- ACTION1("Ignoring illegal assignment in %s\n",name);
+ ERROR3("The %s %s field must be a %s\n", type, field, wanted);
+ ACTION1("Ignoring illegal assignment in %s\n", name);
return False;
}
int
-ReportBadIndexType(char *type,char *field,char *name,char *wanted)
+ReportBadIndexType(char *type, char *field, char *name, char *wanted)
{
- ERROR3("Index for the %s %s field must be a %s\n",type,field,wanted);
- ACTION1("Ignoring assignment to illegal field in %s\n",name);
+ ERROR3("Index for the %s %s field must be a %s\n", type, field, wanted);
+ ACTION1("Ignoring assignment to illegal field in %s\n", name);
return False;
}
int
ReportBadField(const char *type, const char *field, const char *name)
{
- ERROR3("Unknown %s field %s in %s\n",type,field,name);
- ACTION1("Ignoring assignment to unknown field in %s\n",name);
+ ERROR3("Unknown %s field %s in %s\n", type, field, name);
+ ACTION1("Ignoring assignment to unknown field in %s\n", name);
return False;
}
int
-ReportMultipleDefs(char *type,char *field,char *name)
+ReportMultipleDefs(char *type, char *field, char *name)
{
- WARN3("Multiple definitions of %s in %s \"%s\"\n",field,type,name);
+ WARN3("Multiple definitions of %s in %s \"%s\"\n", field, type, name);
ACTION("Using last definition\n");
return False;
}
/***====================================================================***/
-Bool
-UseNewField( unsigned field,
- CommonInfo * oldDefs,
- CommonInfo * newDefs,
- unsigned * pCollide)
+Bool
+UseNewField(unsigned field,
+ CommonInfo * oldDefs, CommonInfo * newDefs, unsigned *pCollide)
{
-Bool useNew;
-
- useNew= False;
- if (oldDefs->defined&field) {
- if (newDefs->defined&field) {
- if (((oldDefs->fileID==newDefs->fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- *pCollide|= field;
- }
- if (newDefs->merge!=MergeAugment)
- useNew= True;
- }
+ Bool useNew;
+
+ useNew = False;
+ if (oldDefs->defined & field)
+ {
+ if (newDefs->defined & field)
+ {
+ if (((oldDefs->fileID == newDefs->fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ *pCollide |= field;
+ }
+ if (newDefs->merge != MergeAugment)
+ useNew = True;
+ }
}
- else if (newDefs->defined&field)
- useNew= True;
+ else if (newDefs->defined & field)
+ useNew = True;
return useNew;
}
-Bool
-MergeNewField( unsigned field,
- CommonInfo * oldDefs,
- CommonInfo * newDefs,
- unsigned * pCollide)
+Bool
+MergeNewField(unsigned field,
+ CommonInfo * oldDefs, CommonInfo * newDefs, unsigned *pCollide)
{
- if ((oldDefs->defined&field)&&(newDefs->defined&field)) {
- if (((oldDefs->fileID==newDefs->fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- *pCollide|= field;
- }
- if (newDefs->merge==MergeAugment)
- return True;
+ if ((oldDefs->defined & field) && (newDefs->defined & field))
+ {
+ if (((oldDefs->fileID == newDefs->fileID) && (warningLevel > 0)) ||
+ (warningLevel > 9))
+ {
+ *pCollide |= field;
+ }
+ if (newDefs->merge == MergeAugment)
+ return True;
}
return False;
}
XPointer
-ClearCommonInfo(CommonInfo *cmn)
+ClearCommonInfo(CommonInfo * cmn)
{
- if (cmn!=NULL) {
- CommonInfo *this,*next;
- for (this=cmn;this!=NULL;this=next) {
- next= this->next;
- uFree(this);
- }
+ if (cmn != NULL)
+ {
+ CommonInfo *this, *next;
+ for (this = cmn; this != NULL; this = next)
+ {
+ next = this->next;
+ uFree(this);
+ }
}
return NULL;
}
XPointer
-AddCommonInfo(CommonInfo *old,CommonInfo *new)
+AddCommonInfo(CommonInfo * old, CommonInfo * new)
{
-CommonInfo * first;
+ CommonInfo *first;
- first= old;
- while ( old && old->next ) {
- old= old->next;
+ first = old;
+ while (old && old->next)
+ {
+ old = old->next;
}
- new->next= NULL;
- if (old) {
- old->next= new;
- return (XPointer)first;
+ new->next = NULL;
+ if (old)
+ {
+ old->next = new;
+ return (XPointer) first;
}
- return (XPointer)new;
+ return (XPointer) new;
}
/***====================================================================***/
-typedef struct _KeyNameDesc {
- KeySym level1;
- KeySym level2;
- char name[5];
- Bool used;
+typedef struct _KeyNameDesc
+{
+ KeySym level1;
+ KeySym level2;
+ char name[5];
+ Bool used;
} KeyNameDesc;
KeyNameDesc dfltKeys[] = {
- { XK_Escape, NoSymbol, "ESC\0" },
- { XK_quoteleft, XK_asciitilde, "TLDE" },
- { XK_1, XK_exclam, "AE01" },
- { XK_2, XK_at, "AE02" },
- { XK_3, XK_numbersign, "AE03" },
- { XK_4, XK_dollar, "AE04" },
- { XK_5, XK_percent, "AE05" },
- { XK_6, XK_asciicircum, "AE06" },
- { XK_7, XK_ampersand, "AE07" },
- { XK_8, XK_asterisk, "AE08" },
- { XK_9, XK_parenleft, "AE09" },
- { XK_0, XK_parenright, "AE10" },
- { XK_minus, XK_underscore, "AE11" },
- { XK_equal, XK_plus, "AE12" },
- { XK_BackSpace, NoSymbol, "BKSP" },
- { XK_Tab, NoSymbol, "TAB\0" },
- { XK_q, XK_Q, "AD01" },
- { XK_w, XK_W, "AD02" },
- { XK_e, XK_E, "AD03" },
- { XK_r, XK_R, "AD04" },
- { XK_t, XK_T, "AD05" },
- { XK_y, XK_Y, "AD06" },
- { XK_u, XK_U, "AD07" },
- { XK_i, XK_I, "AD08" },
- { XK_o, XK_O, "AD09" },
- { XK_p, XK_P, "AD10" },
- { XK_bracketleft, XK_braceleft, "AD11" },
- { XK_bracketright,XK_braceright, "AD12" },
- { XK_Return, NoSymbol, "RTRN" },
- { XK_Caps_Lock, NoSymbol, "CAPS" },
- { XK_a, XK_A, "AC01" },
- { XK_s, XK_S, "AC02" },
- { XK_d, XK_D, "AC03" },
- { XK_f, XK_F, "AC04" },
- { XK_g, XK_G, "AC05" },
- { XK_h, XK_H, "AC06" },
- { XK_j, XK_J, "AC07" },
- { XK_k, XK_K, "AC08" },
- { XK_l, XK_L, "AC09" },
- { XK_semicolon, XK_colon, "AC10" },
- { XK_quoteright, XK_quotedbl, "AC11" },
- { XK_Shift_L, NoSymbol, "LFSH" },
- { XK_z, XK_Z, "AB01" },
- { XK_x, XK_X, "AB02" },
- { XK_c, XK_C, "AB03" },
- { XK_v, XK_V, "AB04" },
- { XK_b, XK_B, "AB05" },
- { XK_n, XK_N, "AB06" },
- { XK_m, XK_M, "AB07" },
- { XK_comma, XK_less, "AB08" },
- { XK_period, XK_greater, "AB09" },
- { XK_slash, XK_question, "AB10" },
- { XK_backslash, XK_bar, "BKSL" },
- { XK_Control_L, NoSymbol, "LCTL" },
- { XK_space, NoSymbol, "SPCE" },
- { XK_Shift_R, NoSymbol, "RTSH" },
- { XK_Alt_L, NoSymbol, "LALT" },
- { XK_space, NoSymbol, "SPCE" },
- { XK_Control_R, NoSymbol, "RCTL" },
- { XK_Alt_R, NoSymbol, "RALT" },
- { XK_F1, NoSymbol, "FK01" },
- { XK_F2, NoSymbol, "FK02" },
- { XK_F3, NoSymbol, "FK03" },
- { XK_F4, NoSymbol, "FK04" },
- { XK_F5, NoSymbol, "FK05" },
- { XK_F6, NoSymbol, "FK06" },
- { XK_F7, NoSymbol, "FK07" },
- { XK_F8, NoSymbol, "FK08" },
- { XK_F9, NoSymbol, "FK09" },
- { XK_F10, NoSymbol, "FK10" },
- { XK_F11, NoSymbol, "FK11" },
- { XK_F12, NoSymbol, "FK12" },
- { XK_Print, NoSymbol, "PRSC" },
- { XK_Scroll_Lock, NoSymbol, "SCLK" },
- { XK_Pause, NoSymbol, "PAUS" },
- { XK_Insert, NoSymbol, "INS\0" },
- { XK_Home, NoSymbol, "HOME" },
- { XK_Prior, NoSymbol, "PGUP" },
- { XK_Delete, NoSymbol, "DELE" },
- { XK_End, NoSymbol, "END" },
- { XK_Next, NoSymbol, "PGDN" },
- { XK_Up, NoSymbol, "UP\0\0" },
- { XK_Left, NoSymbol, "LEFT" },
- { XK_Down, NoSymbol, "DOWN" },
- { XK_Right, NoSymbol, "RGHT" },
- { XK_Num_Lock, NoSymbol, "NMLK" },
- { XK_KP_Divide, NoSymbol, "KPDV" },
- { XK_KP_Multiply, NoSymbol, "KPMU" },
- { XK_KP_Subtract, NoSymbol, "KPSU" },
- { NoSymbol, XK_KP_7, "KP7\0" },
- { NoSymbol, XK_KP_8, "KP8\0" },
- { NoSymbol, XK_KP_9, "KP9\0" },
- { XK_KP_Add, NoSymbol, "KPAD" },
- { NoSymbol, XK_KP_4, "KP4\0" },
- { NoSymbol, XK_KP_5, "KP5\0" },
- { NoSymbol, XK_KP_6, "KP6\0" },
- { NoSymbol, XK_KP_1, "KP1\0" },
- { NoSymbol, XK_KP_2, "KP2\0" },
- { NoSymbol, XK_KP_3, "KP3\0" },
- { XK_KP_Enter, NoSymbol, "KPEN" },
- { NoSymbol, XK_KP_0, "KP0\0" },
- { XK_KP_Delete, NoSymbol, "KPDL" },
- { XK_less, XK_greater, "LSGT" },
- { XK_KP_Separator,NoSymbol, "KPCO" },
- { XK_Find, NoSymbol, "FIND" },
- { NoSymbol, NoSymbol, "\0\0\0\0" }
+ {XK_Escape, NoSymbol, "ESC\0"},
+ {XK_quoteleft, XK_asciitilde, "TLDE"},
+ {XK_1, XK_exclam, "AE01"},
+ {XK_2, XK_at, "AE02"},
+ {XK_3, XK_numbersign, "AE03"},
+ {XK_4, XK_dollar, "AE04"},
+ {XK_5, XK_percent, "AE05"},
+ {XK_6, XK_asciicircum, "AE06"},
+ {XK_7, XK_ampersand, "AE07"},
+ {XK_8, XK_asterisk, "AE08"},
+ {XK_9, XK_parenleft, "AE09"},
+ {XK_0, XK_parenright, "AE10"},
+ {XK_minus, XK_underscore, "AE11"},
+ {XK_equal, XK_plus, "AE12"},
+ {XK_BackSpace, NoSymbol, "BKSP"},
+ {XK_Tab, NoSymbol, "TAB\0"},
+ {XK_q, XK_Q, "AD01"},
+ {XK_w, XK_W, "AD02"},
+ {XK_e, XK_E, "AD03"},
+ {XK_r, XK_R, "AD04"},
+ {XK_t, XK_T, "AD05"},
+ {XK_y, XK_Y, "AD06"},
+ {XK_u, XK_U, "AD07"},
+ {XK_i, XK_I, "AD08"},
+ {XK_o, XK_O, "AD09"},
+ {XK_p, XK_P, "AD10"},
+ {XK_bracketleft, XK_braceleft, "AD11"},
+ {XK_bracketright, XK_braceright, "AD12"},
+ {XK_Return, NoSymbol, "RTRN"},
+ {XK_Caps_Lock, NoSymbol, "CAPS"},
+ {XK_a, XK_A, "AC01"},
+ {XK_s, XK_S, "AC02"},
+ {XK_d, XK_D, "AC03"},
+ {XK_f, XK_F, "AC04"},
+ {XK_g, XK_G, "AC05"},
+ {XK_h, XK_H, "AC06"},
+ {XK_j, XK_J, "AC07"},
+ {XK_k, XK_K, "AC08"},
+ {XK_l, XK_L, "AC09"},
+ {XK_semicolon, XK_colon, "AC10"},
+ {XK_quoteright, XK_quotedbl, "AC11"},
+ {XK_Shift_L, NoSymbol, "LFSH"},
+ {XK_z, XK_Z, "AB01"},
+ {XK_x, XK_X, "AB02"},
+ {XK_c, XK_C, "AB03"},
+ {XK_v, XK_V, "AB04"},
+ {XK_b, XK_B, "AB05"},
+ {XK_n, XK_N, "AB06"},
+ {XK_m, XK_M, "AB07"},
+ {XK_comma, XK_less, "AB08"},
+ {XK_period, XK_greater, "AB09"},
+ {XK_slash, XK_question, "AB10"},
+ {XK_backslash, XK_bar, "BKSL"},
+ {XK_Control_L, NoSymbol, "LCTL"},
+ {XK_space, NoSymbol, "SPCE"},
+ {XK_Shift_R, NoSymbol, "RTSH"},
+ {XK_Alt_L, NoSymbol, "LALT"},
+ {XK_space, NoSymbol, "SPCE"},
+ {XK_Control_R, NoSymbol, "RCTL"},
+ {XK_Alt_R, NoSymbol, "RALT"},
+ {XK_F1, NoSymbol, "FK01"},
+ {XK_F2, NoSymbol, "FK02"},
+ {XK_F3, NoSymbol, "FK03"},
+ {XK_F4, NoSymbol, "FK04"},
+ {XK_F5, NoSymbol, "FK05"},
+ {XK_F6, NoSymbol, "FK06"},
+ {XK_F7, NoSymbol, "FK07"},
+ {XK_F8, NoSymbol, "FK08"},
+ {XK_F9, NoSymbol, "FK09"},
+ {XK_F10, NoSymbol, "FK10"},
+ {XK_F11, NoSymbol, "FK11"},
+ {XK_F12, NoSymbol, "FK12"},
+ {XK_Print, NoSymbol, "PRSC"},
+ {XK_Scroll_Lock, NoSymbol, "SCLK"},
+ {XK_Pause, NoSymbol, "PAUS"},
+ {XK_Insert, NoSymbol, "INS\0"},
+ {XK_Home, NoSymbol, "HOME"},
+ {XK_Prior, NoSymbol, "PGUP"},
+ {XK_Delete, NoSymbol, "DELE"},
+ {XK_End, NoSymbol, "END"},
+ {XK_Next, NoSymbol, "PGDN"},
+ {XK_Up, NoSymbol, "UP\0\0"},
+ {XK_Left, NoSymbol, "LEFT"},
+ {XK_Down, NoSymbol, "DOWN"},
+ {XK_Right, NoSymbol, "RGHT"},
+ {XK_Num_Lock, NoSymbol, "NMLK"},
+ {XK_KP_Divide, NoSymbol, "KPDV"},
+ {XK_KP_Multiply, NoSymbol, "KPMU"},
+ {XK_KP_Subtract, NoSymbol, "KPSU"},
+ {NoSymbol, XK_KP_7, "KP7\0"},
+ {NoSymbol, XK_KP_8, "KP8\0"},
+ {NoSymbol, XK_KP_9, "KP9\0"},
+ {XK_KP_Add, NoSymbol, "KPAD"},
+ {NoSymbol, XK_KP_4, "KP4\0"},
+ {NoSymbol, XK_KP_5, "KP5\0"},
+ {NoSymbol, XK_KP_6, "KP6\0"},
+ {NoSymbol, XK_KP_1, "KP1\0"},
+ {NoSymbol, XK_KP_2, "KP2\0"},
+ {NoSymbol, XK_KP_3, "KP3\0"},
+ {XK_KP_Enter, NoSymbol, "KPEN"},
+ {NoSymbol, XK_KP_0, "KP0\0"},
+ {XK_KP_Delete, NoSymbol, "KPDL"},
+ {XK_less, XK_greater, "LSGT"},
+ {XK_KP_Separator, NoSymbol, "KPCO"},
+ {XK_Find, NoSymbol, "FIND"},
+ {NoSymbol, NoSymbol, "\0\0\0\0"}
};
Status
ComputeKbdDefaults(XkbDescPtr xkb)
{
-Status rtrn;
-register int i,tmp,nUnknown;
-KeyNameDesc * name;
-KeySym * syms;
-
- if ((xkb->names==NULL)||(xkb->names->keys==NULL)) {
- if ((rtrn=XkbAllocNames(xkb,XkbKeyNamesMask,0,0))!=Success)
- return rtrn;
+ Status rtrn;
+ register int i, tmp, nUnknown;
+ KeyNameDesc *name;
+ KeySym *syms;
+
+ if ((xkb->names == NULL) || (xkb->names->keys == NULL))
+ {
+ if ((rtrn = XkbAllocNames(xkb, XkbKeyNamesMask, 0, 0)) != Success)
+ return rtrn;
}
- for (name=dfltKeys;(name->name[0]!='\0');name++) {
- name->used= False;
+ for (name = dfltKeys; (name->name[0] != '\0'); name++)
+ {
+ name->used = False;
}
- nUnknown= 0;
- for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) {
- tmp= XkbKeyNumSyms(xkb,i);
- if ((xkb->names->keys[i].name[0]=='\0')&&(tmp>0)) {
- tmp= XkbKeyGroupsWidth(xkb,i);
- syms= XkbKeySymsPtr(xkb,i);
- for (name=dfltKeys;(name->name[0]!='\0');name++) {
- Bool match= True;
- if (((name->level1!=syms[0])&&(name->level1!=NoSymbol))||
- ((name->level2!=NoSymbol)&&(tmp<2))||
- ((name->level2!=syms[1])&&(name->level2!=NoSymbol))) {
- match= False;
- }
- if (match) {
- if (!name->used) {
- memcpy(xkb->names->keys[i].name,name->name,
- XkbKeyNameLength);
- name->used= True;
- }
- else {
- if (warningLevel>2) {
- WARN1("Several keys match pattern for %s\n",
- XkbKeyNameText(name->name,XkbMessage));
- ACTION2("Using <U%03d> for key %d\n",nUnknown,i);
- }
- sprintf(xkb->names->keys[i].name,"U%03d",nUnknown++);
- }
- break;
- }
- }
- if (xkb->names->keys[i].name[0]=='\0') {
- if (warningLevel>2) {
- WARN1("Key %d does not match any defaults\n",i);
- ACTION1("Using name <U%03d>\n",nUnknown);
- sprintf(xkb->names->keys[i].name,"U%03d",nUnknown++);
- }
- }
- }
+ nUnknown = 0;
+ for (i = xkb->min_key_code; i <= xkb->max_key_code; i++)
+ {
+ tmp = XkbKeyNumSyms(xkb, i);
+ if ((xkb->names->keys[i].name[0] == '\0') && (tmp > 0))
+ {
+ tmp = XkbKeyGroupsWidth(xkb, i);
+ syms = XkbKeySymsPtr(xkb, i);
+ for (name = dfltKeys; (name->name[0] != '\0'); name++)
+ {
+ Bool match = True;
+ if (((name->level1 != syms[0])
+ && (name->level1 != NoSymbol))
+ || ((name->level2 != NoSymbol) && (tmp < 2))
+ || ((name->level2 != syms[1])
+ && (name->level2 != NoSymbol)))
+ {
+ match = False;
+ }
+ if (match)
+ {
+ if (!name->used)
+ {
+ memcpy(xkb->names->keys[i].name, name->name,
+ XkbKeyNameLength);
+ name->used = True;
+ }
+ else
+ {
+ if (warningLevel > 2)
+ {
+ WARN1
+ ("Several keys match pattern for %s\n",
+ XkbKeyNameText(name->name, XkbMessage));
+ ACTION2("Using <U%03d> for key %d\n",
+ nUnknown, i);
+ }
+ sprintf(xkb->names->keys[i].name, "U%03d",
+ nUnknown++);
+ }
+ break;
+ }
+ }
+ if (xkb->names->keys[i].name[0] == '\0')
+ {
+ if (warningLevel > 2)
+ {
+ WARN1("Key %d does not match any defaults\n", i);
+ ACTION1("Using name <U%03d>\n", nUnknown);
+ sprintf(xkb->names->keys[i].name, "U%03d", nUnknown++);
+ }
+ }
+ }
}
return Success;
}
Bool
-FindNamedKey( XkbDescPtr xkb,
- unsigned long name,
- unsigned int * kc_rtrn,
- Bool use_aliases,
- Bool create,
- int start_from)
+FindNamedKey(XkbDescPtr xkb,
+ unsigned long name,
+ unsigned int *kc_rtrn,
+ Bool use_aliases, Bool create, int start_from)
{
-register unsigned n;
+ register unsigned n;
- if (start_from<xkb->min_key_code) {
- start_from= xkb->min_key_code;
+ if (start_from < xkb->min_key_code)
+ {
+ start_from = xkb->min_key_code;
}
- else if (start_from>xkb->max_key_code) {
- return False;
+ else if (start_from > xkb->max_key_code)
+ {
+ return False;
}
- *kc_rtrn= 0; /* some callers rely on this */
- if (xkb&&xkb->names&&xkb->names->keys) {
- for (n=start_from;n<=xkb->max_key_code;n++) {
- unsigned long tmp;
- tmp= KeyNameToLong(xkb->names->keys[n].name);
- if (tmp==name) {
- *kc_rtrn= n;
- return True;
- }
- }
- if (use_aliases) {
- unsigned long new_name;
- if (FindKeyNameForAlias(xkb,name,&new_name))
- return FindNamedKey(xkb,new_name,kc_rtrn,False,create,0);
- }
+ *kc_rtrn = 0; /* some callers rely on this */
+ if (xkb && xkb->names && xkb->names->keys)
+ {
+ for (n = start_from; n <= xkb->max_key_code; n++)
+ {
+ unsigned long tmp;
+ tmp = KeyNameToLong(xkb->names->keys[n].name);
+ if (tmp == name)
+ {
+ *kc_rtrn = n;
+ return True;
+ }
+ }
+ if (use_aliases)
+ {
+ unsigned long new_name;
+ if (FindKeyNameForAlias(xkb, name, &new_name))
+ return FindNamedKey(xkb, new_name, kc_rtrn, False, create, 0);
+ }
}
- if (create) {
- if ((!xkb->names)||(!xkb->names->keys)) {
- if (xkb->min_key_code<XkbMinLegalKeyCode) {
- xkb->min_key_code= XkbMinLegalKeyCode;
- xkb->max_key_code= XkbMaxLegalKeyCode;
- }
- if (XkbAllocNames(xkb,XkbKeyNamesMask,0,0)!=Success) {
- if (warningLevel>0) {
- WARN("Couldn't allocate key names in FindNamedKey\n");
- ACTION1("Key \"%s\" not automatically created\n",
- longText(name,XkbMessage));
- }
- return False;
- }
- }
- for (n=xkb->min_key_code;n<=xkb->max_key_code;n++) {
- if (xkb->names->keys[n].name[0]=='\0') {
- char buf[XkbKeyNameLength+1];
- LongToKeyName(name,buf);
- memcpy(xkb->names->keys[n].name,buf,XkbKeyNameLength);
- *kc_rtrn= n;
- return True;
- }
- }
+ if (create)
+ {
+ if ((!xkb->names) || (!xkb->names->keys))
+ {
+ if (xkb->min_key_code < XkbMinLegalKeyCode)
+ {
+ xkb->min_key_code = XkbMinLegalKeyCode;
+ xkb->max_key_code = XkbMaxLegalKeyCode;
+ }
+ if (XkbAllocNames(xkb, XkbKeyNamesMask, 0, 0) != Success)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Couldn't allocate key names in FindNamedKey\n");
+ ACTION1("Key \"%s\" not automatically created\n",
+ longText(name, XkbMessage));
+ }
+ return False;
+ }
+ }
+ for (n = xkb->min_key_code; n <= xkb->max_key_code; n++)
+ {
+ if (xkb->names->keys[n].name[0] == '\0')
+ {
+ char buf[XkbKeyNameLength + 1];
+ LongToKeyName(name, buf);
+ memcpy(xkb->names->keys[n].name, buf, XkbKeyNameLength);
+ *kc_rtrn = n;
+ return True;
+ }
+ }
}
return False;
}
Bool
-FindKeyNameForAlias(XkbDescPtr xkb,unsigned long lname,unsigned long *real_name)
+FindKeyNameForAlias(XkbDescPtr xkb, unsigned long lname,
+ unsigned long *real_name)
{
-register int i;
-char name[XkbKeyNameLength+1];
-
- if (xkb&&xkb->geom&&xkb->geom->key_aliases) {
- XkbKeyAliasPtr a;
- a= xkb->geom->key_aliases;
- LongToKeyName(lname,name);
- name[XkbKeyNameLength]= '\0';
- for (i=0;i<xkb->geom->num_key_aliases;i++,a++) {
- if (strncmp(name,a->alias,XkbKeyNameLength)==0) {
- *real_name= KeyNameToLong(a->real);
- return True;
- }
- }
+ register int i;
+ char name[XkbKeyNameLength + 1];
+
+ if (xkb && xkb->geom && xkb->geom->key_aliases)
+ {
+ XkbKeyAliasPtr a;
+ a = xkb->geom->key_aliases;
+ LongToKeyName(lname, name);
+ name[XkbKeyNameLength] = '\0';
+ for (i = 0; i < xkb->geom->num_key_aliases; i++, a++)
+ {
+ if (strncmp(name, a->alias, XkbKeyNameLength) == 0)
+ {
+ *real_name = KeyNameToLong(a->real);
+ return True;
+ }
+ }
}
- if (xkb&&xkb->names&&xkb->names->key_aliases) {
- XkbKeyAliasPtr a;
- a= xkb->names->key_aliases;
- LongToKeyName(lname,name);
- name[XkbKeyNameLength]= '\0';
- for (i=0;i<xkb->names->num_key_aliases;i++,a++) {
- if (strncmp(name,a->alias,XkbKeyNameLength)==0) {
- *real_name= KeyNameToLong(a->real);
- return True;
- }
- }
+ if (xkb && xkb->names && xkb->names->key_aliases)
+ {
+ XkbKeyAliasPtr a;
+ a = xkb->names->key_aliases;
+ LongToKeyName(lname, name);
+ name[XkbKeyNameLength] = '\0';
+ for (i = 0; i < xkb->names->num_key_aliases; i++, a++)
+ {
+ if (strncmp(name, a->alias, XkbKeyNameLength) == 0)
+ {
+ *real_name = KeyNameToLong(a->real);
+ return True;
+ }
+ }
}
return False;
}
diff --git a/misc.h b/misc.h
index ac5b84e..4fa4b6d 100644
--- a/misc.h
+++ b/misc.h
@@ -27,98 +27,85 @@
#ifndef MISC_H
#define MISC_H 1
-typedef struct _CommonInfo {
- unsigned short defined;
- unsigned char fileID;
- unsigned char merge;
- struct _CommonInfo * next;
+typedef struct _CommonInfo
+{
+ unsigned short defined;
+ unsigned char fileID;
+ unsigned char merge;
+ struct _CommonInfo *next;
} CommonInfo;
-extern Bool UseNewField(
- unsigned /* field */,
- CommonInfo * /* oldDefs */,
- CommonInfo * /* newDefs */,
- unsigned * /* pCollide */
-);
-
-extern Bool MergeNewField(
- unsigned /* field */,
- CommonInfo * /* oldDefs */,
- CommonInfo * /* newDefs */,
- unsigned * /* pCollide */
-);
-
-extern XPointer ClearCommonInfo(
- CommonInfo * /* cmn */
-);
-
-extern XPointer AddCommonInfo(
- CommonInfo * /* old */,
- CommonInfo * /* new */
-);
-
-extern int ReportNotArray(
- const char * /* type */,
- const char * /* field */,
- const char * /* name */
-);
-
-extern int ReportShouldBeArray(
- const char * /* type */,
- const char * /* field */,
- char * /* name */
-);
-
-extern int ReportBadType(
- const char * /* type */,
- const char * /* field */,
- const char * /* name */,
- const char * /* wanted */
-);
-
-extern int ReportBadIndexType(
- char * /* type */,
- char * /* field */,
- char * /* name */,
- char * /* wanted */
-);
-
-extern int ReportBadField(
- const char * /* type */,
- const char * /* field */,
- const char * /* name */
-);
-
-extern int ReportMultipleDefs(
- char * /* type */,
- char * /* field */,
- char * /* which */
-);
-
-extern Bool ProcessIncludeFile(
- IncludeStmt * /* stmt */,
- unsigned /* file_type */,
- XkbFile ** /* file_rtrn */,
- unsigned * /* merge_rtrn */
-);
-
-extern Status ComputeKbdDefaults(
- XkbDescPtr /* xkb */
-);
-
-extern Bool FindNamedKey(
- XkbDescPtr /* xkb */,
- unsigned long /* name */,
- unsigned int * /* kc_rtrn */,
- Bool /* use_aliases */,
- Bool /* create */,
- int /* start_from */
-);
-
-extern Bool FindKeyNameForAlias(
- XkbDescPtr /* xkb */,
- unsigned long /* lname */,
- unsigned long * /* real_name */
-);
+extern Bool UseNewField(unsigned /* field */ ,
+ CommonInfo * /* oldDefs */ ,
+ CommonInfo * /* newDefs */ ,
+ unsigned * /* pCollide */
+ );
+
+extern Bool MergeNewField(unsigned /* field */ ,
+ CommonInfo * /* oldDefs */ ,
+ CommonInfo * /* newDefs */ ,
+ unsigned * /* pCollide */
+ );
+
+extern XPointer ClearCommonInfo(CommonInfo * /* cmn */
+ );
+
+extern XPointer AddCommonInfo(CommonInfo * /* old */ ,
+ CommonInfo * /* new */
+ );
+
+extern int ReportNotArray(const char * /* type */ ,
+ const char * /* field */ ,
+ const char * /* name */
+ );
+
+extern int ReportShouldBeArray(const char * /* type */ ,
+ const char * /* field */ ,
+ char * /* name */
+ );
+
+extern int ReportBadType(const char * /* type */ ,
+ const char * /* field */ ,
+ const char * /* name */ ,
+ const char * /* wanted */
+ );
+
+extern int ReportBadIndexType(char * /* type */ ,
+ char * /* field */ ,
+ char * /* name */ ,
+ char * /* wanted */
+ );
+
+extern int ReportBadField(const char * /* type */ ,
+ const char * /* field */ ,
+ const char * /* name */
+ );
+
+extern int ReportMultipleDefs(char * /* type */ ,
+ char * /* field */ ,
+ char * /* which */
+ );
+
+extern Bool ProcessIncludeFile(IncludeStmt * /* stmt */ ,
+ unsigned /* file_type */ ,
+ XkbFile ** /* file_rtrn */ ,
+ unsigned * /* merge_rtrn */
+ );
+
+extern Status ComputeKbdDefaults(XkbDescPtr /* xkb */
+ );
+
+extern Bool FindNamedKey(XkbDescPtr /* xkb */ ,
+ unsigned long /* name */ ,
+ unsigned int * /* kc_rtrn */ ,
+ Bool /* use_aliases */ ,
+ Bool /* create */ ,
+ int /* start_from */
+ );
+
+extern Bool FindKeyNameForAlias(XkbDescPtr /* xkb */ ,
+ unsigned long /* lname */ ,
+ unsigned long * /* real_name */
+ );
#endif /* MISC_H */
diff --git a/parseutils.c b/parseutils.c
index 76b95ce..6adcdfd 100644
--- a/parseutils.c
+++ b/parseutils.c
@@ -32,329 +32,361 @@
#include <X11/extensions/XKBgeom.h>
#include <X11/Xalloca.h>
-XkbFile *rtrnValue;
+XkbFile *rtrnValue;
ParseCommon *
-AppendStmt(ParseCommon *to,ParseCommon *append)
+AppendStmt(ParseCommon * to, ParseCommon * append)
{
-ParseCommon *start= to;
+ ParseCommon *start = to;
- if (append==NULL)
- return to;
- while ((to!=NULL) && (to->next!=NULL)) {
- to= to->next;
+ if (append == NULL)
+ return to;
+ while ((to != NULL) && (to->next != NULL))
+ {
+ to = to->next;
}
- if (to) {
- to->next= append;
- return start;
+ if (to)
+ {
+ to->next = append;
+ return start;
}
return append;
}
ExprDef *
-ExprCreate(unsigned op,unsigned type)
-{
-ExprDef *expr;
- expr= uTypedAlloc(ExprDef);
- if (expr) {
- expr->common.stmtType= StmtExpr;
- expr->common.next= NULL;
- expr->op= op;
- expr->type= type;
- }
- else {
- FATAL("Couldn't allocate expression in parser\n");
- /* NOTREACHED */
+ExprCreate(unsigned op, unsigned type)
+{
+ ExprDef *expr;
+ expr = uTypedAlloc(ExprDef);
+ if (expr)
+ {
+ expr->common.stmtType = StmtExpr;
+ expr->common.next = NULL;
+ expr->op = op;
+ expr->type = type;
+ }
+ else
+ {
+ FATAL("Couldn't allocate expression in parser\n");
+ /* NOTREACHED */
}
return expr;
}
ExprDef *
-ExprCreateUnary(unsigned op,unsigned type,ExprDef *child)
-{
-ExprDef *expr;
- expr= uTypedAlloc(ExprDef);
- if (expr) {
- expr->common.stmtType= StmtExpr;
- expr->common.next= NULL;
- expr->op= op;
- expr->type= type;
- expr->value.child= child;
- }
- else {
- FATAL("Couldn't allocate expression in parser\n");
- /* NOTREACHED */
+ExprCreateUnary(unsigned op, unsigned type, ExprDef * child)
+{
+ ExprDef *expr;
+ expr = uTypedAlloc(ExprDef);
+ if (expr)
+ {
+ expr->common.stmtType = StmtExpr;
+ expr->common.next = NULL;
+ expr->op = op;
+ expr->type = type;
+ expr->value.child = child;
+ }
+ else
+ {
+ FATAL("Couldn't allocate expression in parser\n");
+ /* NOTREACHED */
}
return expr;
}
ExprDef *
-ExprCreateBinary(unsigned op,ExprDef *left,ExprDef *right)
-{
-ExprDef *expr;
- expr= uTypedAlloc(ExprDef);
- if (expr) {
- expr->common.stmtType= StmtExpr;
- expr->common.next= NULL;
- expr->op= op;
- if ((op==OpAssign)||(left->type==TypeUnknown))
- expr->type= right->type;
- else if ((left->type==right->type)||(right->type==TypeUnknown))
- expr->type= left->type;
- else expr->type= TypeUnknown;
- expr->value.binary.left= left;
- expr->value.binary.right= right;
- }
- else {
- FATAL("Couldn't allocate expression in parser\n");
- /* NOTREACHED */
+ExprCreateBinary(unsigned op, ExprDef * left, ExprDef * right)
+{
+ ExprDef *expr;
+ expr = uTypedAlloc(ExprDef);
+ if (expr)
+ {
+ expr->common.stmtType = StmtExpr;
+ expr->common.next = NULL;
+ expr->op = op;
+ if ((op == OpAssign) || (left->type == TypeUnknown))
+ expr->type = right->type;
+ else if ((left->type == right->type) || (right->type == TypeUnknown))
+ expr->type = left->type;
+ else
+ expr->type = TypeUnknown;
+ expr->value.binary.left = left;
+ expr->value.binary.right = right;
+ }
+ else
+ {
+ FATAL("Couldn't allocate expression in parser\n");
+ /* NOTREACHED */
}
return expr;
}
KeycodeDef *
-KeycodeCreate(char *name,ExprDef *value)
+KeycodeCreate(char *name, ExprDef * value)
{
-KeycodeDef *def;
+ KeycodeDef *def;
- def= uTypedAlloc(KeycodeDef);
- if (def) {
- def->common.stmtType= StmtKeycodeDef;
- def->common.next= NULL;
- strncpy(def->name,name,XkbKeyNameLength);
- def->name[XkbKeyNameLength]= '\0';
- def->value= value;
+ def = uTypedAlloc(KeycodeDef);
+ if (def)
+ {
+ def->common.stmtType = StmtKeycodeDef;
+ def->common.next = NULL;
+ strncpy(def->name, name, XkbKeyNameLength);
+ def->name[XkbKeyNameLength] = '\0';
+ def->value = value;
}
- else {
- FATAL("Couldn't allocate key name definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate key name definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
KeyAliasDef *
-KeyAliasCreate(char *alias,char *real)
+KeyAliasCreate(char *alias, char *real)
{
-KeyAliasDef *def;
+ KeyAliasDef *def;
- def= uTypedAlloc(KeyAliasDef);
- if (def) {
- def->common.stmtType= StmtKeyAliasDef;
- def->common.next= NULL;
- strncpy(def->alias,alias,XkbKeyNameLength);
- def->alias[XkbKeyNameLength]= '\0';
- strncpy(def->real,real,XkbKeyNameLength);
- def->real[XkbKeyNameLength]= '\0';
+ def = uTypedAlloc(KeyAliasDef);
+ if (def)
+ {
+ def->common.stmtType = StmtKeyAliasDef;
+ def->common.next = NULL;
+ strncpy(def->alias, alias, XkbKeyNameLength);
+ def->alias[XkbKeyNameLength] = '\0';
+ strncpy(def->real, real, XkbKeyNameLength);
+ def->real[XkbKeyNameLength] = '\0';
}
- else {
- FATAL("Couldn't allocate key alias definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate key alias definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
VModDef *
-VModCreate(Atom name,ExprDef *value)
-{
-VModDef *def;
- def= uTypedAlloc(VModDef);
- if (def) {
- def->common.stmtType= StmtVModDef;
- def->common.next= NULL;
- def->name= name;
- def->value= value;
- }
- else {
- FATAL("Couldn't allocate variable definition in parser\n");
- /* NOTREACHED */
+VModCreate(Atom name, ExprDef * value)
+{
+ VModDef *def;
+ def = uTypedAlloc(VModDef);
+ if (def)
+ {
+ def->common.stmtType = StmtVModDef;
+ def->common.next = NULL;
+ def->name = name;
+ def->value = value;
+ }
+ else
+ {
+ FATAL("Couldn't allocate variable definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
VarDef *
-VarCreate(ExprDef *name,ExprDef *value)
-{
-VarDef *def;
- def= uTypedAlloc(VarDef);
- if (def) {
- def->common.stmtType= StmtVarDef;
- def->common.next= NULL;
- def->name= name;
- def->value= value;
- }
- else {
- FATAL("Couldn't allocate variable definition in parser\n");
- /* NOTREACHED */
+VarCreate(ExprDef * name, ExprDef * value)
+{
+ VarDef *def;
+ def = uTypedAlloc(VarDef);
+ if (def)
+ {
+ def->common.stmtType = StmtVarDef;
+ def->common.next = NULL;
+ def->name = name;
+ def->value = value;
+ }
+ else
+ {
+ FATAL("Couldn't allocate variable definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
VarDef *
-BoolVarCreate(Atom nameToken,unsigned set)
+BoolVarCreate(Atom nameToken, unsigned set)
{
-ExprDef *name,*value;
+ ExprDef *name, *value;
- name= ExprCreate(ExprIdent,TypeUnknown);
- name->value.str= nameToken;
- value= ExprCreate(ExprValue,TypeBoolean);
- value->value.uval= set;
- return VarCreate(name,value);
+ name = ExprCreate(ExprIdent, TypeUnknown);
+ name->value.str = nameToken;
+ value = ExprCreate(ExprValue, TypeBoolean);
+ value->value.uval = set;
+ return VarCreate(name, value);
}
InterpDef *
-InterpCreate(KeySym sym,ExprDef *match)
+InterpCreate(KeySym sym, ExprDef * match)
{
-InterpDef *def;
+ InterpDef *def;
- def= uTypedAlloc(InterpDef);
- if (def) {
- def->common.stmtType= StmtInterpDef;
- def->common.next= NULL;
- def->sym= sym;
- def->match= match;
+ def = uTypedAlloc(InterpDef);
+ if (def)
+ {
+ def->common.stmtType = StmtInterpDef;
+ def->common.next = NULL;
+ def->sym = sym;
+ def->match = match;
}
- else {
- FATAL("Couldn't allocate interp definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate interp definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
KeyTypeDef *
-KeyTypeCreate(Atom name,VarDef *body)
+KeyTypeCreate(Atom name, VarDef * body)
{
-KeyTypeDef *def;
+ KeyTypeDef *def;
- def= uTypedAlloc(KeyTypeDef);
- if (def) {
- def->common.stmtType= StmtKeyTypeDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- def->name= name;
- def->body= body;
+ def = uTypedAlloc(KeyTypeDef);
+ if (def)
+ {
+ def->common.stmtType = StmtKeyTypeDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ def->name = name;
+ def->body = body;
}
- else {
- FATAL("Couldn't allocate key type definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate key type definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
SymbolsDef *
-SymbolsCreate(char *keyName,ExprDef *symbols)
+SymbolsCreate(char *keyName, ExprDef * symbols)
{
-SymbolsDef *def;
+ SymbolsDef *def;
- def= uTypedAlloc(SymbolsDef);
- if (def) {
- def->common.stmtType= StmtSymbolsDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- bzero(def->keyName,5);
- strncpy(def->keyName,keyName,4);
- def->symbols= symbols;
+ def = uTypedAlloc(SymbolsDef);
+ if (def)
+ {
+ def->common.stmtType = StmtSymbolsDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ bzero(def->keyName, 5);
+ strncpy(def->keyName, keyName, 4);
+ def->symbols = symbols;
}
- else {
- FATAL("Couldn't allocate symbols definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate symbols definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
GroupCompatDef *
-GroupCompatCreate(int group,ExprDef *val)
+GroupCompatCreate(int group, ExprDef * val)
{
-GroupCompatDef *def;
+ GroupCompatDef *def;
- def= uTypedAlloc(GroupCompatDef);
- if (def) {
- def->common.stmtType= StmtGroupCompatDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- def->group= group;
- def->def= val;
+ def = uTypedAlloc(GroupCompatDef);
+ if (def)
+ {
+ def->common.stmtType = StmtGroupCompatDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ def->group = group;
+ def->def = val;
}
- else {
- FATAL("Couldn't allocate group compat definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate group compat definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
ModMapDef *
-ModMapCreate(Atom modifier,ExprDef *keys)
+ModMapCreate(Atom modifier, ExprDef * keys)
{
-ModMapDef *def;
+ ModMapDef *def;
- def= uTypedAlloc(ModMapDef);
- if (def) {
- def->common.stmtType= StmtModMapDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- def->modifier= modifier;
- def->keys= keys;
+ def = uTypedAlloc(ModMapDef);
+ if (def)
+ {
+ def->common.stmtType = StmtModMapDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ def->modifier = modifier;
+ def->keys = keys;
}
- else {
- FATAL("Couldn't allocate mod mask definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate mod mask definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
IndicatorMapDef *
-IndicatorMapCreate(Atom name,VarDef *body)
+IndicatorMapCreate(Atom name, VarDef * body)
{
-IndicatorMapDef *def;
+ IndicatorMapDef *def;
- def= uTypedAlloc(IndicatorMapDef);
- if (def) {
- def->common.stmtType= StmtIndicatorMapDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- def->name= name;
- def->body= body;
+ def = uTypedAlloc(IndicatorMapDef);
+ if (def)
+ {
+ def->common.stmtType = StmtIndicatorMapDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ def->name = name;
+ def->body = body;
}
- else {
- FATAL("Couldn't allocate indicator map definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate indicator map definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
IndicatorNameDef *
-IndicatorNameCreate(int ndx,ExprDef *name,Bool virtual)
+IndicatorNameCreate(int ndx, ExprDef * name, Bool virtual)
{
-IndicatorNameDef *def;
+ IndicatorNameDef *def;
- def= uTypedAlloc(IndicatorNameDef);
- if (def) {
- def->common.stmtType= StmtIndicatorNameDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- def->ndx= ndx;
- def->name= name;
- def->virtual= virtual;
+ def = uTypedAlloc(IndicatorNameDef);
+ if (def)
+ {
+ def->common.stmtType = StmtIndicatorNameDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ def->ndx = ndx;
+ def->name = name;
+ def->virtual = virtual;
}
- else {
- FATAL("Couldn't allocate indicator index definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate indicator index definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
ExprDef *
-ActionCreate(Atom name,ExprDef *args)
+ActionCreate(Atom name, ExprDef * args)
{
-ExprDef *act;
+ ExprDef *act;
- act= uTypedAlloc(ExprDef);
- if (act) {
- act->common.stmtType= StmtExpr;
- act->common.next= NULL;
- act->op= ExprActionDecl;
- act->value.action.name= name;
- act->value.action.args= args;
- return act;
+ act = uTypedAlloc(ExprDef);
+ if (act)
+ {
+ act->common.stmtType = StmtExpr;
+ act->common.next = NULL;
+ act->op = ExprActionDecl;
+ act->value.action.name = name;
+ act->value.action.args = args;
+ return act;
}
FATAL("Couldn't allocate ActionDef in parser\n");
return NULL;
@@ -363,384 +395,441 @@ ExprDef *act;
ExprDef *
CreateKeysymList(KeySym sym)
{
-ExprDef *def;
+ ExprDef *def;
- def= ExprCreate(ExprKeysymList,TypeSymbols);
- if (def) {
- def->value.list.nSyms= 1;
- def->value.list.szSyms= 2;
- def->value.list.syms= uTypedCalloc(2,KeySym);
- if (def->value.list.syms!=NULL) {
- def->value.list.syms[0]= sym;
- return def;
- }
+ def = ExprCreate(ExprKeysymList, TypeSymbols);
+ if (def)
+ {
+ def->value.list.nSyms = 1;
+ def->value.list.szSyms = 2;
+ def->value.list.syms = uTypedCalloc(2, KeySym);
+ if (def->value.list.syms != NULL)
+ {
+ def->value.list.syms[0] = sym;
+ return def;
+ }
}
FATAL("Couldn't allocate expression for keysym list in parser\n");
return NULL;
}
ShapeDef *
-ShapeDeclCreate(Atom name,OutlineDef *outlines)
-{
-ShapeDef * shape;
-OutlineDef * ol;
-
- shape= uTypedAlloc(ShapeDef);
- if (shape!=NULL) {
- bzero(shape,sizeof(ShapeDef));
- shape->common.stmtType= StmtShapeDef;
- shape->common.next= NULL;
- shape->merge= MergeDefault;
- shape->name= name;
- shape->nOutlines= 0;
- shape->outlines= outlines;
- for (ol=outlines;ol!=NULL;ol= (OutlineDef *)ol->common.next) {
- if (ol->nPoints>0)
- shape->nOutlines++;
- }
+ShapeDeclCreate(Atom name, OutlineDef * outlines)
+{
+ ShapeDef *shape;
+ OutlineDef *ol;
+
+ shape = uTypedAlloc(ShapeDef);
+ if (shape != NULL)
+ {
+ bzero(shape, sizeof(ShapeDef));
+ shape->common.stmtType = StmtShapeDef;
+ shape->common.next = NULL;
+ shape->merge = MergeDefault;
+ shape->name = name;
+ shape->nOutlines = 0;
+ shape->outlines = outlines;
+ for (ol = outlines; ol != NULL; ol = (OutlineDef *) ol->common.next)
+ {
+ if (ol->nPoints > 0)
+ shape->nOutlines++;
+ }
}
return shape;
}
OutlineDef *
-OutlineCreate(Atom field,ExprDef *points)
-{
-OutlineDef * outline;
-ExprDef * pt;
-
- outline= uTypedAlloc(OutlineDef);
- if (outline!=NULL) {
- bzero(outline,sizeof(OutlineDef));
- outline->common.stmtType= StmtOutlineDef;
- outline->common.next= NULL;
- outline->field= field;
- outline->nPoints= 0;
- if (points->op==ExprCoord) {
- for (pt=points;pt!=NULL;pt= (ExprDef *)pt->common.next) {
- outline->nPoints++;
- }
- }
- outline->points= points;
+OutlineCreate(Atom field, ExprDef * points)
+{
+ OutlineDef *outline;
+ ExprDef *pt;
+
+ outline = uTypedAlloc(OutlineDef);
+ if (outline != NULL)
+ {
+ bzero(outline, sizeof(OutlineDef));
+ outline->common.stmtType = StmtOutlineDef;
+ outline->common.next = NULL;
+ outline->field = field;
+ outline->nPoints = 0;
+ if (points->op == ExprCoord)
+ {
+ for (pt = points; pt != NULL; pt = (ExprDef *) pt->common.next)
+ {
+ outline->nPoints++;
+ }
+ }
+ outline->points = points;
}
return outline;
}
KeyDef *
-KeyDeclCreate(char *name,ExprDef *expr)
+KeyDeclCreate(char *name, ExprDef * expr)
{
-KeyDef * key;
+ KeyDef *key;
- key= uTypedAlloc(KeyDef);
- if (key!=NULL) {
- bzero(key,sizeof(KeyDef));
- key->common.stmtType= StmtKeyDef;
- key->common.next= NULL;
- if (name) key->name= name;
- else key->expr= expr;
+ key = uTypedAlloc(KeyDef);
+ if (key != NULL)
+ {
+ bzero(key, sizeof(KeyDef));
+ key->common.stmtType = StmtKeyDef;
+ key->common.next = NULL;
+ if (name)
+ key->name = name;
+ else
+ key->expr = expr;
}
return key;
}
KeyDef *
-KeyDeclMerge(KeyDef *into,KeyDef *from)
+KeyDeclMerge(KeyDef * into, KeyDef * from)
{
- into->expr= (ExprDef *)AppendStmt(&into->expr->common,&from->expr->common);
- from->expr= NULL;
+ into->expr =
+ (ExprDef *) AppendStmt(&into->expr->common, &from->expr->common);
+ from->expr = NULL;
uFree(from);
return into;
}
RowDef *
-RowDeclCreate(KeyDef * keys)
-{
-RowDef * row;
-KeyDef * key;
-
- row= uTypedAlloc(RowDef);
- if (row!=NULL) {
- bzero(row,sizeof(RowDef));
- row->common.stmtType= StmtRowDef;
- row->common.next= NULL;
- row->nKeys= 0;
- row->keys= keys;
- for (key=keys;key!=NULL;key=(KeyDef *)key->common.next) {
- if (key->common.stmtType==StmtKeyDef)
- row->nKeys++;
- }
+RowDeclCreate(KeyDef * keys)
+{
+ RowDef *row;
+ KeyDef *key;
+
+ row = uTypedAlloc(RowDef);
+ if (row != NULL)
+ {
+ bzero(row, sizeof(RowDef));
+ row->common.stmtType = StmtRowDef;
+ row->common.next = NULL;
+ row->nKeys = 0;
+ row->keys = keys;
+ for (key = keys; key != NULL; key = (KeyDef *) key->common.next)
+ {
+ if (key->common.stmtType == StmtKeyDef)
+ row->nKeys++;
+ }
}
return row;
}
SectionDef *
-SectionDeclCreate(Atom name,RowDef *rows)
-{
-SectionDef * section;
-RowDef * row;
-
- section= uTypedAlloc(SectionDef);
- if (section!=NULL) {
- bzero(section,sizeof(SectionDef));
- section->common.stmtType= StmtSectionDef;
- section->common.next= NULL;
- section->name= name;
- section->nRows= 0;
- section->rows= rows;
- for (row=rows;row!=NULL;row=(RowDef *)row->common.next) {
- if (row->common.stmtType==StmtRowDef)
- section->nRows++;
- }
+SectionDeclCreate(Atom name, RowDef * rows)
+{
+ SectionDef *section;
+ RowDef *row;
+
+ section = uTypedAlloc(SectionDef);
+ if (section != NULL)
+ {
+ bzero(section, sizeof(SectionDef));
+ section->common.stmtType = StmtSectionDef;
+ section->common.next = NULL;
+ section->name = name;
+ section->nRows = 0;
+ section->rows = rows;
+ for (row = rows; row != NULL; row = (RowDef *) row->common.next)
+ {
+ if (row->common.stmtType == StmtRowDef)
+ section->nRows++;
+ }
}
return section;
}
OverlayKeyDef *
-OverlayKeyCreate(char * under,char *over)
-{
-OverlayKeyDef * key;
-
- key= uTypedAlloc(OverlayKeyDef);
- if (key!=NULL) {
- bzero(key,sizeof(OverlayKeyDef));
- key->common.stmtType= StmtOverlayKeyDef;
- strncpy(key->over,over,XkbKeyNameLength);
- strncpy(key->under,under,XkbKeyNameLength);
- if (over) uFree(over);
- if (under) uFree(under);
+OverlayKeyCreate(char *under, char *over)
+{
+ OverlayKeyDef *key;
+
+ key = uTypedAlloc(OverlayKeyDef);
+ if (key != NULL)
+ {
+ bzero(key, sizeof(OverlayKeyDef));
+ key->common.stmtType = StmtOverlayKeyDef;
+ strncpy(key->over, over, XkbKeyNameLength);
+ strncpy(key->under, under, XkbKeyNameLength);
+ if (over)
+ uFree(over);
+ if (under)
+ uFree(under);
}
return key;
}
OverlayDef *
-OverlayDeclCreate(Atom name,OverlayKeyDef *keys)
-{
-OverlayDef * ol;
-OverlayKeyDef * key;
-
- ol= uTypedAlloc(OverlayDef);
- if (ol!=NULL) {
- bzero(ol,sizeof(OverlayDef));
- ol->common.stmtType= StmtOverlayDef;
- ol->name= name;
- ol->keys= keys;
- for (key=keys;key!=NULL;key=(OverlayKeyDef *)key->common.next) {
- ol->nKeys++;
- }
+OverlayDeclCreate(Atom name, OverlayKeyDef * keys)
+{
+ OverlayDef *ol;
+ OverlayKeyDef *key;
+
+ ol = uTypedAlloc(OverlayDef);
+ if (ol != NULL)
+ {
+ bzero(ol, sizeof(OverlayDef));
+ ol->common.stmtType = StmtOverlayDef;
+ ol->name = name;
+ ol->keys = keys;
+ for (key = keys; key != NULL;
+ key = (OverlayKeyDef *) key->common.next)
+ {
+ ol->nKeys++;
+ }
}
return ol;
}
DoodadDef *
-DoodadCreate(unsigned type,Atom name,VarDef *body)
+DoodadCreate(unsigned type, Atom name, VarDef * body)
{
-DoodadDef * doodad;
+ DoodadDef *doodad;
- doodad= uTypedAlloc(DoodadDef);
- if (doodad!=NULL) {
- bzero(doodad,sizeof(DoodadDef));
- doodad->common.stmtType= StmtDoodadDef;
- doodad->common.next= NULL;
- doodad->type= type;
- doodad->name= name;
- doodad->body= body;
+ doodad = uTypedAlloc(DoodadDef);
+ if (doodad != NULL)
+ {
+ bzero(doodad, sizeof(DoodadDef));
+ doodad->common.stmtType = StmtDoodadDef;
+ doodad->common.next = NULL;
+ doodad->type = type;
+ doodad->name = name;
+ doodad->body = body;
}
return doodad;
}
ExprDef *
-AppendKeysymList(ExprDef *list,KeySym sym)
-{
- if (list->value.list.nSyms>=list->value.list.szSyms) {
- list->value.list.szSyms*=2;
- list->value.list.syms= uTypedRecalloc(list->value.list.syms,
- list->value.list.nSyms,
- list->value.list.szSyms,
- KeySym);
- if (list->value.list.syms==NULL) {
- FATAL("Couldn't resize list of symbols for append\n");
- return NULL;
- }
- }
- list->value.list.syms[list->value.list.nSyms++]= sym;
+AppendKeysymList(ExprDef * list, KeySym sym)
+{
+ if (list->value.list.nSyms >= list->value.list.szSyms)
+ {
+ list->value.list.szSyms *= 2;
+ list->value.list.syms = uTypedRecalloc(list->value.list.syms,
+ list->value.list.nSyms,
+ list->value.list.szSyms,
+ KeySym);
+ if (list->value.list.syms == NULL)
+ {
+ FATAL("Couldn't resize list of symbols for append\n");
+ return NULL;
+ }
+ }
+ list->value.list.syms[list->value.list.nSyms++] = sym;
return list;
}
int
-LookupKeysym(char *str,KeySym *sym_rtrn)
+LookupKeysym(char *str, KeySym * sym_rtrn)
{
-KeySym sym;
+ KeySym sym;
- if ((!str)||(uStrCaseCmp(str,"any")==0)||(uStrCaseCmp(str,"nosymbol")==0)) {
- *sym_rtrn= NoSymbol;
- return 1;
+ if ((!str) || (uStrCaseCmp(str, "any") == 0)
+ || (uStrCaseCmp(str, "nosymbol") == 0))
+ {
+ *sym_rtrn = NoSymbol;
+ return 1;
}
- else if ((uStrCaseCmp(str,"none")==0)||(uStrCaseCmp(str,"voidsymbol")==0)) {
- *sym_rtrn= XK_VoidSymbol;
- return 1;
+ else if ((uStrCaseCmp(str, "none") == 0)
+ || (uStrCaseCmp(str, "voidsymbol") == 0))
+ {
+ *sym_rtrn = XK_VoidSymbol;
+ return 1;
}
- sym= XStringToKeysym(str);
- if (sym!=NoSymbol) {
- *sym_rtrn= sym;
- return 1;
+ sym = XStringToKeysym(str);
+ if (sym != NoSymbol)
+ {
+ *sym_rtrn = sym;
+ return 1;
}
return 0;
}
IncludeStmt *
-IncludeCreate(char *str,unsigned merge)
-{
-IncludeStmt * incl,*first;
-char * file,*map,*stmt,*tmp, *extra_data;
-char nextop;
-Bool haveSelf;
-
- haveSelf= False;
- incl= first= NULL;
- file= map= NULL;
- tmp= str;
- stmt= uStringDup(str);
- while ((tmp)&&(*tmp)) {
- if (XkbParseIncludeMap(&tmp,&file,&map,&nextop,&extra_data)) {
- if ((file==NULL)&&(map==NULL)) {
- if (haveSelf)
- goto BAIL;
- haveSelf= True;
- }
- if (first==NULL)
- first= incl= uTypedAlloc(IncludeStmt);
- else {
- incl->next= uTypedAlloc(IncludeStmt);
- incl= incl->next;
- }
- if (incl) {
- incl->common.stmtType= StmtInclude;
- incl->common.next= NULL;
- incl->merge= merge;
- incl->stmt= NULL;
- incl->file= file;
- incl->map= map;
- incl->modifier= extra_data;
- incl->path= NULL;
- incl->next= NULL;
- }
- else {
- WSGO("Allocation failure in IncludeCreate\n");
- ACTION("Using only part of the include\n");
- break;
- }
- if (nextop=='|') merge= MergeAugment;
- else merge= MergeOverride;
- }
- else {
- goto BAIL;
- }
- }
- if (first) first->stmt= stmt;
- else if (stmt) uFree(stmt);
+IncludeCreate(char *str, unsigned merge)
+{
+ IncludeStmt *incl, *first;
+ char *file, *map, *stmt, *tmp, *extra_data;
+ char nextop;
+ Bool haveSelf;
+
+ haveSelf = False;
+ incl = first = NULL;
+ file = map = NULL;
+ tmp = str;
+ stmt = uStringDup(str);
+ while ((tmp) && (*tmp))
+ {
+ if (XkbParseIncludeMap(&tmp, &file, &map, &nextop, &extra_data))
+ {
+ if ((file == NULL) && (map == NULL))
+ {
+ if (haveSelf)
+ goto BAIL;
+ haveSelf = True;
+ }
+ if (first == NULL)
+ first = incl = uTypedAlloc(IncludeStmt);
+ else
+ {
+ incl->next = uTypedAlloc(IncludeStmt);
+ incl = incl->next;
+ }
+ if (incl)
+ {
+ incl->common.stmtType = StmtInclude;
+ incl->common.next = NULL;
+ incl->merge = merge;
+ incl->stmt = NULL;
+ incl->file = file;
+ incl->map = map;
+ incl->modifier = extra_data;
+ incl->path = NULL;
+ incl->next = NULL;
+ }
+ else
+ {
+ WSGO("Allocation failure in IncludeCreate\n");
+ ACTION("Using only part of the include\n");
+ break;
+ }
+ if (nextop == '|')
+ merge = MergeAugment;
+ else
+ merge = MergeOverride;
+ }
+ else
+ {
+ goto BAIL;
+ }
+ }
+ if (first)
+ first->stmt = stmt;
+ else if (stmt)
+ uFree(stmt);
return first;
-BAIL:
- ERROR1("Illegal include statement \"%s\"\n",stmt);
+ BAIL:
+ ERROR1("Illegal include statement \"%s\"\n", stmt);
ACTION("Ignored\n");
- while (first) {
- incl= first->next;
- if (first->file) uFree(first->file);
- if (first->map) uFree(first->map);
- if (first->modifier) uFree(first->modifier);
- if (first->path) uFree(first->path);
- first->file= first->map= first->path= NULL;
- uFree(first);
- first= incl;
+ while (first)
+ {
+ incl = first->next;
+ if (first->file)
+ uFree(first->file);
+ if (first->map)
+ uFree(first->map);
+ if (first->modifier)
+ uFree(first->modifier);
+ if (first->path)
+ uFree(first->path);
+ first->file = first->map = first->path = NULL;
+ uFree(first);
+ first = incl;
}
if (stmt)
- uFree(stmt);
+ uFree(stmt);
return NULL;
}
#ifdef DEBUG
void
-PrintStmtAddrs(ParseCommon *stmt)
+PrintStmtAddrs(ParseCommon * stmt)
{
- fprintf(stderr,"0x%x",stmt);
- if (stmt) {
- do {
- fprintf(stderr,"->0x%x",stmt->next);
- stmt= stmt->next;
- } while (stmt);
+ fprintf(stderr, "0x%x", stmt);
+ if (stmt)
+ {
+ do
+ {
+ fprintf(stderr, "->0x%x", stmt->next);
+ stmt = stmt->next;
+ }
+ while (stmt);
}
- fprintf(stderr,"\n");
+ fprintf(stderr, "\n");
}
#endif
static void
-CheckDefaultMap(XkbFile *maps)
-{
-XkbFile * dflt,*tmp;
-
- dflt= NULL;
- for (tmp=maps,dflt=NULL;tmp!=NULL;tmp=(XkbFile *)tmp->common.next) {
- if (tmp->flags&XkbLC_Default) {
- if (dflt==NULL)
- dflt= tmp;
- else {
- if (warningLevel>2) {
- WARN1("Multiple default components in %s\n",
- (scanFile?scanFile:"(unknown)"));
- ACTION2("Using %s, ignoring %s\n",
- (dflt->name?dflt->name:"(first)"),
- (tmp->name?tmp->name:"(subsequent)"));
- }
- tmp->flags&= (~XkbLC_Default);
- }
- }
+CheckDefaultMap(XkbFile * maps)
+{
+ XkbFile *dflt, *tmp;
+
+ dflt = NULL;
+ for (tmp = maps, dflt = NULL; tmp != NULL;
+ tmp = (XkbFile *) tmp->common.next)
+ {
+ if (tmp->flags & XkbLC_Default)
+ {
+ if (dflt == NULL)
+ dflt = tmp;
+ else
+ {
+ if (warningLevel > 2)
+ {
+ WARN1("Multiple default components in %s\n",
+ (scanFile ? scanFile : "(unknown)"));
+ ACTION2("Using %s, ignoring %s\n",
+ (dflt->name ? dflt->name : "(first)"),
+ (tmp->name ? tmp->name : "(subsequent)"));
+ }
+ tmp->flags &= (~XkbLC_Default);
+ }
+ }
}
return;
}
int
-XKBParseFile(FILE *file,XkbFile **pRtrn)
-{
- if (file) {
- yyin= file;
- rtrnValue= NULL;
- if (yyparse()==0) {
- *pRtrn= rtrnValue;
- CheckDefaultMap(rtrnValue);
- rtrnValue= NULL;
- return 1;
- }
- *pRtrn= NULL;
- return 0;
- }
- *pRtrn= NULL;
+XKBParseFile(FILE * file, XkbFile ** pRtrn)
+{
+ if (file)
+ {
+ yyin = file;
+ rtrnValue = NULL;
+ if (yyparse() == 0)
+ {
+ *pRtrn = rtrnValue;
+ CheckDefaultMap(rtrnValue);
+ rtrnValue = NULL;
+ return 1;
+ }
+ *pRtrn = NULL;
+ return 0;
+ }
+ *pRtrn = NULL;
return 1;
}
XkbFile *
-CreateXKBFile(int type,char *name,ParseCommon *defs,unsigned flags)
-{
-XkbFile * file;
-static int fileID;
-
- file= uTypedAlloc(XkbFile);
- if (file) {
- XkbEnsureSafeMapName(name);
- bzero(file,sizeof(XkbFile));
- file->type= type;
- file->topName= uStringDup(name);
- file->name= name;
- file->defs= defs;
- file->id= fileID++;
- file->compiled= False;
- file->flags= flags;
+CreateXKBFile(int type, char *name, ParseCommon * defs, unsigned flags)
+{
+ XkbFile *file;
+ static int fileID;
+
+ file = uTypedAlloc(XkbFile);
+ if (file)
+ {
+ XkbEnsureSafeMapName(name);
+ bzero(file, sizeof(XkbFile));
+ file->type = type;
+ file->topName = uStringDup(name);
+ file->name = name;
+ file->defs = defs;
+ file->id = fileID++;
+ file->compiled = False;
+ file->flags = flags;
}
return file;
}
-unsigned
-StmtSetMerge(ParseCommon *stmt,unsigned merge)
+unsigned
+StmtSetMerge(ParseCommon * stmt, unsigned merge)
{
- if ((merge==MergeAltForm) && (stmt->stmtType!=StmtKeycodeDef)) {
- yyerror("illegal use of 'alternate' merge mode");
- merge= MergeDefault;
+ if ((merge == MergeAltForm) && (stmt->stmtType != StmtKeycodeDef))
+ {
+ yyerror("illegal use of 'alternate' merge mode");
+ merge = MergeDefault;
}
return merge;
}
diff --git a/parseutils.h b/parseutils.h
index 228fe40..73a0ec8 100644
--- a/parseutils.h
+++ b/parseutils.h
@@ -33,11 +33,11 @@
#include "xkbcomp.h"
-extern char *scanStr;
-extern int scanInt;
-extern int lineNum;
+extern char *scanStr;
+extern int scanInt;
+extern int lineNum;
-extern XkbFile *rtrnValue;
+extern XkbFile *rtrnValue;
#ifdef DEBUG
#define d(str) fprintf(stderr,"%s\n",str);
@@ -50,196 +50,158 @@ extern XkbFile *rtrnValue;
#endif
-extern ParseCommon *AppendStmt(
- ParseCommon * /* to */,
- ParseCommon * /* append */
-);
-
-extern ExprDef *ExprCreate(
- unsigned /* op */,
- unsigned /* type */
-);
-
-extern ExprDef *ExprCreateUnary(
- unsigned /* op */,
- unsigned /* type */,
- ExprDef * /* child */
-);
-
-extern ExprDef *ExprCreateBinary(
- unsigned /* op */,
- ExprDef * /* left */,
- ExprDef * /* right */
-);
-
-extern KeycodeDef *KeycodeCreate(
- char * /* name */,
- ExprDef * /* value */
-);
-
-extern KeyAliasDef *KeyAliasCreate(
- char * /* alias */,
- char * /* real */
-);
-
-extern VModDef *VModCreate(
- Atom /* name */,
- ExprDef * /* value */
-);
-
-extern VarDef *VarCreate(
- ExprDef * /* name */,
- ExprDef * /* value */
-);
-
-extern VarDef *BoolVarCreate(
- Atom /* nameToken */,
- unsigned /* set */
-);
-
-extern InterpDef *InterpCreate(
- KeySym /* sym */,
- ExprDef * /* match */
-);
-
-extern KeyTypeDef *KeyTypeCreate(
- Atom /* name */,
- VarDef * /* body */
-);
-
-extern SymbolsDef *SymbolsCreate(
- char * /* keyName */,
- ExprDef * /* symbols */
-);
-
-extern GroupCompatDef *GroupCompatCreate(
- int /* group */,
- ExprDef * /* def */
-);
-
-extern ModMapDef *ModMapCreate(
- Atom /* modifier */,
- ExprDef * /* keys */
-);
-
-extern IndicatorMapDef *IndicatorMapCreate(
- Atom /* name */,
- VarDef * /* body */
-);
-
-extern IndicatorNameDef *IndicatorNameCreate(
- int /* ndx */,
- ExprDef * /* name */,
- Bool /* virtual */
-);
-
-extern ExprDef *ActionCreate(
- Atom /* name */,
- ExprDef * /* args */
-);
-
-extern ExprDef *CreateKeysymList(
- KeySym /* sym */
-);
-
-extern ShapeDef *ShapeDeclCreate(
- Atom /* name */,
- OutlineDef * /* outlines */
-);
-
-extern OutlineDef *OutlineCreate(
- Atom /* field */,
- ExprDef * /* points */
-);
-
-extern KeyDef *KeyDeclCreate(
- char * /* name */,
- ExprDef * /* expr */
-);
-
-extern KeyDef *KeyDeclMerge(
- KeyDef * /* into */,
- KeyDef * /* from */
-);
-
-extern RowDef *RowDeclCreate(
- KeyDef * /* keys */
-);
-
-extern SectionDef *SectionDeclCreate(
- Atom /* name */,
- RowDef * /* rows */
-);
-
-extern OverlayKeyDef *OverlayKeyCreate(
- char * /* under */,
- char * /* over */
-);
-
-extern OverlayDef *OverlayDeclCreate(
- Atom /* name */,
- OverlayKeyDef * /* rows */
-);
-
-extern DoodadDef *DoodadCreate(
- unsigned /* type */,
- Atom /* name */,
- VarDef * /* body */
-);
-
-extern ExprDef *AppendKeysymList(
- ExprDef * /* list */,
- KeySym /* sym */
-);
-
-extern int LookupKeysym(
- char * /* str */,
- KeySym * /* sym_rtrn */
-);
-
-extern IncludeStmt *IncludeCreate(
- char * /* str */,
- unsigned /* merge */
-);
-
-extern unsigned StmtSetMerge(
- ParseCommon * /* stmt */,
- unsigned /* merge */
-);
+extern ParseCommon *AppendStmt(ParseCommon * /* to */ ,
+ ParseCommon * /* append */
+ );
+
+extern ExprDef *ExprCreate(unsigned /* op */ ,
+ unsigned /* type */
+ );
+
+extern ExprDef *ExprCreateUnary(unsigned /* op */ ,
+ unsigned /* type */ ,
+ ExprDef * /* child */
+ );
+
+extern ExprDef *ExprCreateBinary(unsigned /* op */ ,
+ ExprDef * /* left */ ,
+ ExprDef * /* right */
+ );
+
+extern KeycodeDef *KeycodeCreate(char * /* name */ ,
+ ExprDef * /* value */
+ );
+
+extern KeyAliasDef *KeyAliasCreate(char * /* alias */ ,
+ char * /* real */
+ );
+
+extern VModDef *VModCreate(Atom /* name */ ,
+ ExprDef * /* value */
+ );
+
+extern VarDef *VarCreate(ExprDef * /* name */ ,
+ ExprDef * /* value */
+ );
+
+extern VarDef *BoolVarCreate(Atom /* nameToken */ ,
+ unsigned /* set */
+ );
+
+extern InterpDef *InterpCreate(KeySym /* sym */ ,
+ ExprDef * /* match */
+ );
+
+extern KeyTypeDef *KeyTypeCreate(Atom /* name */ ,
+ VarDef * /* body */
+ );
+
+extern SymbolsDef *SymbolsCreate(char * /* keyName */ ,
+ ExprDef * /* symbols */
+ );
+
+extern GroupCompatDef *GroupCompatCreate(int /* group */ ,
+ ExprDef * /* def */
+ );
+
+extern ModMapDef *ModMapCreate(Atom /* modifier */ ,
+ ExprDef * /* keys */
+ );
+
+extern IndicatorMapDef *IndicatorMapCreate(Atom /* name */ ,
+ VarDef * /* body */
+ );
+
+extern IndicatorNameDef *IndicatorNameCreate(int /* ndx */ ,
+ ExprDef * /* name */ ,
+ Bool /* virtual */
+ );
+
+extern ExprDef *ActionCreate(Atom /* name */ ,
+ ExprDef * /* args */
+ );
+
+extern ExprDef *CreateKeysymList(KeySym /* sym */
+ );
+
+extern ShapeDef *ShapeDeclCreate(Atom /* name */ ,
+ OutlineDef * /* outlines */
+ );
+
+extern OutlineDef *OutlineCreate(Atom /* field */ ,
+ ExprDef * /* points */
+ );
+
+extern KeyDef *KeyDeclCreate(char * /* name */ ,
+ ExprDef * /* expr */
+ );
+
+extern KeyDef *KeyDeclMerge(KeyDef * /* into */ ,
+ KeyDef * /* from */
+ );
+
+extern RowDef *RowDeclCreate(KeyDef * /* keys */
+ );
+
+extern SectionDef *SectionDeclCreate(Atom /* name */ ,
+ RowDef * /* rows */
+ );
+
+extern OverlayKeyDef *OverlayKeyCreate(char * /* under */ ,
+ char * /* over */
+ );
+
+extern OverlayDef *OverlayDeclCreate(Atom /* name */ ,
+ OverlayKeyDef * /* rows */
+ );
+
+extern DoodadDef *DoodadCreate(unsigned /* type */ ,
+ Atom /* name */ ,
+ VarDef * /* body */
+ );
+
+extern ExprDef *AppendKeysymList(ExprDef * /* list */ ,
+ KeySym /* sym */
+ );
+
+extern int LookupKeysym(char * /* str */ ,
+ KeySym * /* sym_rtrn */
+ );
+
+extern IncludeStmt *IncludeCreate(char * /* str */ ,
+ unsigned /* merge */
+ );
+
+extern unsigned StmtSetMerge(ParseCommon * /* stmt */ ,
+ unsigned /* merge */
+ );
#ifdef DEBUG
-extern void PrintStmtAddrs(
- ParseCommon * /* stmt */
-);
+extern void PrintStmtAddrs(ParseCommon * /* stmt */
+ );
#endif
-extern int XKBParseFile(
- FILE * /* file */,
- XkbFile ** /* pRtrn */
-);
+extern int XKBParseFile(FILE * /* file */ ,
+ XkbFile ** /* pRtrn */
+ );
-extern XkbFile *CreateXKBFile(
- int /* type */,
- char * /* name */,
- ParseCommon * /* defs */,
- unsigned /* flags */
-);
+extern XkbFile *CreateXKBFile(int /* type */ ,
+ char * /* name */ ,
+ ParseCommon * /* defs */ ,
+ unsigned /* flags */
+ );
-extern void yyerror(
- const char * /* s */
-);
+extern void yyerror(const char * /* s */
+ );
-extern int yywrap(
- void
-);
+extern int yywrap(void);
extern int yylex(void);
extern int yyparse(void);
-extern int setScanState(
- char * /* file */,
- int /* line */
-);
+extern int setScanState(char * /* file */ ,
+ int /* line */
+ );
extern FILE *yyin;
diff --git a/symbols.c b/symbols.c
index 40203f2..7c1807a 100644
--- a/symbols.c
+++ b/symbols.c
@@ -39,9 +39,9 @@
#include "misc.h"
#include "alias.h"
-extern Atom tok_ONE_LEVEL;
-extern Atom tok_TWO_LEVEL;
-extern Atom tok_KEYPAD;
+extern Atom tok_ONE_LEVEL;
+extern Atom tok_TWO_LEVEL;
+extern Atom tok_KEYPAD;
/***====================================================================***/
@@ -58,688 +58,805 @@ extern Atom tok_KEYPAD;
#define _Key_GroupInfo (1<<6)
#define _Key_VModMap (1<<7)
-typedef struct _KeyInfo {
- CommonInfo defs;
- unsigned long name;
- unsigned char groupInfo;
- unsigned char typesDefined;
- unsigned char symsDefined;
- unsigned char actsDefined;
- short numLevels[XkbNumKbdGroups];
- KeySym * syms[XkbNumKbdGroups];
- XkbAction * acts[XkbNumKbdGroups];
- Atom types[XkbNumKbdGroups];
- unsigned repeat;
- XkbBehavior behavior;
- unsigned short vmodmap;
- unsigned long nameForOverlayKey;
- unsigned long allowNone;
- Atom dfltType;
+typedef struct _KeyInfo
+{
+ CommonInfo defs;
+ unsigned long name;
+ unsigned char groupInfo;
+ unsigned char typesDefined;
+ unsigned char symsDefined;
+ unsigned char actsDefined;
+ short numLevels[XkbNumKbdGroups];
+ KeySym *syms[XkbNumKbdGroups];
+ XkbAction *acts[XkbNumKbdGroups];
+ Atom types[XkbNumKbdGroups];
+ unsigned repeat;
+ XkbBehavior behavior;
+ unsigned short vmodmap;
+ unsigned long nameForOverlayKey;
+ unsigned long allowNone;
+ Atom dfltType;
} KeyInfo;
static void
-InitKeyInfo(KeyInfo *info)
+InitKeyInfo(KeyInfo * info)
{
-register int i;
-static char dflt[4]= "*";
-
- info->defs.defined= 0;
- info->defs.fileID= 0;
- info->defs.merge= MergeOverride;
- info->defs.next= NULL;
- info->name= KeyNameToLong(dflt);
- info->groupInfo= 0;
- info->typesDefined= info->symsDefined= info->actsDefined= 0;
- for (i=0;i<XkbNumKbdGroups;i++) {
- info->numLevels[i]= 0;
- info->types[i]= None;
- info->syms[i]= NULL;
- info->acts[i]= NULL;
- }
- info->dfltType= None;
- info->behavior.type= XkbKB_Default;
- info->behavior.data= 0;
- info->vmodmap= 0;
- info->nameForOverlayKey= 0;
- info->repeat= RepeatUndefined;
- info->allowNone= 0;
+ register int i;
+ static char dflt[4] = "*";
+
+ info->defs.defined = 0;
+ info->defs.fileID = 0;
+ info->defs.merge = MergeOverride;
+ info->defs.next = NULL;
+ info->name = KeyNameToLong(dflt);
+ info->groupInfo = 0;
+ info->typesDefined = info->symsDefined = info->actsDefined = 0;
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ info->numLevels[i] = 0;
+ info->types[i] = None;
+ info->syms[i] = NULL;
+ info->acts[i] = NULL;
+ }
+ info->dfltType = None;
+ info->behavior.type = XkbKB_Default;
+ info->behavior.data = 0;
+ info->vmodmap = 0;
+ info->nameForOverlayKey = 0;
+ info->repeat = RepeatUndefined;
+ info->allowNone = 0;
return;
}
static void
-FreeKeyInfo(KeyInfo *info)
+FreeKeyInfo(KeyInfo * info)
{
-register int i;
-
- info->defs.defined= 0;
- info->defs.fileID= 0;
- info->defs.merge= MergeOverride;
- info->defs.next= NULL;
- info->groupInfo= 0;
- info->typesDefined= info->symsDefined= info->actsDefined= 0;
- for (i=0;i<XkbNumKbdGroups;i++) {
- info->numLevels[i]= 0;
- info->types[i]= None;
- if (info->syms[i]!=NULL)
- uFree(info->syms[i]);
- info->syms[i]= NULL;
- if (info->acts[i]!=NULL)
- uFree(info->acts[i]);
- info->acts[i]= NULL;
- }
- info->dfltType= None;
- info->behavior.type= XkbKB_Default;
- info->behavior.data= 0;
- info->vmodmap= 0;
- info->nameForOverlayKey= 0;
- info->repeat= RepeatUndefined;
+ register int i;
+
+ info->defs.defined = 0;
+ info->defs.fileID = 0;
+ info->defs.merge = MergeOverride;
+ info->defs.next = NULL;
+ info->groupInfo = 0;
+ info->typesDefined = info->symsDefined = info->actsDefined = 0;
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ info->numLevels[i] = 0;
+ info->types[i] = None;
+ if (info->syms[i] != NULL)
+ uFree(info->syms[i]);
+ info->syms[i] = NULL;
+ if (info->acts[i] != NULL)
+ uFree(info->acts[i]);
+ info->acts[i] = NULL;
+ }
+ info->dfltType = None;
+ info->behavior.type = XkbKB_Default;
+ info->behavior.data = 0;
+ info->vmodmap = 0;
+ info->nameForOverlayKey = 0;
+ info->repeat = RepeatUndefined;
return;
}
static Bool
-CopyKeyInfo(KeyInfo *old,KeyInfo *new,Bool clearOld)
+CopyKeyInfo(KeyInfo * old, KeyInfo * new, Bool clearOld)
{
-register int i;
-
- *new= *old;
- new->defs.next= NULL;
- if (clearOld) {
- for (i=0;i<XkbNumKbdGroups;i++) {
- old->numLevels[i]= 0;
- old->syms[i]= NULL;
- old->acts[i]= NULL;
- }
- }
- else {
- int width;
- for (i=0;i<XkbNumKbdGroups;i++) {
- width= new->numLevels[i];
- if (old->syms[i]!=NULL) {
- new->syms[i]= uTypedCalloc(width,KeySym);
- if (!new->syms[i]) {
- new->syms[i]= NULL;
- new->numLevels[i]= 0;
- return False;
- }
- memcpy((char *)new->syms[i],(char *)old->syms[i],
- width*sizeof(KeySym));
- }
- if (old->acts[i]!=NULL) {
- new->acts[i]= uTypedCalloc(width,XkbAction);
- if (!new->acts[i]) {
- new->acts[i]= NULL;
- return False;
- }
- memcpy((char *)new->acts[i],(char *)old->acts[i],
- width*sizeof(XkbAction));
- }
- }
+ register int i;
+
+ *new = *old;
+ new->defs.next = NULL;
+ if (clearOld)
+ {
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ old->numLevels[i] = 0;
+ old->syms[i] = NULL;
+ old->acts[i] = NULL;
+ }
+ }
+ else
+ {
+ int width;
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ width = new->numLevels[i];
+ if (old->syms[i] != NULL)
+ {
+ new->syms[i] = uTypedCalloc(width, KeySym);
+ if (!new->syms[i])
+ {
+ new->syms[i] = NULL;
+ new->numLevels[i] = 0;
+ return False;
+ }
+ memcpy((char *) new->syms[i], (char *) old->syms[i],
+ width * sizeof(KeySym));
+ }
+ if (old->acts[i] != NULL)
+ {
+ new->acts[i] = uTypedCalloc(width, XkbAction);
+ if (!new->acts[i])
+ {
+ new->acts[i] = NULL;
+ return False;
+ }
+ memcpy((char *) new->acts[i], (char *) old->acts[i],
+ width * sizeof(XkbAction));
+ }
+ }
}
return True;
}
/***====================================================================***/
-typedef struct _ModMapEntry {
- CommonInfo defs;
- Bool haveSymbol;
- int modifier;
- union {
- unsigned long keyName;
- KeySym keySym;
+typedef struct _ModMapEntry
+{
+ CommonInfo defs;
+ Bool haveSymbol;
+ int modifier;
+ union
+ {
+ unsigned long keyName;
+ KeySym keySym;
} u;
} ModMapEntry;
#define SYMBOLS_INIT_SIZE 110
#define SYMBOLS_CHUNK 20
-typedef struct _SymbolsInfo {
- char * name;
- int errorCount;
- unsigned fileID;
- unsigned merge;
- unsigned explicit_group;
- unsigned groupInfo;
- unsigned szKeys;
- unsigned nKeys;
- KeyInfo * keys;
- KeyInfo dflt;
- VModInfo vmods;
- ActionInfo * action;
- Atom groupNames[XkbNumKbdGroups];
-
- ModMapEntry * modMap;
- AliasInfo * aliases;
+typedef struct _SymbolsInfo
+{
+ char *name;
+ int errorCount;
+ unsigned fileID;
+ unsigned merge;
+ unsigned explicit_group;
+ unsigned groupInfo;
+ unsigned szKeys;
+ unsigned nKeys;
+ KeyInfo *keys;
+ KeyInfo dflt;
+ VModInfo vmods;
+ ActionInfo *action;
+ Atom groupNames[XkbNumKbdGroups];
+
+ ModMapEntry *modMap;
+ AliasInfo *aliases;
} SymbolsInfo;
static void
-InitSymbolsInfo(SymbolsInfo *info,XkbDescPtr xkb)
+InitSymbolsInfo(SymbolsInfo * info, XkbDescPtr xkb)
{
-register int i;
-
- tok_ONE_LEVEL= XkbInternAtom(NULL,"ONE_LEVEL",False);
- tok_TWO_LEVEL= XkbInternAtom(NULL,"TWO_LEVEL",False);
- tok_KEYPAD= XkbInternAtom(NULL,"KEYPAD",False);
- info->name= NULL;
- info->explicit_group= 0;
- info->errorCount= 0;
- info->fileID= 0;
- info->merge= MergeOverride;
- info->groupInfo= 0;
- info->szKeys= SYMBOLS_INIT_SIZE;
- info->nKeys= 0;
- info->keys= uTypedCalloc(SYMBOLS_INIT_SIZE,KeyInfo);
- info->modMap= NULL;
- for (i=0;i<XkbNumKbdGroups;i++)
- info->groupNames[i]= None;
+ register int i;
+
+ tok_ONE_LEVEL = XkbInternAtom(NULL, "ONE_LEVEL", False);
+ tok_TWO_LEVEL = XkbInternAtom(NULL, "TWO_LEVEL", False);
+ tok_KEYPAD = XkbInternAtom(NULL, "KEYPAD", False);
+ info->name = NULL;
+ info->explicit_group = 0;
+ info->errorCount = 0;
+ info->fileID = 0;
+ info->merge = MergeOverride;
+ info->groupInfo = 0;
+ info->szKeys = SYMBOLS_INIT_SIZE;
+ info->nKeys = 0;
+ info->keys = uTypedCalloc(SYMBOLS_INIT_SIZE, KeyInfo);
+ info->modMap = NULL;
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ info->groupNames[i] = None;
InitKeyInfo(&info->dflt);
- InitVModInfo(&info->vmods,xkb);
- info->action= NULL;
- info->aliases= NULL;
+ InitVModInfo(&info->vmods, xkb);
+ info->action = NULL;
+ info->aliases = NULL;
return;
}
static void
-FreeSymbolsInfo(SymbolsInfo *info)
+FreeSymbolsInfo(SymbolsInfo * info)
{
-register int i;
+ register int i;
if (info->name)
- uFree(info->name);
- info->name= NULL;
- if (info->keys) {
- for (i=0;i<info->nKeys;i++) {
- FreeKeyInfo(&info->keys[i]);
- }
- uFree(info->keys);
- info->keys= NULL;
- }
- if (info->modMap) {
- ClearCommonInfo(&info->modMap->defs);
- info->modMap= NULL;
- }
- if (info->aliases) {
- ClearAliases(&info->aliases);
- info->aliases= NULL;
- }
- bzero((char *)info,sizeof(SymbolsInfo));
+ uFree(info->name);
+ info->name = NULL;
+ if (info->keys)
+ {
+ for (i = 0; i < info->nKeys; i++)
+ {
+ FreeKeyInfo(&info->keys[i]);
+ }
+ uFree(info->keys);
+ info->keys = NULL;
+ }
+ if (info->modMap)
+ {
+ ClearCommonInfo(&info->modMap->defs);
+ info->modMap = NULL;
+ }
+ if (info->aliases)
+ {
+ ClearAliases(&info->aliases);
+ info->aliases = NULL;
+ }
+ bzero((char *) info, sizeof(SymbolsInfo));
return;
}
static Bool
-ResizeKeyGroup( KeyInfo * key,
- unsigned group,
- unsigned atLeastSize,
- Bool forceActions)
+ResizeKeyGroup(KeyInfo * key,
+ unsigned group, unsigned atLeastSize, Bool forceActions)
{
-Bool tooSmall;
-unsigned newWidth;
-
- tooSmall= (key->numLevels[group]<atLeastSize);
- if (tooSmall) newWidth= atLeastSize;
- else newWidth= key->numLevels[group];
-
- if ((key->syms[group]==NULL)||tooSmall) {
- key->syms[group]= uTypedRecalloc(key->syms[group],
- key->numLevels[group],newWidth,
- KeySym);
- if (!key->syms[group])
- return False;
- }
- if (((forceActions)&&(tooSmall||(key->acts[group]==NULL)))||
- (tooSmall&&(key->acts[group]!=NULL))) {
- key->acts[group]= uTypedRecalloc(key->acts[group],
- key->numLevels[group],newWidth,
- XkbAction);
- if (!key->acts[group])
- return False;
- }
- key->numLevels[group]= newWidth;
+ Bool tooSmall;
+ unsigned newWidth;
+
+ tooSmall = (key->numLevels[group] < atLeastSize);
+ if (tooSmall)
+ newWidth = atLeastSize;
+ else
+ newWidth = key->numLevels[group];
+
+ if ((key->syms[group] == NULL) || tooSmall)
+ {
+ key->syms[group] = uTypedRecalloc(key->syms[group],
+ key->numLevels[group], newWidth,
+ KeySym);
+ if (!key->syms[group])
+ return False;
+ }
+ if (((forceActions) && (tooSmall || (key->acts[group] == NULL))) ||
+ (tooSmall && (key->acts[group] != NULL)))
+ {
+ key->acts[group] = uTypedRecalloc(key->acts[group],
+ key->numLevels[group], newWidth,
+ XkbAction);
+ if (!key->acts[group])
+ return False;
+ }
+ key->numLevels[group] = newWidth;
return True;
}
static Bool
-MergeKeyGroups( SymbolsInfo * info,
- KeyInfo * into,
- KeyInfo * from,
- unsigned group)
+MergeKeyGroups(SymbolsInfo * info,
+ KeyInfo * into, KeyInfo * from, unsigned group)
{
-KeySym * resultSyms;
-XkbAction * resultActs;
-int resultWidth;
-register int i;
-Bool report,clobber;
-
- clobber= (from->defs.merge!=MergeAugment);
- report= (warningLevel>9)||
- ((into->defs.fileID==from->defs.fileID)&&(warningLevel>0));
- if (into->numLevels[group]>=from->numLevels[group]) {
- resultSyms= into->syms[group];
- resultActs= into->acts[group];
- resultWidth= into->numLevels[group];
- }
- else {
- resultSyms= from->syms[group];
- resultActs= from->acts[group];
- resultWidth= from->numLevels[group];
- }
- if (resultSyms==NULL) {
- resultSyms= uTypedCalloc(resultWidth,KeySym);
- if (!resultSyms) {
- WSGO("Could not allocate symbols for group merge\n");
- ACTION2("Group %d of key %s not merged\n",group,
- longText(into->name,XkbMessage));
- return False;
- }
- }
- if ((resultActs==NULL)&&(into->acts[group]||from->acts[group])) {
- resultActs= uTypedCalloc(resultWidth,XkbAction);
- if (!resultActs) {
- WSGO("Could not allocate actions for group merge\n");
- ACTION2("Group %d of key %s not merged\n",group,
- longText(into->name,XkbMessage));
- return False;
- }
- }
- for (i=0;i<resultWidth;i++) {
- KeySym fromSym,toSym;
- if (from->syms[group] && (i<from->numLevels[group]))
- fromSym= from->syms[group][i];
- else fromSym= NoSymbol;
- if (into->syms[group] && (i<into->numLevels[group]))
- toSym= into->syms[group][i];
- else toSym= NoSymbol;
- if ((fromSym==NoSymbol)||(fromSym==toSym))
- resultSyms[i]= toSym;
- else if (toSym==NoSymbol)
- resultSyms[i]= fromSym;
- else {
- KeySym use,ignore;
- if (clobber) { use= fromSym; ignore= toSym; }
- else { use= toSym; ignore= fromSym; }
- if (report) {
- WARN3("Multiple symbols for level %d/group %d on key %s\n",
- i+1,group+1,longText(into->name,XkbMessage));
- ACTION2("Using %s, ignoring %s\n",XkbKeysymText(use,XkbMessage),
- XkbKeysymText(ignore,XkbMessage));
- }
- resultSyms[i]= use;
- }
- if (resultActs!=NULL) {
- XkbAction *fromAct,*toAct;
- fromAct= (from->acts[group]?&from->acts[group][i]:NULL);
- toAct= (into->acts[group]?&into->acts[group][i]:NULL);
- if (((fromAct==NULL)||(fromAct->type==XkbSA_NoAction))&&
- (toAct!=NULL)) {
- resultActs[i]= *toAct;
- }
- else if (((toAct==NULL)||(toAct->type==XkbSA_NoAction))&&
- (fromAct!=NULL)) {
- resultActs[i]= *fromAct;
- }
- else {
- XkbAction *use,*ignore;
- if (clobber) { use= fromAct; ignore= toAct; }
- else { use= toAct; ignore= fromAct; }
- if (report) {
- WARN3("Multiple actions for level %d/group %d on key %s\n",
- i+1,group+1,longText(into->name,XkbMessage));
- ACTION2("Using %s, ignoring %s\n",
- XkbActionTypeText(use->type,XkbMessage),
- XkbActionTypeText(ignore->type,XkbMessage));
- }
- resultActs[i]= *use;
- }
- }
- }
- if ((into->syms[group]!=NULL)&&(resultSyms!=into->syms[group]))
- uFree(into->syms[group]);
- if ((from->syms[group]!=NULL)&&(resultSyms!=from->syms[group]))
- uFree(from->syms[group]);
- if ((into->acts[group]!=NULL)&&(resultActs!=into->acts[group]))
- uFree(into->acts[group]);
- if ((from->acts[group]!=NULL)&&(resultActs!=from->acts[group]))
- uFree(from->acts[group]);
- into->numLevels[group]= resultWidth;
- into->syms[group]= resultSyms;
- from->syms[group]= NULL;
- into->acts[group]= resultActs;
- from->acts[group]= NULL;
- into->symsDefined|= (1<<group);
- from->symsDefined&= ~(1<<group);
- into->actsDefined|= (1<<group);
- from->actsDefined&= ~(1<<group);
+ KeySym *resultSyms;
+ XkbAction *resultActs;
+ int resultWidth;
+ register int i;
+ Bool report, clobber;
+
+ clobber = (from->defs.merge != MergeAugment);
+ report = (warningLevel > 9) ||
+ ((into->defs.fileID == from->defs.fileID) && (warningLevel > 0));
+ if (into->numLevels[group] >= from->numLevels[group])
+ {
+ resultSyms = into->syms[group];
+ resultActs = into->acts[group];
+ resultWidth = into->numLevels[group];
+ }
+ else
+ {
+ resultSyms = from->syms[group];
+ resultActs = from->acts[group];
+ resultWidth = from->numLevels[group];
+ }
+ if (resultSyms == NULL)
+ {
+ resultSyms = uTypedCalloc(resultWidth, KeySym);
+ if (!resultSyms)
+ {
+ WSGO("Could not allocate symbols for group merge\n");
+ ACTION2("Group %d of key %s not merged\n", group,
+ longText(into->name, XkbMessage));
+ return False;
+ }
+ }
+ if ((resultActs == NULL) && (into->acts[group] || from->acts[group]))
+ {
+ resultActs = uTypedCalloc(resultWidth, XkbAction);
+ if (!resultActs)
+ {
+ WSGO("Could not allocate actions for group merge\n");
+ ACTION2("Group %d of key %s not merged\n", group,
+ longText(into->name, XkbMessage));
+ return False;
+ }
+ }
+ for (i = 0; i < resultWidth; i++)
+ {
+ KeySym fromSym, toSym;
+ if (from->syms[group] && (i < from->numLevels[group]))
+ fromSym = from->syms[group][i];
+ else
+ fromSym = NoSymbol;
+ if (into->syms[group] && (i < into->numLevels[group]))
+ toSym = into->syms[group][i];
+ else
+ toSym = NoSymbol;
+ if ((fromSym == NoSymbol) || (fromSym == toSym))
+ resultSyms[i] = toSym;
+ else if (toSym == NoSymbol)
+ resultSyms[i] = fromSym;
+ else
+ {
+ KeySym use, ignore;
+ if (clobber)
+ {
+ use = fromSym;
+ ignore = toSym;
+ }
+ else
+ {
+ use = toSym;
+ ignore = fromSym;
+ }
+ if (report)
+ {
+ WARN3
+ ("Multiple symbols for level %d/group %d on key %s\n",
+ i + 1, group + 1, longText(into->name, XkbMessage));
+ ACTION2("Using %s, ignoring %s\n",
+ XkbKeysymText(use, XkbMessage),
+ XkbKeysymText(ignore, XkbMessage));
+ }
+ resultSyms[i] = use;
+ }
+ if (resultActs != NULL)
+ {
+ XkbAction *fromAct, *toAct;
+ fromAct = (from->acts[group] ? &from->acts[group][i] : NULL);
+ toAct = (into->acts[group] ? &into->acts[group][i] : NULL);
+ if (((fromAct == NULL) || (fromAct->type == XkbSA_NoAction))
+ && (toAct != NULL))
+ {
+ resultActs[i] = *toAct;
+ }
+ else if (((toAct == NULL) || (toAct->type == XkbSA_NoAction))
+ && (fromAct != NULL))
+ {
+ resultActs[i] = *fromAct;
+ }
+ else
+ {
+ XkbAction *use, *ignore;
+ if (clobber)
+ {
+ use = fromAct;
+ ignore = toAct;
+ }
+ else
+ {
+ use = toAct;
+ ignore = fromAct;
+ }
+ if (report)
+ {
+ WARN3
+ ("Multiple actions for level %d/group %d on key %s\n",
+ i + 1, group + 1, longText(into->name, XkbMessage));
+ ACTION2("Using %s, ignoring %s\n",
+ XkbActionTypeText(use->type, XkbMessage),
+ XkbActionTypeText(ignore->type, XkbMessage));
+ }
+ resultActs[i] = *use;
+ }
+ }
+ }
+ if ((into->syms[group] != NULL) && (resultSyms != into->syms[group]))
+ uFree(into->syms[group]);
+ if ((from->syms[group] != NULL) && (resultSyms != from->syms[group]))
+ uFree(from->syms[group]);
+ if ((into->acts[group] != NULL) && (resultActs != into->acts[group]))
+ uFree(into->acts[group]);
+ if ((from->acts[group] != NULL) && (resultActs != from->acts[group]))
+ uFree(from->acts[group]);
+ into->numLevels[group] = resultWidth;
+ into->syms[group] = resultSyms;
+ from->syms[group] = NULL;
+ into->acts[group] = resultActs;
+ from->acts[group] = NULL;
+ into->symsDefined |= (1 << group);
+ from->symsDefined &= ~(1 << group);
+ into->actsDefined |= (1 << group);
+ from->actsDefined &= ~(1 << group);
return True;
}
static Bool
-MergeKeys(SymbolsInfo *info,KeyInfo *into,KeyInfo *from)
+MergeKeys(SymbolsInfo * info, KeyInfo * into, KeyInfo * from)
{
-register int i;
-unsigned collide= 0;
-Bool report;
-
- if (from->defs.merge==MergeReplace) {
- for (i=0;i<XkbNumKbdGroups;i++) {
- if (into->numLevels[i]!=0) {
- if (into->syms[i])
- uFree(into->syms[i]);
- if (into->acts[i])
- uFree(into->acts[i]);
- }
- }
- *into= *from;
- bzero(from,sizeof(KeyInfo));
- return True;
- }
- report= ((warningLevel>9)||
- ((into->defs.fileID==from->defs.fileID)&&(warningLevel>0)));
- for (i=0;i<XkbNumKbdGroups;i++) {
- if (from->numLevels[i]>0) {
- if (into->numLevels[i]==0) {
- into->numLevels[i]= from->numLevels[i];
- into->syms[i]= from->syms[i];
- into->acts[i]= from->acts[i];
- into->symsDefined|= (1<<i);
- from->syms[i]= NULL;
- from->acts[i]= NULL;
- from->numLevels[i]= 0;
- from->symsDefined&= ~(1<<i);
- if (into->syms[i]) into->defs.defined|= _Key_Syms;
- if (into->acts[i]) into->defs.defined|= _Key_Acts;
- }
- else {
- if (report) {
- if (into->syms[i]) collide|= _Key_Syms;
- if (into->acts[i]) collide|= _Key_Acts;
- }
- MergeKeyGroups(info,into,from,(unsigned)i);
- }
- }
- if (from->types[i]!=None) {
- if ((into->types[i]!=None)&&(report)&&
- (into->types[i]!=from->types[i])) {
- Atom use,ignore;
- collide|= _Key_Types;
- if (from->defs.merge!=MergeAugment) {
- use= from->types[i];
- ignore= into->types[i];
- }
- else {
- use= into->types[i];
- ignore= from->types[i];
- }
- WARN2("Multiple definitions for group %d type of key %s\n",
- i,longText(into->name,XkbMessage));
- ACTION2("Using %s, ignoring %s\n",
- XkbAtomText(NULL,use,XkbMessage),
- XkbAtomText(NULL,ignore,XkbMessage));
- }
- if ((from->defs.merge!=MergeAugment)||(into->types[i]==None)) {
- into->types[i]= from->types[i];
- }
- }
- }
- if (UseNewField(_Key_Behavior,&into->defs,&from->defs,&collide)) {
- into->behavior= from->behavior;
- into->nameForOverlayKey= from->nameForOverlayKey;
- into->defs.defined|= _Key_Behavior;
- }
- if (UseNewField(_Key_VModMap,&into->defs,&from->defs,&collide)) {
- into->vmodmap= from->vmodmap;
- into->defs.defined|= _Key_VModMap;
- }
- if (UseNewField(_Key_Repeat,&into->defs,&from->defs,&collide)) {
- into->repeat= from->repeat;
- into->defs.defined|= _Key_Repeat;
- }
- if (UseNewField(_Key_Type_Dflt,&into->defs,&from->defs,&collide)) {
- into->dfltType= from->dfltType;
- into->defs.defined|= _Key_Type_Dflt;
- }
- if (UseNewField(_Key_GroupInfo,&into->defs,&from->defs,&collide)) {
- into->groupInfo= from->groupInfo;
- into->defs.defined|= _Key_GroupInfo;
- }
- if ( collide ) {
- WARN1("Symbol map for key %s redefined\n",
- longText(into->name,XkbMessage));
- ACTION1("Using %s definition for conflicting fields\n",
- (from->defs.merge==MergeAugment?"first":"last"));
+ register int i;
+ unsigned collide = 0;
+ Bool report;
+
+ if (from->defs.merge == MergeReplace)
+ {
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ if (into->numLevels[i] != 0)
+ {
+ if (into->syms[i])
+ uFree(into->syms[i]);
+ if (into->acts[i])
+ uFree(into->acts[i]);
+ }
+ }
+ *into = *from;
+ bzero(from, sizeof(KeyInfo));
+ return True;
+ }
+ report = ((warningLevel > 9) ||
+ ((into->defs.fileID == from->defs.fileID)
+ && (warningLevel > 0)));
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ if (from->numLevels[i] > 0)
+ {
+ if (into->numLevels[i] == 0)
+ {
+ into->numLevels[i] = from->numLevels[i];
+ into->syms[i] = from->syms[i];
+ into->acts[i] = from->acts[i];
+ into->symsDefined |= (1 << i);
+ from->syms[i] = NULL;
+ from->acts[i] = NULL;
+ from->numLevels[i] = 0;
+ from->symsDefined &= ~(1 << i);
+ if (into->syms[i])
+ into->defs.defined |= _Key_Syms;
+ if (into->acts[i])
+ into->defs.defined |= _Key_Acts;
+ }
+ else
+ {
+ if (report)
+ {
+ if (into->syms[i])
+ collide |= _Key_Syms;
+ if (into->acts[i])
+ collide |= _Key_Acts;
+ }
+ MergeKeyGroups(info, into, from, (unsigned) i);
+ }
+ }
+ if (from->types[i] != None)
+ {
+ if ((into->types[i] != None) && (report) &&
+ (into->types[i] != from->types[i]))
+ {
+ Atom use, ignore;
+ collide |= _Key_Types;
+ if (from->defs.merge != MergeAugment)
+ {
+ use = from->types[i];
+ ignore = into->types[i];
+ }
+ else
+ {
+ use = into->types[i];
+ ignore = from->types[i];
+ }
+ WARN2
+ ("Multiple definitions for group %d type of key %s\n",
+ i, longText(into->name, XkbMessage));
+ ACTION2("Using %s, ignoring %s\n",
+ XkbAtomText(NULL, use, XkbMessage),
+ XkbAtomText(NULL, ignore, XkbMessage));
+ }
+ if ((from->defs.merge != MergeAugment)
+ || (into->types[i] == None))
+ {
+ into->types[i] = from->types[i];
+ }
+ }
+ }
+ if (UseNewField(_Key_Behavior, &into->defs, &from->defs, &collide))
+ {
+ into->behavior = from->behavior;
+ into->nameForOverlayKey = from->nameForOverlayKey;
+ into->defs.defined |= _Key_Behavior;
+ }
+ if (UseNewField(_Key_VModMap, &into->defs, &from->defs, &collide))
+ {
+ into->vmodmap = from->vmodmap;
+ into->defs.defined |= _Key_VModMap;
+ }
+ if (UseNewField(_Key_Repeat, &into->defs, &from->defs, &collide))
+ {
+ into->repeat = from->repeat;
+ into->defs.defined |= _Key_Repeat;
+ }
+ if (UseNewField(_Key_Type_Dflt, &into->defs, &from->defs, &collide))
+ {
+ into->dfltType = from->dfltType;
+ into->defs.defined |= _Key_Type_Dflt;
+ }
+ if (UseNewField(_Key_GroupInfo, &into->defs, &from->defs, &collide))
+ {
+ into->groupInfo = from->groupInfo;
+ into->defs.defined |= _Key_GroupInfo;
+ }
+ if (collide)
+ {
+ WARN1("Symbol map for key %s redefined\n",
+ longText(into->name, XkbMessage));
+ ACTION1("Using %s definition for conflicting fields\n",
+ (from->defs.merge == MergeAugment ? "first" : "last"));
}
return True;
}
static Bool
-AddKeySymbols(SymbolsInfo *info,KeyInfo *key,XkbDescPtr xkb)
+AddKeySymbols(SymbolsInfo * info, KeyInfo * key, XkbDescPtr xkb)
{
-register int i;
-unsigned long real_name;
-
- for (i=0;i<info->nKeys;i++) {
- if (info->keys[i].name==key->name)
- return MergeKeys(info,&info->keys[i],key);
- }
- if(FindKeyNameForAlias(xkb, key->name, &real_name)) {
- for (i=0;i<info->nKeys;i++) {
- if (info->keys[i].name==real_name)
- return MergeKeys(info,&info->keys[i],key);
+ register int i;
+ unsigned long real_name;
+
+ for (i = 0; i < info->nKeys; i++)
+ {
+ if (info->keys[i].name == key->name)
+ return MergeKeys(info, &info->keys[i], key);
+ }
+ if (FindKeyNameForAlias(xkb, key->name, &real_name))
+ {
+ for (i = 0; i < info->nKeys; i++)
+ {
+ if (info->keys[i].name == real_name)
+ return MergeKeys(info, &info->keys[i], key);
}
}
- if (info->nKeys>=info->szKeys) {
- info->szKeys+= SYMBOLS_CHUNK;
- info->keys= uTypedRecalloc(info->keys,info->nKeys,info->szKeys,KeyInfo);
- if (!info->keys) {
- WSGO("Could not allocate key symbols descriptions\n");
- ACTION("Some key symbols definitions may be lost\n");
- return False;
- }
+ if (info->nKeys >= info->szKeys)
+ {
+ info->szKeys += SYMBOLS_CHUNK;
+ info->keys =
+ uTypedRecalloc(info->keys, info->nKeys, info->szKeys, KeyInfo);
+ if (!info->keys)
+ {
+ WSGO("Could not allocate key symbols descriptions\n");
+ ACTION("Some key symbols definitions may be lost\n");
+ return False;
+ }
}
- return CopyKeyInfo(key,&info->keys[info->nKeys++],True);
+ return CopyKeyInfo(key, &info->keys[info->nKeys++], True);
}
static Bool
-AddModMapEntry(SymbolsInfo *info,ModMapEntry *new)
+AddModMapEntry(SymbolsInfo * info, ModMapEntry * new)
{
-ModMapEntry * mm;
-Bool clobber;
-
- clobber= (new->defs.merge!=MergeAugment);
- for (mm=info->modMap;mm!=NULL;mm= (ModMapEntry *)mm->defs.next) {
- if (new->haveSymbol&&mm->haveSymbol&&(new->u.keySym==mm->u.keySym)) {
- unsigned use,ignore;
- if (mm->modifier!=new->modifier) {
- if (clobber) {
- use= new->modifier;
- ignore= mm->modifier;
- }
- else {
- use= mm->modifier;
- ignore= new->modifier;
- }
- ERROR1("%s added to symbol map for multiple modifiers\n",
- XkbKeysymText(new->u.keySym,XkbMessage));
- ACTION2("Using %s, ignoring %s.\n",
- XkbModIndexText(use,XkbMessage),
- XkbModIndexText(ignore,XkbMessage));
- mm->modifier= use;
- }
- return True;
- }
- if ((!new->haveSymbol)&&(!mm->haveSymbol)&&
- (new->u.keyName==mm->u.keyName)) {
- unsigned use,ignore;
- if (mm->modifier!=new->modifier) {
- if (clobber) {
- use= new->modifier;
- ignore= mm->modifier;
- }
- else {
- use= mm->modifier;
- ignore= new->modifier;
- }
- ERROR1("Key %s added to map for multiple modifiers\n",
- longText(new->u.keyName,XkbMessage));
- ACTION2("Using %s, ignoring %s.\n",
- XkbModIndexText(use,XkbMessage),
- XkbModIndexText(ignore,XkbMessage));
- mm->modifier= use;
- }
- return True;
- }
- }
- mm= uTypedAlloc(ModMapEntry);
- if (mm==NULL) {
- WSGO("Could not allocate modifier map entry\n");
- ACTION1("Modifier map for %s will be incomplete\n",
- XkbModIndexText(new->modifier,XkbMessage));
- return False;
- }
- *mm= *new;
- mm->defs.next= &info->modMap->defs;
- info->modMap= mm;
+ ModMapEntry *mm;
+ Bool clobber;
+
+ clobber = (new->defs.merge != MergeAugment);
+ for (mm = info->modMap; mm != NULL; mm = (ModMapEntry *) mm->defs.next)
+ {
+ if (new->haveSymbol && mm->haveSymbol
+ && (new->u.keySym == mm->u.keySym))
+ {
+ unsigned use, ignore;
+ if (mm->modifier != new->modifier)
+ {
+ if (clobber)
+ {
+ use = new->modifier;
+ ignore = mm->modifier;
+ }
+ else
+ {
+ use = mm->modifier;
+ ignore = new->modifier;
+ }
+ ERROR1
+ ("%s added to symbol map for multiple modifiers\n",
+ XkbKeysymText(new->u.keySym, XkbMessage));
+ ACTION2("Using %s, ignoring %s.\n",
+ XkbModIndexText(use, XkbMessage),
+ XkbModIndexText(ignore, XkbMessage));
+ mm->modifier = use;
+ }
+ return True;
+ }
+ if ((!new->haveSymbol) && (!mm->haveSymbol) &&
+ (new->u.keyName == mm->u.keyName))
+ {
+ unsigned use, ignore;
+ if (mm->modifier != new->modifier)
+ {
+ if (clobber)
+ {
+ use = new->modifier;
+ ignore = mm->modifier;
+ }
+ else
+ {
+ use = mm->modifier;
+ ignore = new->modifier;
+ }
+ ERROR1("Key %s added to map for multiple modifiers\n",
+ longText(new->u.keyName, XkbMessage));
+ ACTION2("Using %s, ignoring %s.\n",
+ XkbModIndexText(use, XkbMessage),
+ XkbModIndexText(ignore, XkbMessage));
+ mm->modifier = use;
+ }
+ return True;
+ }
+ }
+ mm = uTypedAlloc(ModMapEntry);
+ if (mm == NULL)
+ {
+ WSGO("Could not allocate modifier map entry\n");
+ ACTION1("Modifier map for %s will be incomplete\n",
+ XkbModIndexText(new->modifier, XkbMessage));
+ return False;
+ }
+ *mm = *new;
+ mm->defs.next = &info->modMap->defs;
+ info->modMap = mm;
return True;
}
/***====================================================================***/
static void
-MergeIncludedSymbols(SymbolsInfo *into,SymbolsInfo *from,
- unsigned merge,XkbDescPtr xkb)
+MergeIncludedSymbols(SymbolsInfo * into, SymbolsInfo * from,
+ unsigned merge, XkbDescPtr xkb)
{
-register int i;
-KeyInfo * key;
-
- if (from->errorCount>0) {
- into->errorCount+= from->errorCount;
- return;
- }
- if (into->name==NULL) {
- into->name= from->name;
- from->name= NULL;
- }
- for (i=0;i<XkbNumKbdGroups;i++) {
- if (from->groupNames[i]!=None) {
- if ((merge!=MergeAugment)||(into->groupNames[i]==None))
- into->groupNames[i]= from->groupNames[i];
- }
- }
- for (i=0,key=from->keys;i<from->nKeys;i++,key++) {
- if (merge!=MergeDefault)
- key->defs.merge= merge;
- if (!AddKeySymbols(into,key,xkb))
- into->errorCount++;
- }
- if (from->modMap!=NULL) {
- ModMapEntry *mm,*next;
- for (mm=from->modMap;mm!=NULL;mm=next) {
- if (merge!=MergeDefault)
- mm->defs.merge= merge;
- if (!AddModMapEntry(into,mm))
- into->errorCount++;
- next= (ModMapEntry *)mm->defs.next;
- uFree(mm);
- }
- from->modMap= NULL;
- }
- if (!MergeAliases(&into->aliases,&from->aliases,merge))
- into->errorCount++;
+ register int i;
+ KeyInfo *key;
+
+ if (from->errorCount > 0)
+ {
+ into->errorCount += from->errorCount;
+ return;
+ }
+ if (into->name == NULL)
+ {
+ into->name = from->name;
+ from->name = NULL;
+ }
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ if (from->groupNames[i] != None)
+ {
+ if ((merge != MergeAugment) || (into->groupNames[i] == None))
+ into->groupNames[i] = from->groupNames[i];
+ }
+ }
+ for (i = 0, key = from->keys; i < from->nKeys; i++, key++)
+ {
+ if (merge != MergeDefault)
+ key->defs.merge = merge;
+ if (!AddKeySymbols(into, key, xkb))
+ into->errorCount++;
+ }
+ if (from->modMap != NULL)
+ {
+ ModMapEntry *mm, *next;
+ for (mm = from->modMap; mm != NULL; mm = next)
+ {
+ if (merge != MergeDefault)
+ mm->defs.merge = merge;
+ if (!AddModMapEntry(into, mm))
+ into->errorCount++;
+ next = (ModMapEntry *) mm->defs.next;
+ uFree(mm);
+ }
+ from->modMap = NULL;
+ }
+ if (!MergeAliases(&into->aliases, &from->aliases, merge))
+ into->errorCount++;
return;
}
-typedef void (*FileHandler)(
- XkbFile * /* rtrn */,
- XkbDescPtr /* xkb */,
- unsigned /* merge */,
- SymbolsInfo * /* included */
-);
+typedef void (*FileHandler) (XkbFile * /* rtrn */ ,
+ XkbDescPtr /* xkb */ ,
+ unsigned /* merge */ ,
+ SymbolsInfo * /* included */
+ );
static Bool
-HandleIncludeSymbols( IncludeStmt * stmt,
- XkbDescPtr xkb,
- SymbolsInfo * info,
- FileHandler hndlr)
+HandleIncludeSymbols(IncludeStmt * stmt,
+ XkbDescPtr xkb, SymbolsInfo * info, FileHandler hndlr)
{
-unsigned newMerge;
-XkbFile * rtrn;
-SymbolsInfo included;
-Bool haveSelf;
-
- haveSelf= False;
- if ((stmt->file==NULL)&&(stmt->map==NULL)) {
- haveSelf= True;
- included= *info;
- bzero(info,sizeof(SymbolsInfo));
- }
- else if (ProcessIncludeFile(stmt,XkmSymbolsIndex,&rtrn,&newMerge)) {
- InitSymbolsInfo(&included,xkb);
- included.fileID= included.dflt.defs.fileID= rtrn->id;
- included.merge= included.dflt.defs.merge= MergeOverride;
- if (stmt->modifier) {
- included.explicit_group= atoi(stmt->modifier) - 1;
- } else {
- included.explicit_group= info->explicit_group;
- }
- (*hndlr)(rtrn,xkb,MergeOverride,&included);
- if (stmt->stmt!=NULL) {
- if (included.name!=NULL)
- uFree(included.name);
- included.name= stmt->stmt;
- stmt->stmt= NULL;
- }
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- if ((stmt->next!=NULL)&&(included.errorCount<1)) {
- IncludeStmt * next;
- unsigned op;
- SymbolsInfo next_incl;
-
- for (next=stmt->next;next!=NULL;next=next->next) {
- if ((next->file==NULL)&&(next->map==NULL)) {
- haveSelf= True;
- MergeIncludedSymbols(&included,info,next->merge,xkb);
- FreeSymbolsInfo(info);
- }
- else if (ProcessIncludeFile(next,XkmSymbolsIndex,&rtrn,&op)) {
- InitSymbolsInfo(&next_incl,xkb);
- next_incl.fileID= next_incl.dflt.defs.fileID= rtrn->id;
- next_incl.merge= next_incl.dflt.defs.merge= MergeOverride;
- if (next->modifier) {
- next_incl.explicit_group= atoi(next->modifier) - 1;
- } else {
- next_incl.explicit_group= info->explicit_group;
+ unsigned newMerge;
+ XkbFile *rtrn;
+ SymbolsInfo included;
+ Bool haveSelf;
+
+ haveSelf = False;
+ if ((stmt->file == NULL) && (stmt->map == NULL))
+ {
+ haveSelf = True;
+ included = *info;
+ bzero(info, sizeof(SymbolsInfo));
+ }
+ else if (ProcessIncludeFile(stmt, XkmSymbolsIndex, &rtrn, &newMerge))
+ {
+ InitSymbolsInfo(&included, xkb);
+ included.fileID = included.dflt.defs.fileID = rtrn->id;
+ included.merge = included.dflt.defs.merge = MergeOverride;
+ if (stmt->modifier)
+ {
+ included.explicit_group = atoi(stmt->modifier) - 1;
+ }
+ else
+ {
+ included.explicit_group = info->explicit_group;
+ }
+ (*hndlr) (rtrn, xkb, MergeOverride, &included);
+ if (stmt->stmt != NULL)
+ {
+ if (included.name != NULL)
+ uFree(included.name);
+ included.name = stmt->stmt;
+ stmt->stmt = NULL;
+ }
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ if ((stmt->next != NULL) && (included.errorCount < 1))
+ {
+ IncludeStmt *next;
+ unsigned op;
+ SymbolsInfo next_incl;
+
+ for (next = stmt->next; next != NULL; next = next->next)
+ {
+ if ((next->file == NULL) && (next->map == NULL))
+ {
+ haveSelf = True;
+ MergeIncludedSymbols(&included, info, next->merge, xkb);
+ FreeSymbolsInfo(info);
+ }
+ else if (ProcessIncludeFile(next, XkmSymbolsIndex, &rtrn, &op))
+ {
+ InitSymbolsInfo(&next_incl, xkb);
+ next_incl.fileID = next_incl.dflt.defs.fileID = rtrn->id;
+ next_incl.merge = next_incl.dflt.defs.merge = MergeOverride;
+ if (next->modifier)
+ {
+ next_incl.explicit_group = atoi(next->modifier) - 1;
}
- (*hndlr)(rtrn,xkb,MergeOverride,&next_incl);
- MergeIncludedSymbols(&included,&next_incl,op,xkb);
- FreeSymbolsInfo(&next_incl);
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- }
+ else
+ {
+ next_incl.explicit_group = info->explicit_group;
+ }
+ (*hndlr) (rtrn, xkb, MergeOverride, &next_incl);
+ MergeIncludedSymbols(&included, &next_incl, op, xkb);
+ FreeSymbolsInfo(&next_incl);
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ }
}
if (haveSelf)
- *info= included;
- else {
- MergeIncludedSymbols(info,&included,newMerge,xkb);
- FreeSymbolsInfo(&included);
+ *info = included;
+ else
+ {
+ MergeIncludedSymbols(info, &included, newMerge, xkb);
+ FreeSymbolsInfo(&included);
}
- return (info->errorCount==0);
+ return (info->errorCount == 0);
}
-static LookupEntry groupNames[]= {
- { "group1", 1 },
- { "group2", 2 },
- { "group3", 3 },
- { "group4", 4 },
- { "group5", 5 },
- { "group6", 6 },
- { "group7", 7 },
- { "group8", 8 },
- { NULL, 0 }
+static LookupEntry groupNames[] = {
+ {"group1", 1},
+ {"group2", 2},
+ {"group3", 3},
+ {"group4", 4},
+ {"group5", 5},
+ {"group6", 6},
+ {"group7", 7},
+ {"group8", 8},
+ {NULL, 0}
};
@@ -747,765 +864,873 @@ static LookupEntry groupNames[]= {
#define ACTIONS 2
static Bool
-GetGroupIndex( KeyInfo * key,
- ExprDef * arrayNdx,
- unsigned what,
- unsigned * ndx_rtrn)
+GetGroupIndex(KeyInfo * key,
+ ExprDef * arrayNdx, unsigned what, unsigned *ndx_rtrn)
{
-const char *name;
-ExprResult tmp;
-
- if (what==SYMBOLS) name= "symbols";
- else name= "actions";
-
- if (arrayNdx==NULL) {
- register int i;
- unsigned defined;
- if (what==SYMBOLS) defined= key->symsDefined;
- else defined= key->actsDefined;
-
- for (i=0;i<XkbNumKbdGroups;i++) {
- if ((defined&(1<<i))==0) {
- *ndx_rtrn= i;
- return True;
- }
- }
- ERROR3("Too many groups of %s for key %s (max %d)\n",name,
- longText(key->name,XkbMessage),
- XkbNumKbdGroups+1);
- ACTION1("Ignoring %s defined for extra groups\n",name);
- return False;
- }
- if (!ExprResolveInteger(arrayNdx,&tmp,SimpleLookup,(XPointer)groupNames)) {
- ERROR2("Illegal group index for %s of key %s\n",name,
- longText(key->name,XkbMessage));
- ACTION("Definition with non-integer array index ignored\n");
- return False;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbNumKbdGroups)) {
- ERROR3("Group index for %s of key %s is out of range (1..%d)\n",name,
- longText(key->name,XkbMessage),
- XkbNumKbdGroups+1);
- ACTION2("Ignoring %s for group %d\n",name,tmp.uval);
- return False;
- }
- *ndx_rtrn= tmp.uval-1;
+ const char *name;
+ ExprResult tmp;
+
+ if (what == SYMBOLS)
+ name = "symbols";
+ else
+ name = "actions";
+
+ if (arrayNdx == NULL)
+ {
+ register int i;
+ unsigned defined;
+ if (what == SYMBOLS)
+ defined = key->symsDefined;
+ else
+ defined = key->actsDefined;
+
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ if ((defined & (1 << i)) == 0)
+ {
+ *ndx_rtrn = i;
+ return True;
+ }
+ }
+ ERROR3("Too many groups of %s for key %s (max %d)\n", name,
+ longText(key->name, XkbMessage), XkbNumKbdGroups + 1);
+ ACTION1("Ignoring %s defined for extra groups\n", name);
+ return False;
+ }
+ if (!ExprResolveInteger
+ (arrayNdx, &tmp, SimpleLookup, (XPointer) groupNames))
+ {
+ ERROR2("Illegal group index for %s of key %s\n", name,
+ longText(key->name, XkbMessage));
+ ACTION("Definition with non-integer array index ignored\n");
+ return False;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbNumKbdGroups))
+ {
+ ERROR3("Group index for %s of key %s is out of range (1..%d)\n",
+ name, longText(key->name, XkbMessage), XkbNumKbdGroups + 1);
+ ACTION2("Ignoring %s for group %d\n", name, tmp.uval);
+ return False;
+ }
+ *ndx_rtrn = tmp.uval - 1;
return True;
}
static Bool
-AddSymbolsToKey( KeyInfo * key,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SymbolsInfo * info)
+AddSymbolsToKey(KeyInfo * key,
+ XkbDescPtr xkb,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, SymbolsInfo * info)
{
-unsigned ndx,nSyms;
-int i;
-
- if (!GetGroupIndex(key,arrayNdx,SYMBOLS,&ndx))
- return False;
- if (value==NULL) {
- key->symsDefined|= (1<<ndx);
- return True;
- }
- if (value->op!=ExprKeysymList) {
- ERROR1("Expected a list of symbols, found %s\n",exprOpText(value->op));
- ACTION2("Ignoring symbols for group %d of %s\n",ndx,
- longText(key->name,XkbMessage));
- return False;
- }
- if (key->syms[ndx]!=NULL) {
- WSGO2("Symbols for key %s, group %d already defined\n",
- longText(key->name,XkbMessage),
- ndx);
- return False;
- }
- nSyms= value->value.list.nSyms;
- if (((key->numLevels[ndx]<nSyms)||(key->syms[ndx]==NULL))&&
- (!ResizeKeyGroup(key,ndx,nSyms,False))) {
- WSGO2("Could not resize group %d of key %s\n",ndx,
- longText(key->name,XkbMessage));
- ACTION("Symbols lost\n");
- return False;
- }
- key->symsDefined|= (1<<ndx);
- memcpy((char *)key->syms[ndx],(char *)value->value.list.syms,
- nSyms*sizeof(KeySym));
- for (i=key->numLevels[ndx]-1;(i>=0)&&(key->syms[ndx][i]==NoSymbol);i--) {
- key->numLevels[ndx]--;
+ unsigned ndx, nSyms;
+ int i;
+
+ if (!GetGroupIndex(key, arrayNdx, SYMBOLS, &ndx))
+ return False;
+ if (value == NULL)
+ {
+ key->symsDefined |= (1 << ndx);
+ return True;
+ }
+ if (value->op != ExprKeysymList)
+ {
+ ERROR1("Expected a list of symbols, found %s\n",
+ exprOpText(value->op));
+ ACTION2("Ignoring symbols for group %d of %s\n", ndx,
+ longText(key->name, XkbMessage));
+ return False;
+ }
+ if (key->syms[ndx] != NULL)
+ {
+ WSGO2("Symbols for key %s, group %d already defined\n",
+ longText(key->name, XkbMessage), ndx);
+ return False;
+ }
+ nSyms = value->value.list.nSyms;
+ if (((key->numLevels[ndx] < nSyms) || (key->syms[ndx] == NULL)) &&
+ (!ResizeKeyGroup(key, ndx, nSyms, False)))
+ {
+ WSGO2("Could not resize group %d of key %s\n", ndx,
+ longText(key->name, XkbMessage));
+ ACTION("Symbols lost\n");
+ return False;
+ }
+ key->symsDefined |= (1 << ndx);
+ memcpy((char *) key->syms[ndx], (char *) value->value.list.syms,
+ nSyms * sizeof(KeySym));
+ for (i = key->numLevels[ndx] - 1;
+ (i >= 0) && (key->syms[ndx][i] == NoSymbol); i--)
+ {
+ key->numLevels[ndx]--;
}
return True;
}
static Bool
-AddActionsToKey( KeyInfo * key,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SymbolsInfo * info)
+AddActionsToKey(KeyInfo * key,
+ XkbDescPtr xkb,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, SymbolsInfo * info)
{
-register int i;
-unsigned ndx,nActs;
-ExprDef * act;
-XkbAnyAction * toAct;
-
- if (!GetGroupIndex(key,arrayNdx,ACTIONS,&ndx))
- return False;
-
- if (value==NULL) {
- key->actsDefined|= (1<<ndx);
- return True;
- }
- if (value->op!=ExprActionList) {
- WSGO1("Bad expression type (%d) for action list value\n",value->op);
- ACTION2("Ignoring actions for group %d of %s\n",ndx,
- longText(key->name,XkbMessage));
- return False;
- }
- if (key->acts[ndx]!=NULL) {
- WSGO2("Actions for key %s, group %d already defined\n",
- longText(key->name,XkbMessage),
- ndx);
- return False;
- }
- for (nActs=0,act= value->value.child;act!=NULL;nActs++) {
- act= (ExprDef *)act->common.next;
- }
- if (nActs<1) {
- WSGO("Action list but not actions in AddActionsToKey\n");
- return False;
- }
- if (((key->numLevels[ndx]<nActs)||(key->acts[ndx]==NULL))&&
- (!ResizeKeyGroup(key,ndx,nActs,True))) {
- WSGO2("Could not resize group %d of key %s\n",ndx,
- longText(key->name,XkbMessage));
- ACTION("Actions lost\n");
- return False;
- }
- key->actsDefined|= (1<<ndx);
-
- toAct= (XkbAnyAction *)key->acts[ndx];
- act= value->value.child;
- for (i=0;i<nActs;i++,toAct++) {
- if (!HandleActionDef(act,xkb,toAct,MergeOverride,info->action)) {
- ERROR1("Illegal action definition for %s\n",
- longText(key->name,XkbMessage));
- ACTION2("Action for group %d/level %d ignored\n",ndx+1,i+1);
- }
- act= (ExprDef *)act->common.next;
+ register int i;
+ unsigned ndx, nActs;
+ ExprDef *act;
+ XkbAnyAction *toAct;
+
+ if (!GetGroupIndex(key, arrayNdx, ACTIONS, &ndx))
+ return False;
+
+ if (value == NULL)
+ {
+ key->actsDefined |= (1 << ndx);
+ return True;
+ }
+ if (value->op != ExprActionList)
+ {
+ WSGO1("Bad expression type (%d) for action list value\n", value->op);
+ ACTION2("Ignoring actions for group %d of %s\n", ndx,
+ longText(key->name, XkbMessage));
+ return False;
+ }
+ if (key->acts[ndx] != NULL)
+ {
+ WSGO2("Actions for key %s, group %d already defined\n",
+ longText(key->name, XkbMessage), ndx);
+ return False;
+ }
+ for (nActs = 0, act = value->value.child; act != NULL; nActs++)
+ {
+ act = (ExprDef *) act->common.next;
+ }
+ if (nActs < 1)
+ {
+ WSGO("Action list but not actions in AddActionsToKey\n");
+ return False;
+ }
+ if (((key->numLevels[ndx] < nActs) || (key->acts[ndx] == NULL)) &&
+ (!ResizeKeyGroup(key, ndx, nActs, True)))
+ {
+ WSGO2("Could not resize group %d of key %s\n", ndx,
+ longText(key->name, XkbMessage));
+ ACTION("Actions lost\n");
+ return False;
+ }
+ key->actsDefined |= (1 << ndx);
+
+ toAct = (XkbAnyAction *) key->acts[ndx];
+ act = value->value.child;
+ for (i = 0; i < nActs; i++, toAct++)
+ {
+ if (!HandleActionDef(act, xkb, toAct, MergeOverride, info->action))
+ {
+ ERROR1("Illegal action definition for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION2("Action for group %d/level %d ignored\n", ndx + 1, i + 1);
+ }
+ act = (ExprDef *) act->common.next;
}
return True;
}
static int
-SetAllowNone(KeyInfo *key,ExprDef *arrayNdx,ExprDef *value)
+SetAllowNone(KeyInfo * key, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult tmp;
-unsigned radio_groups= 0;
-
- if (arrayNdx==NULL) {
- radio_groups= XkbAllRadioGroupsMask;
- }
- else {
- if (!ExprResolveInteger(arrayNdx,&tmp,RadioLookup,NULL)){
- ERROR("Illegal index in group name definition\n");
- ACTION("Definition with non-integer array index ignored\n");
- return False;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbMaxRadioGroups)) {
- ERROR1("Illegal radio group specified (must be 1..%d)\n",
- XkbMaxRadioGroups+1);
- ACTION1("Value of \"allow none\" for group %d ignored\n",tmp.uval);
- return False;
- }
- radio_groups|= (1<<(tmp.uval-1));
- }
- if (!ExprResolveBoolean(value,&tmp,NULL,NULL)) {
- ERROR1("Illegal \"allow none\" value for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Non-boolean value ignored\n");
- return False;
- }
- if (tmp.uval) key->allowNone|= radio_groups;
- else key->allowNone&= ~radio_groups;
+ ExprResult tmp;
+ unsigned radio_groups = 0;
+
+ if (arrayNdx == NULL)
+ {
+ radio_groups = XkbAllRadioGroupsMask;
+ }
+ else
+ {
+ if (!ExprResolveInteger(arrayNdx, &tmp, RadioLookup, NULL))
+ {
+ ERROR("Illegal index in group name definition\n");
+ ACTION("Definition with non-integer array index ignored\n");
+ return False;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbMaxRadioGroups))
+ {
+ ERROR1("Illegal radio group specified (must be 1..%d)\n",
+ XkbMaxRadioGroups + 1);
+ ACTION1("Value of \"allow none\" for group %d ignored\n",
+ tmp.uval);
+ return False;
+ }
+ radio_groups |= (1 << (tmp.uval - 1));
+ }
+ if (!ExprResolveBoolean(value, &tmp, NULL, NULL))
+ {
+ ERROR1("Illegal \"allow none\" value for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Non-boolean value ignored\n");
+ return False;
+ }
+ if (tmp.uval)
+ key->allowNone |= radio_groups;
+ else
+ key->allowNone &= ~radio_groups;
return True;
}
-static LookupEntry lockingEntries[] = {
- { "true", XkbKB_Lock },
- { "yes", XkbKB_Lock },
- { "on", XkbKB_Lock },
- { "false", XkbKB_Default },
- { "no", XkbKB_Default },
- { "off", XkbKB_Default },
- { "permanent", XkbKB_Lock|XkbKB_Permanent },
- { NULL, 0 }
+static LookupEntry lockingEntries[] = {
+ {"true", XkbKB_Lock},
+ {"yes", XkbKB_Lock},
+ {"on", XkbKB_Lock},
+ {"false", XkbKB_Default},
+ {"no", XkbKB_Default},
+ {"off", XkbKB_Default},
+ {"permanent", XkbKB_Lock | XkbKB_Permanent},
+ {NULL, 0}
};
-static LookupEntry repeatEntries[]= {
- { "true", RepeatYes },
- { "yes", RepeatYes },
- { "on", RepeatYes },
- { "false", RepeatNo },
- { "no", RepeatNo },
- { "off", RepeatNo },
- { "default", RepeatUndefined },
- { NULL, 0 }
+static LookupEntry repeatEntries[] = {
+ {"true", RepeatYes},
+ {"yes", RepeatYes},
+ {"on", RepeatYes},
+ {"false", RepeatNo},
+ {"no", RepeatNo},
+ {"off", RepeatNo},
+ {"default", RepeatUndefined},
+ {NULL, 0}
};
-static LookupEntry rgEntries[]= {
- { "none", 0 },
- { NULL, 0 }
+static LookupEntry rgEntries[] = {
+ {"none", 0},
+ {NULL, 0}
};
static Bool
-SetSymbolsField( KeyInfo * key,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SymbolsInfo * info)
+SetSymbolsField(KeyInfo * key,
+ XkbDescPtr xkb,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, SymbolsInfo * info)
{
-Bool ok= True;
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"type")==0) {
- ExprResult ndx;
- if ((!ExprResolveString(value,&tmp,NULL,NULL))&&(warningLevel>0)) {
- WARN("The type field of a key symbol map must be a string\n");
- ACTION("Ignoring illegal type definition\n");
- }
- if (arrayNdx==NULL) {
- key->dfltType= XkbInternAtom(NULL,tmp.str,False);
- key->defs.defined|= _Key_Type_Dflt;
- }
- else if (!ExprResolveInteger(arrayNdx,&ndx,SimpleLookup,
- (XPointer)groupNames)) {
- ERROR1("Illegal group index for type of key %s\n",
- longText(key->name,XkbMessage));
- ACTION("Definition with non-integer array index ignored\n");
- return False;
- }
- else if ((ndx.uval<1)||(ndx.uval>XkbNumKbdGroups)) {
- ERROR2("Group index for type of key %s is out of range (1..%d)\n",
- longText(key->name,XkbMessage),
- XkbNumKbdGroups+1);
- ACTION1("Ignoring type for group %d\n",ndx.uval);
- return False;
- }
- else {
- key->types[ndx.uval-1]= XkbInternAtom(NULL,tmp.str,False);
- key->typesDefined|= (1<<(ndx.uval-1));
- }
- }
- else if (uStrCaseCmp(field,"symbols")==0)
- return AddSymbolsToKey(key,xkb,field,arrayNdx,value,info);
- else if (uStrCaseCmp(field,"actions")==0)
- return AddActionsToKey(key,xkb,field,arrayNdx,value,info);
- else if ((uStrCaseCmp(field,"vmods")==0)||
- (uStrCaseCmp(field,"virtualmods")==0)||
- (uStrCaseCmp(field,"virtualmodifiers")==0)) {
- ok= ExprResolveModMask(value,&tmp,LookupVModMask,(XPointer)xkb);
- if (ok) {
- key->vmodmap= (tmp.uval>>8);
- key->defs.defined|= _Key_VModMap;
- }
- else {
- ERROR1("Expected a virtual modifier mask, found %s\n",
- exprOpText(value->op));
- ACTION1("Ignoring virtual modifiers definition for key %s\n",
- longText(key->name,XkbMessage));
- }
- }
- else if ((uStrCaseCmp(field,"locking")==0)||(uStrCaseCmp(field,"lock")==0)||
- (uStrCaseCmp(field,"locks")==0)) {
- ok= ExprResolveEnum(value,&tmp,lockingEntries);
- if (ok)
- key->behavior.type= tmp.uval;
- key->defs.defined|= _Key_Behavior;
- }
- else if ((uStrCaseCmp(field,"radiogroup")==0)||
- (uStrCaseCmp(field,"permanentradiogroup")==0)) {
- Bool permanent= False;
- if (uStrCaseCmp(field,"permanentradiogroup")==0)
- permanent= True;
- ok= ExprResolveInteger(value,&tmp,SimpleLookup,(XPointer)rgEntries);
- if (!ok) {
- ERROR1("Illegal radio group specification for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Non-integer radio group ignored\n");
- return False;
- }
- if (tmp.uval==0) {
- key->behavior.type= XkbKB_Default;
- key->behavior.data= 0;
- return ok;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbMaxRadioGroups)) {
- ERROR1("Radio group specification for %s out of range (1..32)\n",
- longText(key->name,XkbMessage));
- ACTION1("Illegal radio group %d ignored\n",tmp.uval);
- return False;
- }
- key->behavior.type= XkbKB_RadioGroup|(permanent?XkbKB_Permanent:0);
- key->behavior.data= tmp.uval-1;
- if (key->allowNone&(1<<(tmp.uval-1)))
- key->behavior.data|= XkbKB_RGAllowNone;
- key->defs.defined|= _Key_Behavior;
- }
- else if (uStrCaseEqual(field,"allownone")) {
- ok= SetAllowNone(key,arrayNdx,value);
- }
- else if (uStrCasePrefix("overlay",field)||
- uStrCasePrefix("permanentoverlay",field)) {
- Bool permanent= False;
- char *which;
- int overlayNdx;
- if (uStrCasePrefix("permanent",field)) {
- permanent= True;
- which= &field[sizeof("permanentoverlay")-1];
- }
- else {
- which= &field[sizeof("overlay")-1];
- }
- if (sscanf(which,"%d",&overlayNdx)==1) {
- if (((overlayNdx<1)||(overlayNdx>2))&&(warningLevel>0)) {
- ERROR2("Illegal overlay %d specified for %s\n",
- overlayNdx,
- longText(key->name,XkbMessage));
- ACTION("Ignored\n");
- return False;
- }
- }
- else if (*which=='\0')
- overlayNdx=1;
- else if (warningLevel>0) {
- ERROR2("Illegal overlay \"%s\" specified for %s\n",
- which,
- longText(key->name,XkbMessage));
- ACTION("Ignored\n");
- return False;
- }
- ok= ExprResolveKeyName(value,&tmp,NULL,NULL);
- if (!ok) {
- ERROR1("Illegal overlay key specification for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Overlay key must be specified by name\n");
- return False;
- }
- if (overlayNdx==1) key->behavior.type= XkbKB_Overlay1;
- else key->behavior.type= XkbKB_Overlay2;
- if (permanent)
- key->behavior.type|= XkbKB_Permanent;
-
- key->behavior.data= 0;
- key->nameForOverlayKey= KeyNameToLong(tmp.keyName.name);
- key->defs.defined|= _Key_Behavior;
- }
- else if ((uStrCaseCmp(field,"repeating")==0)||
- (uStrCaseCmp(field,"repeats")==0)||
- (uStrCaseCmp(field,"repeat")==0)){
- ok= ExprResolveEnum(value,&tmp,repeatEntries);
- if (!ok) {
- ERROR1("Illegal repeat setting for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Non-boolean repeat setting ignored\n");
- return False;
- }
- key->repeat= tmp.uval;
- key->defs.defined|= _Key_Repeat;
- }
- else if ((uStrCaseCmp(field,"groupswrap")==0)||
- (uStrCaseCmp(field,"wrapgroups")==0)) {
- ok= ExprResolveBoolean(value,&tmp,NULL,NULL);
- if (!ok) {
- ERROR1("Illegal groupsWrap setting for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Non-boolean value ignored\n");
- return False;
- }
- if (tmp.uval) key->groupInfo= XkbWrapIntoRange;
- else key->groupInfo= XkbClampIntoRange;
- key->defs.defined|= _Key_GroupInfo;
- }
- else if ((uStrCaseCmp(field,"groupsclamp")==0)||
- (uStrCaseCmp(field,"clampgroups")==0)) {
- ok= ExprResolveBoolean(value,&tmp,NULL,NULL);
- if (!ok) {
- ERROR1("Illegal groupsClamp setting for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Non-boolean value ignored\n");
- return False;
- }
- if (tmp.uval) key->groupInfo= XkbClampIntoRange;
- else key->groupInfo= XkbWrapIntoRange;
- key->defs.defined|= _Key_GroupInfo;
- }
- else if ((uStrCaseCmp(field,"groupsredirect")==0)||
- (uStrCaseCmp(field,"redirectgroups")==0)) {
- if (!ExprResolveInteger(value,&tmp,SimpleLookup,(XPointer)groupNames)) {
- ERROR1("Illegal group index for redirect of key %s\n",
- longText(key->name,XkbMessage));
- ACTION("Definition with non-integer group ignored\n");
- return False;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbNumKbdGroups)) {
- ERROR2("Out-of-range (1..%d) group for redirect of key %s\n",
- XkbNumKbdGroups,
- longText(key->name,XkbMessage));
- ERROR1("Ignoring illegal group %d\n",tmp.uval);
- return False;
- }
- key->groupInfo= XkbSetGroupInfo(0,XkbRedirectIntoRange,tmp.uval-1);
- key->defs.defined|= _Key_GroupInfo;
- }
- else {
- ERROR1("Unknown field %s in a symbol interpretation\n",field);
- ACTION("Definition ignored\n");
- ok= False;
+ Bool ok = True;
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "type") == 0)
+ {
+ ExprResult ndx;
+ if ((!ExprResolveString(value, &tmp, NULL, NULL))
+ && (warningLevel > 0))
+ {
+ WARN("The type field of a key symbol map must be a string\n");
+ ACTION("Ignoring illegal type definition\n");
+ }
+ if (arrayNdx == NULL)
+ {
+ key->dfltType = XkbInternAtom(NULL, tmp.str, False);
+ key->defs.defined |= _Key_Type_Dflt;
+ }
+ else if (!ExprResolveInteger(arrayNdx, &ndx, SimpleLookup,
+ (XPointer) groupNames))
+ {
+ ERROR1("Illegal group index for type of key %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Definition with non-integer array index ignored\n");
+ return False;
+ }
+ else if ((ndx.uval < 1) || (ndx.uval > XkbNumKbdGroups))
+ {
+ ERROR2
+ ("Group index for type of key %s is out of range (1..%d)\n",
+ longText(key->name, XkbMessage), XkbNumKbdGroups + 1);
+ ACTION1("Ignoring type for group %d\n", ndx.uval);
+ return False;
+ }
+ else
+ {
+ key->types[ndx.uval - 1] = XkbInternAtom(NULL, tmp.str, False);
+ key->typesDefined |= (1 << (ndx.uval - 1));
+ }
+ }
+ else if (uStrCaseCmp(field, "symbols") == 0)
+ return AddSymbolsToKey(key, xkb, field, arrayNdx, value, info);
+ else if (uStrCaseCmp(field, "actions") == 0)
+ return AddActionsToKey(key, xkb, field, arrayNdx, value, info);
+ else if ((uStrCaseCmp(field, "vmods") == 0) ||
+ (uStrCaseCmp(field, "virtualmods") == 0) ||
+ (uStrCaseCmp(field, "virtualmodifiers") == 0))
+ {
+ ok = ExprResolveModMask(value, &tmp, LookupVModMask, (XPointer) xkb);
+ if (ok)
+ {
+ key->vmodmap = (tmp.uval >> 8);
+ key->defs.defined |= _Key_VModMap;
+ }
+ else
+ {
+ ERROR1("Expected a virtual modifier mask, found %s\n",
+ exprOpText(value->op));
+ ACTION1("Ignoring virtual modifiers definition for key %s\n",
+ longText(key->name, XkbMessage));
+ }
+ }
+ else if ((uStrCaseCmp(field, "locking") == 0)
+ || (uStrCaseCmp(field, "lock") == 0)
+ || (uStrCaseCmp(field, "locks") == 0))
+ {
+ ok = ExprResolveEnum(value, &tmp, lockingEntries);
+ if (ok)
+ key->behavior.type = tmp.uval;
+ key->defs.defined |= _Key_Behavior;
+ }
+ else if ((uStrCaseCmp(field, "radiogroup") == 0) ||
+ (uStrCaseCmp(field, "permanentradiogroup") == 0))
+ {
+ Bool permanent = False;
+ if (uStrCaseCmp(field, "permanentradiogroup") == 0)
+ permanent = True;
+ ok = ExprResolveInteger(value, &tmp, SimpleLookup,
+ (XPointer) rgEntries);
+ if (!ok)
+ {
+ ERROR1("Illegal radio group specification for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Non-integer radio group ignored\n");
+ return False;
+ }
+ if (tmp.uval == 0)
+ {
+ key->behavior.type = XkbKB_Default;
+ key->behavior.data = 0;
+ return ok;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbMaxRadioGroups))
+ {
+ ERROR1
+ ("Radio group specification for %s out of range (1..32)\n",
+ longText(key->name, XkbMessage));
+ ACTION1("Illegal radio group %d ignored\n", tmp.uval);
+ return False;
+ }
+ key->behavior.type =
+ XkbKB_RadioGroup | (permanent ? XkbKB_Permanent : 0);
+ key->behavior.data = tmp.uval - 1;
+ if (key->allowNone & (1 << (tmp.uval - 1)))
+ key->behavior.data |= XkbKB_RGAllowNone;
+ key->defs.defined |= _Key_Behavior;
+ }
+ else if (uStrCaseEqual(field, "allownone"))
+ {
+ ok = SetAllowNone(key, arrayNdx, value);
+ }
+ else if (uStrCasePrefix("overlay", field) ||
+ uStrCasePrefix("permanentoverlay", field))
+ {
+ Bool permanent = False;
+ char *which;
+ int overlayNdx;
+ if (uStrCasePrefix("permanent", field))
+ {
+ permanent = True;
+ which = &field[sizeof("permanentoverlay") - 1];
+ }
+ else
+ {
+ which = &field[sizeof("overlay") - 1];
+ }
+ if (sscanf(which, "%d", &overlayNdx) == 1)
+ {
+ if (((overlayNdx < 1) || (overlayNdx > 2)) && (warningLevel > 0))
+ {
+ ERROR2("Illegal overlay %d specified for %s\n",
+ overlayNdx, longText(key->name, XkbMessage));
+ ACTION("Ignored\n");
+ return False;
+ }
+ }
+ else if (*which == '\0')
+ overlayNdx = 1;
+ else if (warningLevel > 0)
+ {
+ ERROR2("Illegal overlay \"%s\" specified for %s\n",
+ which, longText(key->name, XkbMessage));
+ ACTION("Ignored\n");
+ return False;
+ }
+ ok = ExprResolveKeyName(value, &tmp, NULL, NULL);
+ if (!ok)
+ {
+ ERROR1("Illegal overlay key specification for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Overlay key must be specified by name\n");
+ return False;
+ }
+ if (overlayNdx == 1)
+ key->behavior.type = XkbKB_Overlay1;
+ else
+ key->behavior.type = XkbKB_Overlay2;
+ if (permanent)
+ key->behavior.type |= XkbKB_Permanent;
+
+ key->behavior.data = 0;
+ key->nameForOverlayKey = KeyNameToLong(tmp.keyName.name);
+ key->defs.defined |= _Key_Behavior;
+ }
+ else if ((uStrCaseCmp(field, "repeating") == 0) ||
+ (uStrCaseCmp(field, "repeats") == 0) ||
+ (uStrCaseCmp(field, "repeat") == 0))
+ {
+ ok = ExprResolveEnum(value, &tmp, repeatEntries);
+ if (!ok)
+ {
+ ERROR1("Illegal repeat setting for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Non-boolean repeat setting ignored\n");
+ return False;
+ }
+ key->repeat = tmp.uval;
+ key->defs.defined |= _Key_Repeat;
+ }
+ else if ((uStrCaseCmp(field, "groupswrap") == 0) ||
+ (uStrCaseCmp(field, "wrapgroups") == 0))
+ {
+ ok = ExprResolveBoolean(value, &tmp, NULL, NULL);
+ if (!ok)
+ {
+ ERROR1("Illegal groupsWrap setting for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Non-boolean value ignored\n");
+ return False;
+ }
+ if (tmp.uval)
+ key->groupInfo = XkbWrapIntoRange;
+ else
+ key->groupInfo = XkbClampIntoRange;
+ key->defs.defined |= _Key_GroupInfo;
+ }
+ else if ((uStrCaseCmp(field, "groupsclamp") == 0) ||
+ (uStrCaseCmp(field, "clampgroups") == 0))
+ {
+ ok = ExprResolveBoolean(value, &tmp, NULL, NULL);
+ if (!ok)
+ {
+ ERROR1("Illegal groupsClamp setting for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Non-boolean value ignored\n");
+ return False;
+ }
+ if (tmp.uval)
+ key->groupInfo = XkbClampIntoRange;
+ else
+ key->groupInfo = XkbWrapIntoRange;
+ key->defs.defined |= _Key_GroupInfo;
+ }
+ else if ((uStrCaseCmp(field, "groupsredirect") == 0) ||
+ (uStrCaseCmp(field, "redirectgroups") == 0))
+ {
+ if (!ExprResolveInteger
+ (value, &tmp, SimpleLookup, (XPointer) groupNames))
+ {
+ ERROR1("Illegal group index for redirect of key %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Definition with non-integer group ignored\n");
+ return False;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbNumKbdGroups))
+ {
+ ERROR2("Out-of-range (1..%d) group for redirect of key %s\n",
+ XkbNumKbdGroups, longText(key->name, XkbMessage));
+ ERROR1("Ignoring illegal group %d\n", tmp.uval);
+ return False;
+ }
+ key->groupInfo =
+ XkbSetGroupInfo(0, XkbRedirectIntoRange, tmp.uval - 1);
+ key->defs.defined |= _Key_GroupInfo;
+ }
+ else
+ {
+ ERROR1("Unknown field %s in a symbol interpretation\n", field);
+ ACTION("Definition ignored\n");
+ ok = False;
}
return ok;
}
static int
-SetGroupName(SymbolsInfo *info,ExprDef *arrayNdx,ExprDef *value)
+SetGroupName(SymbolsInfo * info, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult tmp,name;
-
- if ((arrayNdx==NULL)&&(warningLevel>0)) {
- WARN("You must specify an index when specifying a group name\n");
- ACTION("Group name definition without array subscript ignored\n");
- return False;
- }
- if (!ExprResolveInteger(arrayNdx,&tmp,SimpleLookup,(XPointer)groupNames)) {
- ERROR("Illegal index in group name definition\n");
- ACTION("Definition with non-integer array index ignored\n");
- return False;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbNumKbdGroups)) {
- ERROR1("Attempt to specify name for illegal group (must be 1..%d)\n",
- XkbNumKbdGroups+1);
- ACTION1("Name for group %d ignored\n",tmp.uval);
- return False;
- }
- if (!ExprResolveString(value,&name,NULL,NULL)) {
- ERROR("Group name must be a string\n");
- ACTION1("Illegal name for group %d ignored\n",tmp.uval);
- return False;
- }
- info->groupNames[tmp.uval-1+info->explicit_group]=
- XkbInternAtom(NULL,name.str,False);
-
+ ExprResult tmp, name;
+
+ if ((arrayNdx == NULL) && (warningLevel > 0))
+ {
+ WARN("You must specify an index when specifying a group name\n");
+ ACTION("Group name definition without array subscript ignored\n");
+ return False;
+ }
+ if (!ExprResolveInteger
+ (arrayNdx, &tmp, SimpleLookup, (XPointer) groupNames))
+ {
+ ERROR("Illegal index in group name definition\n");
+ ACTION("Definition with non-integer array index ignored\n");
+ return False;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbNumKbdGroups))
+ {
+ ERROR1
+ ("Attempt to specify name for illegal group (must be 1..%d)\n",
+ XkbNumKbdGroups + 1);
+ ACTION1("Name for group %d ignored\n", tmp.uval);
+ return False;
+ }
+ if (!ExprResolveString(value, &name, NULL, NULL))
+ {
+ ERROR("Group name must be a string\n");
+ ACTION1("Illegal name for group %d ignored\n", tmp.uval);
+ return False;
+ }
+ info->groupNames[tmp.uval - 1 + info->explicit_group] =
+ XkbInternAtom(NULL, name.str, False);
+
return True;
}
static int
-HandleSymbolsVar(VarDef *stmt,XkbDescPtr xkb,SymbolsInfo *info)
+HandleSymbolsVar(VarDef * stmt, XkbDescPtr xkb, SymbolsInfo * info)
{
-ExprResult elem,field,tmp;
-ExprDef * arrayNdx;
-
- if (ExprResolveLhs(stmt->name,&elem,&field,&arrayNdx)==0)
- return 0; /* internal error, already reported */
- if (elem.str&&(uStrCaseCmp(elem.str,"key")==0)) {
- return SetSymbolsField(&info->dflt,xkb,field.str,arrayNdx,stmt->value,
- info);
- }
- else if ((elem.str==NULL)&&((uStrCaseCmp(field.str,"name")==0)||
- (uStrCaseCmp(field.str,"groupname")==0))) {
- return SetGroupName(info,arrayNdx,stmt->value);
- }
- else if ((elem.str==NULL)&&((uStrCaseCmp(field.str,"groupswrap")==0)||
- (uStrCaseCmp(field.str,"wrapgroups")==0))) {
- if (!ExprResolveBoolean(stmt->value,&tmp,NULL,NULL)) {
- ERROR("Illegal setting for global groupsWrap\n");
- ACTION("Non-boolean value ignored\n");
- return False;
- }
- if (tmp.uval) info->groupInfo= XkbWrapIntoRange;
- else info->groupInfo= XkbClampIntoRange;
- return True;
- }
- else if ((elem.str==NULL)&&((uStrCaseCmp(field.str,"groupsclamp")==0)||
- (uStrCaseCmp(field.str,"clampgroups")==0))) {
- if (!ExprResolveBoolean(stmt->value,&tmp,NULL,NULL)) {
- ERROR("Illegal setting for global groupsClamp\n");
- ACTION("Non-boolean value ignored\n");
- return False;
- }
- if (tmp.uval) info->groupInfo= XkbClampIntoRange;
- else info->groupInfo= XkbWrapIntoRange;
- return True;
- }
- else if ((elem.str==NULL)&&((uStrCaseCmp(field.str,"groupsredirect")==0)||
- (uStrCaseCmp(field.str,"redirectgroups")==0))) {
- if (!ExprResolveInteger(stmt->value,&tmp,
- SimpleLookup,(XPointer)groupNames)) {
- ERROR("Illegal group index for global groupsRedirect\n");
- ACTION("Definition with non-integer group ignored\n");
- return False;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbNumKbdGroups)) {
- ERROR1("Out-of-range (1..%d) group for global groupsRedirect\n",
- XkbNumKbdGroups);
- ACTION1("Ignoring illegal group %d\n",tmp.uval);
- return False;
- }
- info->groupInfo= XkbSetGroupInfo(0,XkbRedirectIntoRange,tmp.uval);
- return True;
- }
- else if ((elem.str==NULL)&&(uStrCaseCmp(field.str,"allownone")==0)) {
- return SetAllowNone(&info->dflt,arrayNdx,stmt->value);
- }
- return SetActionField(xkb,elem.str,field.str,arrayNdx,stmt->value,
- &info->action);
+ ExprResult elem, field, tmp;
+ ExprDef *arrayNdx;
+
+ if (ExprResolveLhs(stmt->name, &elem, &field, &arrayNdx) == 0)
+ return 0; /* internal error, already reported */
+ if (elem.str && (uStrCaseCmp(elem.str, "key") == 0))
+ {
+ return SetSymbolsField(&info->dflt, xkb, field.str, arrayNdx,
+ stmt->value, info);
+ }
+ else if ((elem.str == NULL) && ((uStrCaseCmp(field.str, "name") == 0) ||
+ (uStrCaseCmp(field.str, "groupname") ==
+ 0)))
+ {
+ return SetGroupName(info, arrayNdx, stmt->value);
+ }
+ else if ((elem.str == NULL)
+ && ((uStrCaseCmp(field.str, "groupswrap") == 0)
+ || (uStrCaseCmp(field.str, "wrapgroups") == 0)))
+ {
+ if (!ExprResolveBoolean(stmt->value, &tmp, NULL, NULL))
+ {
+ ERROR("Illegal setting for global groupsWrap\n");
+ ACTION("Non-boolean value ignored\n");
+ return False;
+ }
+ if (tmp.uval)
+ info->groupInfo = XkbWrapIntoRange;
+ else
+ info->groupInfo = XkbClampIntoRange;
+ return True;
+ }
+ else if ((elem.str == NULL)
+ && ((uStrCaseCmp(field.str, "groupsclamp") == 0)
+ || (uStrCaseCmp(field.str, "clampgroups") == 0)))
+ {
+ if (!ExprResolveBoolean(stmt->value, &tmp, NULL, NULL))
+ {
+ ERROR("Illegal setting for global groupsClamp\n");
+ ACTION("Non-boolean value ignored\n");
+ return False;
+ }
+ if (tmp.uval)
+ info->groupInfo = XkbClampIntoRange;
+ else
+ info->groupInfo = XkbWrapIntoRange;
+ return True;
+ }
+ else if ((elem.str == NULL)
+ && ((uStrCaseCmp(field.str, "groupsredirect") == 0)
+ || (uStrCaseCmp(field.str, "redirectgroups") == 0)))
+ {
+ if (!ExprResolveInteger(stmt->value, &tmp,
+ SimpleLookup, (XPointer) groupNames))
+ {
+ ERROR("Illegal group index for global groupsRedirect\n");
+ ACTION("Definition with non-integer group ignored\n");
+ return False;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbNumKbdGroups))
+ {
+ ERROR1
+ ("Out-of-range (1..%d) group for global groupsRedirect\n",
+ XkbNumKbdGroups);
+ ACTION1("Ignoring illegal group %d\n", tmp.uval);
+ return False;
+ }
+ info->groupInfo = XkbSetGroupInfo(0, XkbRedirectIntoRange, tmp.uval);
+ return True;
+ }
+ else if ((elem.str == NULL) && (uStrCaseCmp(field.str, "allownone") == 0))
+ {
+ return SetAllowNone(&info->dflt, arrayNdx, stmt->value);
+ }
+ return SetActionField(xkb, elem.str, field.str, arrayNdx, stmt->value,
+ &info->action);
}
static Bool
-HandleSymbolsBody( VarDef * def,
- XkbDescPtr xkb,
- KeyInfo * key,
- SymbolsInfo * info)
+HandleSymbolsBody(VarDef * def,
+ XkbDescPtr xkb, KeyInfo * key, SymbolsInfo * info)
{
-Bool ok= True;
-ExprResult tmp,field;
-ExprDef * arrayNdx;
-
- for (;def!=NULL;def= (VarDef *)def->common.next) {
- if ((def->name)&&(def->name->type==ExprFieldRef)) {
- ok= HandleSymbolsVar(def,xkb,info);
- continue;
- }
- else {
- if (def->name==NULL) {
- if ((def->value==NULL)||(def->value->op==ExprKeysymList))
- field.str= "symbols";
- else field.str= "actions";
- arrayNdx= NULL;
- }
- else {
- ok= ExprResolveLhs(def->name,&tmp,&field,&arrayNdx);
- }
- if (ok)
- ok= SetSymbolsField(key,xkb,field.str,arrayNdx,def->value,info);
- }
+ Bool ok = True;
+ ExprResult tmp, field;
+ ExprDef *arrayNdx;
+
+ for (; def != NULL; def = (VarDef *) def->common.next)
+ {
+ if ((def->name) && (def->name->type == ExprFieldRef))
+ {
+ ok = HandleSymbolsVar(def, xkb, info);
+ continue;
+ }
+ else
+ {
+ if (def->name == NULL)
+ {
+ if ((def->value == NULL)
+ || (def->value->op == ExprKeysymList))
+ field.str = "symbols";
+ else
+ field.str = "actions";
+ arrayNdx = NULL;
+ }
+ else
+ {
+ ok = ExprResolveLhs(def->name, &tmp, &field, &arrayNdx);
+ }
+ if (ok)
+ ok = SetSymbolsField(key, xkb, field.str, arrayNdx,
+ def->value, info);
+ }
}
return ok;
}
static Bool
-SetExplicitGroup( SymbolsInfo * info,
- KeyInfo * key)
+SetExplicitGroup(SymbolsInfo * info, KeyInfo * key)
{
unsigned group = info->explicit_group;
if (group == 0)
- return True;
-
- if ((key->typesDefined|key->symsDefined|key->actsDefined) & ~1) {
- int i;
- WARN1("For the map %s an explicit group specified\n", info->name);
- WARN1("but key %s has more than one group defined\n",
- longText(key->name,XkbMessage));
- ACTION("All groups except first one will be ignored\n");
- for (i = 1; i < XkbNumKbdGroups ; i++) {
- key->numLevels[i]= 0;
- if (key->syms[i]!=NULL)
- uFree(key->syms[i]);
- key->syms[i]= (KeySym*) NULL;
- if (key->acts[i]!=NULL)
- uFree(key->acts[i]);
- key->acts[i]= (XkbAction*) NULL;
- key->types[i]= (Atom) 0;
- }
- }
- key->typesDefined = key->symsDefined = key->actsDefined = 1 << group;
-
- key->numLevels[group]= key->numLevels[0];
- key->numLevels[0]= 0;
- key->syms[group]= key->syms[0];
- key->syms[0]= (KeySym*) NULL;
- key->acts[group]= key->acts[0];
- key->acts[0]= (XkbAction*) NULL;
- key->types[group]= key->types[0];
- key->types[0]= (Atom) 0;
- return True;
+ return True;
+
+ if ((key->typesDefined | key->symsDefined | key->actsDefined) & ~1)
+ {
+ int i;
+ WARN1("For the map %s an explicit group specified\n", info->name);
+ WARN1("but key %s has more than one group defined\n",
+ longText(key->name, XkbMessage));
+ ACTION("All groups except first one will be ignored\n");
+ for (i = 1; i < XkbNumKbdGroups; i++)
+ {
+ key->numLevels[i] = 0;
+ if (key->syms[i] != NULL)
+ uFree(key->syms[i]);
+ key->syms[i] = (KeySym *) NULL;
+ if (key->acts[i] != NULL)
+ uFree(key->acts[i]);
+ key->acts[i] = (XkbAction *) NULL;
+ key->types[i] = (Atom) 0;
+ }
+ }
+ key->typesDefined = key->symsDefined = key->actsDefined = 1 << group;
+
+ key->numLevels[group] = key->numLevels[0];
+ key->numLevels[0] = 0;
+ key->syms[group] = key->syms[0];
+ key->syms[0] = (KeySym *) NULL;
+ key->acts[group] = key->acts[0];
+ key->acts[0] = (XkbAction *) NULL;
+ key->types[group] = key->types[0];
+ key->types[0] = (Atom) 0;
+ return True;
}
static int
-HandleSymbolsDef( SymbolsDef * stmt,
- XkbDescPtr xkb,
- unsigned merge,
- SymbolsInfo * info)
+HandleSymbolsDef(SymbolsDef * stmt,
+ XkbDescPtr xkb, unsigned merge, SymbolsInfo * info)
{
-KeyInfo key;
-
+ KeyInfo key;
+
InitKeyInfo(&key);
- CopyKeyInfo(&info->dflt,&key,False);
- key.defs.merge= stmt->merge;
- key.name= KeyNameToLong(stmt->keyName);
- if (!HandleSymbolsBody((VarDef *)stmt->symbols,xkb,&key,info)) {
- info->errorCount++;
- return False;
+ CopyKeyInfo(&info->dflt, &key, False);
+ key.defs.merge = stmt->merge;
+ key.name = KeyNameToLong(stmt->keyName);
+ if (!HandleSymbolsBody((VarDef *) stmt->symbols, xkb, &key, info))
+ {
+ info->errorCount++;
+ return False;
}
- if (!SetExplicitGroup(info,&key)) {
+ if (!SetExplicitGroup(info, &key))
+ {
info->errorCount++;
return False;
}
- if (!AddKeySymbols(info,&key,xkb)) {
- info->errorCount++;
- return False;
+ if (!AddKeySymbols(info, &key, xkb))
+ {
+ info->errorCount++;
+ return False;
}
return True;
}
static Bool
-HandleModMapDef( ModMapDef * def,
- XkbDescPtr xkb,
- unsigned merge,
- SymbolsInfo * info)
+HandleModMapDef(ModMapDef * def,
+ XkbDescPtr xkb, unsigned merge, SymbolsInfo * info)
{
-ExprDef * key;
-ModMapEntry tmp;
-ExprResult rtrn;
-Bool ok;
-
- if (!LookupModIndex(NULL,None,def->modifier,TypeInt,&rtrn)) {
- ERROR("Illegal modifier map definition\n");
- ACTION1("Ignoring map for non-modifier \"%s\"\n",
- XkbAtomText(NULL,def->modifier,XkbMessage));
- return False;
- }
- ok= True;
- tmp.modifier= rtrn.uval;
- for (key=def->keys;key!=NULL;key=(ExprDef *)key->common.next) {
- if ((key->op==ExprValue)&&(key->type==TypeKeyName)) {
- tmp.haveSymbol= False;
- tmp.u.keyName= KeyNameToLong(key->value.keyName);
- }
- else if (ExprResolveKeySym(key,&rtrn,NULL,NULL)) {
- tmp.haveSymbol= True;
- tmp.u.keySym= rtrn.uval;
- }
- else {
- ERROR("Modmap entries may contain only key names or keysyms\n");
- ACTION1("Illegal definition for %s modifier ignored\n",
- XkbModIndexText(tmp.modifier,XkbMessage));
- continue;
- }
-
- ok= AddModMapEntry(info,&tmp)&&ok;
+ ExprDef *key;
+ ModMapEntry tmp;
+ ExprResult rtrn;
+ Bool ok;
+
+ if (!LookupModIndex(NULL, None, def->modifier, TypeInt, &rtrn))
+ {
+ ERROR("Illegal modifier map definition\n");
+ ACTION1("Ignoring map for non-modifier \"%s\"\n",
+ XkbAtomText(NULL, def->modifier, XkbMessage));
+ return False;
+ }
+ ok = True;
+ tmp.modifier = rtrn.uval;
+ for (key = def->keys; key != NULL; key = (ExprDef *) key->common.next)
+ {
+ if ((key->op == ExprValue) && (key->type == TypeKeyName))
+ {
+ tmp.haveSymbol = False;
+ tmp.u.keyName = KeyNameToLong(key->value.keyName);
+ }
+ else if (ExprResolveKeySym(key, &rtrn, NULL, NULL))
+ {
+ tmp.haveSymbol = True;
+ tmp.u.keySym = rtrn.uval;
+ }
+ else
+ {
+ ERROR("Modmap entries may contain only key names or keysyms\n");
+ ACTION1("Illegal definition for %s modifier ignored\n",
+ XkbModIndexText(tmp.modifier, XkbMessage));
+ continue;
+ }
+
+ ok = AddModMapEntry(info, &tmp) && ok;
}
return ok;
}
static void
-HandleSymbolsFile( XkbFile * file,
- XkbDescPtr xkb,
- unsigned merge,
- SymbolsInfo * info)
+HandleSymbolsFile(XkbFile * file,
+ XkbDescPtr xkb, unsigned merge, SymbolsInfo * info)
{
-ParseCommon *stmt;
-
- info->name= uStringDup(file->name);
- stmt= file->defs;
- while (stmt) {
- switch (stmt->stmtType) {
- case StmtInclude:
- if (!HandleIncludeSymbols((IncludeStmt *)stmt,xkb,info,
- HandleSymbolsFile))
- info->errorCount++;
- break;
- case StmtSymbolsDef:
- if (!HandleSymbolsDef((SymbolsDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtVarDef:
- if (!HandleSymbolsVar((VarDef *)stmt,xkb,info))
- info->errorCount++;
- break;
- case StmtVModDef:
- if (!HandleVModDef((VModDef *)stmt,merge,&info->vmods))
- info->errorCount++;
- break;
- case StmtInterpDef:
- ERROR("Interpretation files may not include other types\n");
- ACTION("Ignoring definition of symbol interpretation\n");
- info->errorCount++;
- break;
- case StmtKeycodeDef:
- ERROR("Interpretation files may not include other types\n");
- ACTION("Ignoring definition of key name\n");
- info->errorCount++;
- break;
- case StmtModMapDef:
- if (!HandleModMapDef((ModMapDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- default:
- WSGO1("Unexpected statement type %d in HandleSymbolsFile\n",
- stmt->stmtType);
- break;
- }
- stmt= stmt->next;
- if (info->errorCount>10) {
+ ParseCommon *stmt;
+
+ info->name = uStringDup(file->name);
+ stmt = file->defs;
+ while (stmt)
+ {
+ switch (stmt->stmtType)
+ {
+ case StmtInclude:
+ if (!HandleIncludeSymbols((IncludeStmt *) stmt, xkb, info,
+ HandleSymbolsFile))
+ info->errorCount++;
+ break;
+ case StmtSymbolsDef:
+ if (!HandleSymbolsDef((SymbolsDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtVarDef:
+ if (!HandleSymbolsVar((VarDef *) stmt, xkb, info))
+ info->errorCount++;
+ break;
+ case StmtVModDef:
+ if (!HandleVModDef((VModDef *) stmt, merge, &info->vmods))
+ info->errorCount++;
+ break;
+ case StmtInterpDef:
+ ERROR("Interpretation files may not include other types\n");
+ ACTION("Ignoring definition of symbol interpretation\n");
+ info->errorCount++;
+ break;
+ case StmtKeycodeDef:
+ ERROR("Interpretation files may not include other types\n");
+ ACTION("Ignoring definition of key name\n");
+ info->errorCount++;
+ break;
+ case StmtModMapDef:
+ if (!HandleModMapDef((ModMapDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ default:
+ WSGO1("Unexpected statement type %d in HandleSymbolsFile\n",
+ stmt->stmtType);
+ break;
+ }
+ stmt = stmt->next;
+ if (info->errorCount > 10)
+ {
#ifdef NOISY
- ERROR("Too many errors\n");
+ ERROR("Too many errors\n");
#endif
- ACTION1("Abandoning symbols file \"%s\"\n",file->topName);
- break;
- }
+ ACTION1("Abandoning symbols file \"%s\"\n", file->topName);
+ break;
+ }
}
return;
}
static Bool
-FindKeyForSymbol(XkbDescPtr xkb,KeySym sym,unsigned int *kc_rtrn)
+FindKeyForSymbol(XkbDescPtr xkb, KeySym sym, unsigned int *kc_rtrn)
{
-register int i, j;
-register Bool gotOne;
-
- j= 0;
- do {
- gotOne= False;
- for (i = xkb->min_key_code; i <= (int)xkb->max_key_code; i++) {
- if ( j<(int)XkbKeyNumSyms(xkb,i) ) {
+ register int i, j;
+ register Bool gotOne;
+
+ j = 0;
+ do
+ {
+ gotOne = False;
+ for (i = xkb->min_key_code; i <= (int) xkb->max_key_code; i++)
+ {
+ if (j < (int) XkbKeyNumSyms(xkb, i))
+ {
gotOne = True;
- if ((XkbKeySym(xkb,i,j)==sym)) {
- *kc_rtrn= i;
+ if ((XkbKeySym(xkb, i, j) == sym))
+ {
+ *kc_rtrn = i;
return True;
- }
+ }
}
}
j++;
- } while (gotOne);
+ }
+ while (gotOne);
return False;
}
static Bool
-FindNamedType(XkbDescPtr xkb,Atom name,unsigned *type_rtrn)
+FindNamedType(XkbDescPtr xkb, Atom name, unsigned *type_rtrn)
{
-register unsigned n;
-
- if (xkb&&xkb->map&&xkb->map->types) {
- for (n=0;n<xkb->map->num_types;n++) {
- if (xkb->map->types[n].name==(Atom)name) {
- *type_rtrn= n;
- return True;
- }
- }
+ register unsigned n;
+
+ if (xkb && xkb->map && xkb->map->types)
+ {
+ for (n = 0; n < xkb->map->num_types; n++)
+ {
+ if (xkb->map->types[n].name == (Atom) name)
+ {
+ *type_rtrn = n;
+ return True;
+ }
+ }
}
return False;
}
static Bool
-KSIsLower (KeySym ks)
+KSIsLower(KeySym ks)
{
KeySym lower, upper;
XConvertCase(ks, &lower, &upper);
@@ -1516,7 +1741,7 @@ KSIsLower (KeySym ks)
}
static Bool
-KSIsUpper (KeySym ks)
+KSIsUpper(KeySym ks)
{
KeySym lower, upper;
XConvertCase(ks, &lower, &upper);
@@ -1527,393 +1752,472 @@ KSIsUpper (KeySym ks)
}
static Bool
-FindAutomaticType(int width,KeySym *syms,Atom *typeNameRtrn, Bool *autoType)
+FindAutomaticType(int width, KeySym * syms, Atom * typeNameRtrn,
+ Bool * autoType)
{
*autoType = False;
- if ((width==1)||(width==0)) {
- *typeNameRtrn= XkbInternAtom(NULL,"ONE_LEVEL",False);
- *autoType = True;
- } else if (width == 2) {
- if ( syms && KSIsLower(syms[0]) && KSIsUpper(syms[1]) ) {
- *typeNameRtrn= XkbInternAtom(NULL,"ALPHABETIC",False);
- } else if ( syms &&
- (XkbKSIsKeypad(syms[0]) || XkbKSIsKeypad(syms[1])) ) {
- *typeNameRtrn= XkbInternAtom(NULL,"KEYPAD",False);
- *autoType = True;
- } else {
- *typeNameRtrn= XkbInternAtom(NULL,"TWO_LEVEL",False);
- *autoType = True;
- }
- } else if (width <= 4 ) {
- if ( syms && KSIsLower(syms[0]) && KSIsUpper(syms[1]) )
- if ( KSIsLower(syms[2]) && KSIsUpper(syms[3]) )
- *typeNameRtrn= XkbInternAtom(NULL,
- "FOUR_LEVEL_ALPHABETIC",False);
- else
- *typeNameRtrn= XkbInternAtom(NULL,
- "FOUR_LEVEL_SEMIALPHABETIC",False);
-
- else if ( syms && (XkbKSIsKeypad(syms[0]) || XkbKSIsKeypad(syms[1])) )
- *typeNameRtrn= XkbInternAtom(NULL,
- "FOUR_LEVEL_KEYPAD",False);
- else *typeNameRtrn= XkbInternAtom(NULL,"FOUR_LEVEL",False);
- }
- return ((width>=0)&&(width<=4));
+ if ((width == 1) || (width == 0))
+ {
+ *typeNameRtrn = XkbInternAtom(NULL, "ONE_LEVEL", False);
+ *autoType = True;
+ }
+ else if (width == 2)
+ {
+ if (syms && KSIsLower(syms[0]) && KSIsUpper(syms[1]))
+ {
+ *typeNameRtrn = XkbInternAtom(NULL, "ALPHABETIC", False);
+ }
+ else if (syms && (XkbKSIsKeypad(syms[0]) || XkbKSIsKeypad(syms[1])))
+ {
+ *typeNameRtrn = XkbInternAtom(NULL, "KEYPAD", False);
+ *autoType = True;
+ }
+ else
+ {
+ *typeNameRtrn = XkbInternAtom(NULL, "TWO_LEVEL", False);
+ *autoType = True;
+ }
+ }
+ else if (width <= 4)
+ {
+ if (syms && KSIsLower(syms[0]) && KSIsUpper(syms[1]))
+ if (KSIsLower(syms[2]) && KSIsUpper(syms[3]))
+ *typeNameRtrn =
+ XkbInternAtom(NULL, "FOUR_LEVEL_ALPHABETIC", False);
+ else
+ *typeNameRtrn = XkbInternAtom(NULL,
+ "FOUR_LEVEL_SEMIALPHABETIC",
+ False);
+
+ else if (syms && (XkbKSIsKeypad(syms[0]) || XkbKSIsKeypad(syms[1])))
+ *typeNameRtrn = XkbInternAtom(NULL, "FOUR_LEVEL_KEYPAD", False);
+ else
+ *typeNameRtrn = XkbInternAtom(NULL, "FOUR_LEVEL", False);
+ }
+ return ((width >= 0) && (width <= 4));
}
static void
-PrepareKeyDef(KeyInfo *key)
+PrepareKeyDef(KeyInfo * key)
{
int i, j, width, defined, lastGroup;
Bool identical;
-
+
defined = key->symsDefined | key->actsDefined | key->typesDefined;
- for (i = XkbNumKbdGroups - 1; i >= 0; i--) {
- if (defined & (1<<i))
- break;
+ for (i = XkbNumKbdGroups - 1; i >= 0; i--)
+ {
+ if (defined & (1 << i))
+ break;
}
lastGroup = i;
if (lastGroup == 0)
- return;
+ return;
/* If there are empty groups between non-empty ones fill them with data */
/* from the first group. */
/* We can make a wrong assumption here. But leaving gaps is worse. */
- for (i = lastGroup; i > 0; i--) {
- if (defined & (1<<i))
+ for (i = lastGroup; i > 0; i--)
+ {
+ if (defined & (1 << i))
continue;
width = key->numLevels[0];
- if (key->typesDefined & 1) {
- for (j = 0; j < width; j++) {
+ if (key->typesDefined & 1)
+ {
+ for (j = 0; j < width; j++)
+ {
key->types[i] = key->types[0];
}
key->typesDefined |= 1 << i;
}
- if ((key->actsDefined & 1) && key->acts[0]) {
- key->acts[i]= uTypedCalloc(width, XkbAction);
+ if ((key->actsDefined & 1) && key->acts[0])
+ {
+ key->acts[i] = uTypedCalloc(width, XkbAction);
if (key->acts[i] == NULL)
continue;
memcpy((void *) key->acts[i], (void *) key->acts[0],
width * sizeof(XkbAction));
key->actsDefined |= 1 << i;
}
- if ((key->symsDefined & 1) && key->syms[0]) {
- key->syms[i]= uTypedCalloc(width, KeySym);
+ if ((key->symsDefined & 1) && key->syms[0])
+ {
+ key->syms[i] = uTypedCalloc(width, KeySym);
if (key->syms[i] == NULL)
continue;
memcpy((void *) key->syms[i], (void *) key->syms[0],
width * sizeof(KeySym));
key->symsDefined |= 1 << i;
}
- if (defined & 1) {
+ if (defined & 1)
+ {
key->numLevels[i] = key->numLevels[0];
}
}
/* If all groups are completely identical remove them all */
/* exept the first one. */
identical = True;
- for (i = lastGroup; i > 0; i--) {
+ for (i = lastGroup; i > 0; i--)
+ {
if ((key->numLevels[i] != key->numLevels[0]) ||
- (key->types[i] != key->types[0])) {
+ (key->types[i] != key->types[0]))
+ {
identical = False;
break;
}
if ((key->syms[i] != key->syms[0]) &&
- (key->syms[i] == NULL || key->syms[0] == NULL ||
- memcmp((void*) key->syms[i], (void*) key->syms[0],
- sizeof(KeySym) * key->numLevels[0])) ) {
- identical = False;
- break;
- }
+ (key->syms[i] == NULL || key->syms[0] == NULL ||
+ memcmp((void *) key->syms[i], (void *) key->syms[0],
+ sizeof(KeySym) * key->numLevels[0])))
+ {
+ identical = False;
+ break;
+ }
if ((key->acts[i] != key->acts[0]) &&
- (key->acts[i] == NULL || key->acts[0] == NULL ||
- memcmp((void*) key->acts[i], (void*) key->acts[0],
- sizeof(XkbAction) * key->numLevels[0]))) {
+ (key->acts[i] == NULL || key->acts[0] == NULL ||
+ memcmp((void *) key->acts[i], (void *) key->acts[0],
+ sizeof(XkbAction) * key->numLevels[0])))
+ {
identical = False;
break;
- }
- }
- if (identical) {
- for (i = lastGroup; i > 0; i--) {
- key->numLevels[i]= 0;
- if (key->syms[i] != NULL)
- uFree(key->syms[i]);
- key->syms[i]= (KeySym*) NULL;
- if (key->acts[i] != NULL)
- uFree(key->acts[i]);
- key->acts[i]= (XkbAction*) NULL;
- key->types[i]= (Atom) 0;
- }
- key->symsDefined &= 1;
- key->actsDefined &= 1;
- key->typesDefined &= 1;
+ }
+ }
+ if (identical)
+ {
+ for (i = lastGroup; i > 0; i--)
+ {
+ key->numLevels[i] = 0;
+ if (key->syms[i] != NULL)
+ uFree(key->syms[i]);
+ key->syms[i] = (KeySym *) NULL;
+ if (key->acts[i] != NULL)
+ uFree(key->acts[i]);
+ key->acts[i] = (XkbAction *) NULL;
+ key->types[i] = (Atom) 0;
+ }
+ key->symsDefined &= 1;
+ key->actsDefined &= 1;
+ key->typesDefined &= 1;
}
return;
}
static Bool
-CopySymbolsDef(XkbFileInfo *result,KeyInfo *key,int start_from)
+CopySymbolsDef(XkbFileInfo * result, KeyInfo * key, int start_from)
{
-register int i;
-unsigned okc,kc,width,tmp,nGroups;
-XkbKeyTypePtr type;
-Bool haveActions,autoType,useAlias;
-KeySym * outSyms;
-XkbAction * outActs;
-XkbDescPtr xkb;
-unsigned types[XkbNumKbdGroups];
-
- xkb= result->xkb;
- useAlias= (start_from==0);
- if (!FindNamedKey(xkb,key->name,&kc,useAlias,CreateKeyNames(xkb),
- start_from)) {
- if ((start_from==0)&&(warningLevel>=5)) {
- WARN2("Key %s not found in %s keycodes\n",
- longText(key->name,XkbMessage),
- XkbAtomText(NULL,xkb->names->keycodes,XkbMessage));
- ACTION("Symbols ignored\n");
- }
- return False;
- }
-
- haveActions= False;
- for (i=width=nGroups=0;i<XkbNumKbdGroups;i++) {
- if (((i+1)>nGroups)&&(((key->symsDefined|key->actsDefined)&(1<<i))||
- (key->typesDefined)&(1<<i)))
- nGroups= i+1;
- if (key->acts[i])
- haveActions= True;
- autoType= False;
- if (key->types[i]==None) {
- if (key->dfltType!=None)
- key->types[i]= key->dfltType;
- else if (FindAutomaticType(key->numLevels[i],key->syms[i],
- &key->types[i], &autoType)) {
- }
- else {
- if (warningLevel>=5) {
- WARN1("No automatic type for %d symbols\n",
- (unsigned int)key->numLevels[i]);
- ACTION3("Using %s for the %s key (keycode %d)\n",
- XkbAtomText(NULL,key->types[i],XkbMessage),
- longText(key->name,XkbMessage),kc);
- }
- }
- }
- if (FindNamedType(xkb,key->types[i],&types[i])) {
- if (!autoType || key->numLevels[i] > 2)
- xkb->server->explicit[kc]|= (1<<i);
- }
- else {
- if (warningLevel>=3) {
- WARN1("Type \"%s\" is not defined\n",
- XkbAtomText(NULL,key->types[i],XkbMessage));
- ACTION2("Using TWO_LEVEL for the %s key (keycode %d)\n",
- longText(key->name,XkbMessage),kc);
- }
- types[i]= XkbTwoLevelIndex;
- }
- type= &xkb->map->types[types[i]];
- if (type->num_levels<key->numLevels[i]) {
- if (warningLevel>0) {
- WARN4("Type \"%s\" has %d levels, but %s has %d symbols\n",
- XkbAtomText(NULL,type->name,XkbMessage),
- (unsigned int)type->num_levels,
- longText(key->name,XkbMessage),
- (unsigned int)key->numLevels[i]);
- ACTION("Ignoring extra symbols\n");
- }
- key->numLevels[i]= type->num_levels;
- }
- if (key->numLevels[i]>width)
- width= key->numLevels[i];
- if (type->num_levels>width)
- width= type->num_levels;
- }
-
- i= width*nGroups;
- outSyms= XkbResizeKeySyms(xkb,kc,i);
- if (outSyms==NULL) {
- WSGO2("Could not enlarge symbols for %s (keycode %d)\n",
- longText(key->name,XkbMessage),kc);
- return False;
- }
- if (haveActions) {
- outActs= XkbResizeKeyActions(xkb,kc,i);
- if (outActs==NULL) {
- WSGO2("Could not enlarge actions for %s (key %d)\n",
- longText(key->name,XkbMessage),kc);
- return False;
- }
- xkb->server->explicit[kc]|= XkbExplicitInterpretMask;
- }
- else outActs= NULL;
- if (key->defs.defined&_Key_GroupInfo)
- i= key->groupInfo;
- else i= xkb->map->key_sym_map[kc].group_info;
- xkb->map->key_sym_map[kc].group_info= XkbSetNumGroups(i,nGroups);
- xkb->map->key_sym_map[kc].width= width;
- for (i=0;i<nGroups;i++) {
- xkb->map->key_sym_map[kc].kt_index[i]= types[i];
- if (key->syms[i]!=NULL) {
- for (tmp=0;tmp<width;tmp++) {
- if (tmp<key->numLevels[i])
- outSyms[tmp]= key->syms[i][tmp];
- else outSyms[tmp]= NoSymbol;
- if ((outActs!=NULL)&&(key->acts[i]!=NULL)) {
- if (tmp<key->numLevels[i])
- outActs[tmp]= key->acts[i][tmp];
- else outActs[tmp].type= XkbSA_NoAction;
- }
- }
- }
- outSyms+= width;
- if (outActs)
- outActs+= width;
- }
- switch (key->behavior.type&XkbKB_OpMask) {
- case XkbKB_Default:
- break;
- case XkbKB_Overlay1:
- case XkbKB_Overlay2:
- /* find key by name! */
- if (!FindNamedKey(xkb,key->nameForOverlayKey,&okc,True,
- CreateKeyNames(xkb),0)) {
- if (warningLevel>=1) {
- WARN2("Key %s not found in %s keycodes\n",
- longText(key->nameForOverlayKey,XkbMessage),
- XkbAtomText(NULL,xkb->names->keycodes,XkbMessage));
- ACTION1("Not treating %s as an overlay key \n",
- longText(key->name,XkbMessage));
- }
- break;
- }
- key->behavior.data= okc;
- default:
- xkb->server->behaviors[kc]= key->behavior;
- xkb->server->explicit[kc]|= XkbExplicitBehaviorMask;
- break;
- }
- if (key->defs.defined&_Key_VModMap) {
- xkb->server->vmodmap[kc]= key->vmodmap;
- xkb->server->explicit[kc]|= XkbExplicitVModMapMask;
- }
- if (key->repeat!=RepeatUndefined) {
- if (key->repeat==RepeatYes)
- xkb->ctrls->per_key_repeat[kc/8]|= (1<<(kc%8));
- else xkb->ctrls->per_key_repeat[kc/8]&= ~(1<<(kc%8));
- xkb->server->explicit[kc]|= XkbExplicitAutoRepeatMask;
- }
- CopySymbolsDef(result,key,kc+1);
+ register int i;
+ unsigned okc, kc, width, tmp, nGroups;
+ XkbKeyTypePtr type;
+ Bool haveActions, autoType, useAlias;
+ KeySym *outSyms;
+ XkbAction *outActs;
+ XkbDescPtr xkb;
+ unsigned types[XkbNumKbdGroups];
+
+ xkb = result->xkb;
+ useAlias = (start_from == 0);
+ if (!FindNamedKey(xkb, key->name, &kc, useAlias, CreateKeyNames(xkb),
+ start_from))
+ {
+ if ((start_from == 0) && (warningLevel >= 5))
+ {
+ WARN2("Key %s not found in %s keycodes\n",
+ longText(key->name, XkbMessage),
+ XkbAtomText(NULL, xkb->names->keycodes, XkbMessage));
+ ACTION("Symbols ignored\n");
+ }
+ return False;
+ }
+
+ haveActions = False;
+ for (i = width = nGroups = 0; i < XkbNumKbdGroups; i++)
+ {
+ if (((i + 1) > nGroups)
+ && (((key->symsDefined | key->actsDefined) & (1 << i))
+ || (key->typesDefined) & (1 << i)))
+ nGroups = i + 1;
+ if (key->acts[i])
+ haveActions = True;
+ autoType = False;
+ if (key->types[i] == None)
+ {
+ if (key->dfltType != None)
+ key->types[i] = key->dfltType;
+ else if (FindAutomaticType(key->numLevels[i], key->syms[i],
+ &key->types[i], &autoType))
+ {
+ }
+ else
+ {
+ if (warningLevel >= 5)
+ {
+ WARN1("No automatic type for %d symbols\n",
+ (unsigned int) key->numLevels[i]);
+ ACTION3("Using %s for the %s key (keycode %d)\n",
+ XkbAtomText(NULL, key->types[i],
+ XkbMessage),
+ longText(key->name, XkbMessage), kc);
+ }
+ }
+ }
+ if (FindNamedType(xkb, key->types[i], &types[i]))
+ {
+ if (!autoType || key->numLevels[i] > 2)
+ xkb->server->explicit[kc] |= (1 << i);
+ }
+ else
+ {
+ if (warningLevel >= 3)
+ {
+ WARN1("Type \"%s\" is not defined\n",
+ XkbAtomText(NULL, key->types[i], XkbMessage));
+ ACTION2("Using TWO_LEVEL for the %s key (keycode %d)\n",
+ longText(key->name, XkbMessage), kc);
+ }
+ types[i] = XkbTwoLevelIndex;
+ }
+ type = &xkb->map->types[types[i]];
+ if (type->num_levels < key->numLevels[i])
+ {
+ if (warningLevel > 0)
+ {
+ WARN4
+ ("Type \"%s\" has %d levels, but %s has %d symbols\n",
+ XkbAtomText(NULL, type->name, XkbMessage),
+ (unsigned int) type->num_levels,
+ longText(key->name, XkbMessage),
+ (unsigned int) key->numLevels[i]);
+ ACTION("Ignoring extra symbols\n");
+ }
+ key->numLevels[i] = type->num_levels;
+ }
+ if (key->numLevels[i] > width)
+ width = key->numLevels[i];
+ if (type->num_levels > width)
+ width = type->num_levels;
+ }
+
+ i = width * nGroups;
+ outSyms = XkbResizeKeySyms(xkb, kc, i);
+ if (outSyms == NULL)
+ {
+ WSGO2("Could not enlarge symbols for %s (keycode %d)\n",
+ longText(key->name, XkbMessage), kc);
+ return False;
+ }
+ if (haveActions)
+ {
+ outActs = XkbResizeKeyActions(xkb, kc, i);
+ if (outActs == NULL)
+ {
+ WSGO2("Could not enlarge actions for %s (key %d)\n",
+ longText(key->name, XkbMessage), kc);
+ return False;
+ }
+ xkb->server->explicit[kc] |= XkbExplicitInterpretMask;
+ }
+ else
+ outActs = NULL;
+ if (key->defs.defined & _Key_GroupInfo)
+ i = key->groupInfo;
+ else
+ i = xkb->map->key_sym_map[kc].group_info;
+ xkb->map->key_sym_map[kc].group_info = XkbSetNumGroups(i, nGroups);
+ xkb->map->key_sym_map[kc].width = width;
+ for (i = 0; i < nGroups; i++)
+ {
+ xkb->map->key_sym_map[kc].kt_index[i] = types[i];
+ if (key->syms[i] != NULL)
+ {
+ for (tmp = 0; tmp < width; tmp++)
+ {
+ if (tmp < key->numLevels[i])
+ outSyms[tmp] = key->syms[i][tmp];
+ else
+ outSyms[tmp] = NoSymbol;
+ if ((outActs != NULL) && (key->acts[i] != NULL))
+ {
+ if (tmp < key->numLevels[i])
+ outActs[tmp] = key->acts[i][tmp];
+ else
+ outActs[tmp].type = XkbSA_NoAction;
+ }
+ }
+ }
+ outSyms += width;
+ if (outActs)
+ outActs += width;
+ }
+ switch (key->behavior.type & XkbKB_OpMask)
+ {
+ case XkbKB_Default:
+ break;
+ case XkbKB_Overlay1:
+ case XkbKB_Overlay2:
+ /* find key by name! */
+ if (!FindNamedKey(xkb, key->nameForOverlayKey, &okc, True,
+ CreateKeyNames(xkb), 0))
+ {
+ if (warningLevel >= 1)
+ {
+ WARN2("Key %s not found in %s keycodes\n",
+ longText(key->nameForOverlayKey, XkbMessage),
+ XkbAtomText(NULL, xkb->names->keycodes, XkbMessage));
+ ACTION1("Not treating %s as an overlay key \n",
+ longText(key->name, XkbMessage));
+ }
+ break;
+ }
+ key->behavior.data = okc;
+ default:
+ xkb->server->behaviors[kc] = key->behavior;
+ xkb->server->explicit[kc] |= XkbExplicitBehaviorMask;
+ break;
+ }
+ if (key->defs.defined & _Key_VModMap)
+ {
+ xkb->server->vmodmap[kc] = key->vmodmap;
+ xkb->server->explicit[kc] |= XkbExplicitVModMapMask;
+ }
+ if (key->repeat != RepeatUndefined)
+ {
+ if (key->repeat == RepeatYes)
+ xkb->ctrls->per_key_repeat[kc / 8] |= (1 << (kc % 8));
+ else
+ xkb->ctrls->per_key_repeat[kc / 8] &= ~(1 << (kc % 8));
+ xkb->server->explicit[kc] |= XkbExplicitAutoRepeatMask;
+ }
+ CopySymbolsDef(result, key, kc + 1);
return True;
}
static Bool
-CopyModMapDef(XkbFileInfo *result,ModMapEntry *entry)
+CopyModMapDef(XkbFileInfo * result, ModMapEntry * entry)
{
-unsigned kc;
-XkbDescPtr xkb;
-
- xkb= result->xkb;
- if ((!entry->haveSymbol)&&(!FindNamedKey(xkb,entry->u.keyName,&kc,True,
- CreateKeyNames(xkb),0))) {
- if (warningLevel>=5) {
- WARN2("Key %s not found in %s keycodes\n",
- longText(entry->u.keyName,XkbMessage),
- XkbAtomText(NULL,xkb->names->keycodes,XkbMessage));
- ACTION1("Modifier map entry for %s not updated\n",
- XkbModIndexText(entry->modifier,XkbMessage));
- }
- return False;
- }
- else if (entry->haveSymbol&&(!FindKeyForSymbol(xkb,entry->u.keySym,&kc))) {
- if (warningLevel>5) {
- WARN2("Key \"%s\" not found in %s symbol map\n",
- XkbKeysymText(entry->u.keySym,XkbMessage),
- XkbAtomText(NULL,xkb->names->symbols,XkbMessage));
- ACTION1("Modifier map entry for %s not updated\n",
- XkbModIndexText(entry->modifier,XkbMessage));
- }
- return False;
- }
- xkb->map->modmap[kc]|= (1<<entry->modifier);
+ unsigned kc;
+ XkbDescPtr xkb;
+
+ xkb = result->xkb;
+ if ((!entry->haveSymbol)
+ &&
+ (!FindNamedKey
+ (xkb, entry->u.keyName, &kc, True, CreateKeyNames(xkb), 0)))
+ {
+ if (warningLevel >= 5)
+ {
+ WARN2("Key %s not found in %s keycodes\n",
+ longText(entry->u.keyName, XkbMessage),
+ XkbAtomText(NULL, xkb->names->keycodes, XkbMessage));
+ ACTION1("Modifier map entry for %s not updated\n",
+ XkbModIndexText(entry->modifier, XkbMessage));
+ }
+ return False;
+ }
+ else if (entry->haveSymbol
+ && (!FindKeyForSymbol(xkb, entry->u.keySym, &kc)))
+ {
+ if (warningLevel > 5)
+ {
+ WARN2("Key \"%s\" not found in %s symbol map\n",
+ XkbKeysymText(entry->u.keySym, XkbMessage),
+ XkbAtomText(NULL, xkb->names->symbols, XkbMessage));
+ ACTION1("Modifier map entry for %s not updated\n",
+ XkbModIndexText(entry->modifier, XkbMessage));
+ }
+ return False;
+ }
+ xkb->map->modmap[kc] |= (1 << entry->modifier);
return True;
}
Bool
-CompileSymbols(XkbFile *file,XkbFileInfo *result,unsigned merge)
+CompileSymbols(XkbFile * file, XkbFileInfo * result, unsigned merge)
{
-register int i;
-SymbolsInfo info;
-XkbDescPtr xkb;
+ register int i;
+ SymbolsInfo info;
+ XkbDescPtr xkb;
- xkb= result->xkb;
- InitSymbolsInfo(&info,xkb);
- info.dflt.defs.fileID= file->id;
- info.dflt.defs.merge= merge;
- HandleSymbolsFile(file,xkb,merge,&info);
+ xkb = result->xkb;
+ InitSymbolsInfo(&info, xkb);
+ info.dflt.defs.fileID = file->id;
+ info.dflt.defs.merge = merge;
+ HandleSymbolsFile(file, xkb, merge, &info);
if (info.nKeys == 0)
return True;
- if (info.errorCount==0) {
- KeyInfo *key;
- if (XkbAllocNames(xkb,XkbSymbolsNameMask|XkbGroupNamesMask,0,0)
- !=Success) {
- WSGO("Can not allocate names in CompileSymbols\n");
- ACTION("Symbols not added\n");
- return False;
- }
- if(XkbAllocClientMap(xkb,XkbKeySymsMask|XkbModifierMapMask,0)!=Success){
- WSGO("Could not allocate client map in CompileSymbols\n");
- ACTION("Symbols not added\n");
- return False;
- }
- if (XkbAllocServerMap(xkb,XkbAllServerInfoMask,32)!=Success) {
- WSGO("Could not allocate server map in CompileSymbols\n");
- ACTION("Symbols not added\n");
- return False;
- }
- if (XkbAllocControls(xkb,XkbPerKeyRepeatMask)!=Success) {
- WSGO("Could not allocate controls in CompileSymbols\n");
- ACTION("Symbols not added\n");
- return False;
- }
- xkb->names->symbols= XkbInternAtom(xkb->dpy,info.name,False);
- if (info.aliases)
- ApplyAliases(xkb,False,&info.aliases);
- for (i=0;i<XkbNumKbdGroups;i++) {
- if (info.groupNames[i]!=None)
- xkb->names->groups[i]= info.groupNames[i];
- }
- for (key=info.keys,i=0;i<info.nKeys;i++,key++) {
- PrepareKeyDef(key);
- }
- for (key=info.keys,i=0;i<info.nKeys;i++,key++) {
- if (!CopySymbolsDef(result,key,0))
- info.errorCount++;
- }
- if (warningLevel>3) {
- for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) {
- if (xkb->names->keys[i].name[0]=='\0')
- continue;
- if (XkbKeyNumGroups(xkb,i)<1) {
- char buf[5];
- memcpy(buf,xkb->names->keys[i].name,4);
- buf[4]= '\0';
- WARN2("No symbols defined for <%s> (keycode %d)\n",buf,i);
- }
- }
- }
- if (info.modMap) {
- ModMapEntry *mm,*next;
- for (mm=info.modMap;mm!=NULL;mm=next) {
- if (!CopyModMapDef(result,mm))
- info.errorCount++;
- next= (ModMapEntry *)mm->defs.next;
- }
- }
- return True;
+ if (info.errorCount == 0)
+ {
+ KeyInfo *key;
+ if (XkbAllocNames(xkb, XkbSymbolsNameMask | XkbGroupNamesMask, 0, 0)
+ != Success)
+ {
+ WSGO("Can not allocate names in CompileSymbols\n");
+ ACTION("Symbols not added\n");
+ return False;
+ }
+ if (XkbAllocClientMap(xkb, XkbKeySymsMask | XkbModifierMapMask, 0)
+ != Success)
+ {
+ WSGO("Could not allocate client map in CompileSymbols\n");
+ ACTION("Symbols not added\n");
+ return False;
+ }
+ if (XkbAllocServerMap(xkb, XkbAllServerInfoMask, 32) != Success)
+ {
+ WSGO("Could not allocate server map in CompileSymbols\n");
+ ACTION("Symbols not added\n");
+ return False;
+ }
+ if (XkbAllocControls(xkb, XkbPerKeyRepeatMask) != Success)
+ {
+ WSGO("Could not allocate controls in CompileSymbols\n");
+ ACTION("Symbols not added\n");
+ return False;
+ }
+ xkb->names->symbols = XkbInternAtom(xkb->dpy, info.name, False);
+ if (info.aliases)
+ ApplyAliases(xkb, False, &info.aliases);
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ if (info.groupNames[i] != None)
+ xkb->names->groups[i] = info.groupNames[i];
+ }
+ for (key = info.keys, i = 0; i < info.nKeys; i++, key++)
+ {
+ PrepareKeyDef(key);
+ }
+ for (key = info.keys, i = 0; i < info.nKeys; i++, key++)
+ {
+ if (!CopySymbolsDef(result, key, 0))
+ info.errorCount++;
+ }
+ if (warningLevel > 3)
+ {
+ for (i = xkb->min_key_code; i <= xkb->max_key_code; i++)
+ {
+ if (xkb->names->keys[i].name[0] == '\0')
+ continue;
+ if (XkbKeyNumGroups(xkb, i) < 1)
+ {
+ char buf[5];
+ memcpy(buf, xkb->names->keys[i].name, 4);
+ buf[4] = '\0';
+ WARN2
+ ("No symbols defined for <%s> (keycode %d)\n",
+ buf, i);
+ }
+ }
+ }
+ if (info.modMap)
+ {
+ ModMapEntry *mm, *next;
+ for (mm = info.modMap; mm != NULL; mm = next)
+ {
+ if (!CopyModMapDef(result, mm))
+ info.errorCount++;
+ next = (ModMapEntry *) mm->defs.next;
+ }
+ }
+ return True;
}
return False;
}
diff --git a/utils.c b/utils.c
index 6921d31..55efbe1 100644
--- a/utils.c
+++ b/utils.c
@@ -1,10 +1,10 @@
/*\
*
- * COPYRIGHT 1990
- * DIGITAL EQUIPMENT CORPORATION
- * MAYNARD, MASSACHUSETTS
- * ALL RIGHTS RESERVED.
+ * COPYRIGHT 1990
+ * DIGITAL EQUIPMENT CORPORATION
+ * MAYNARD, MASSACHUSETTS
+ * ALL RIGHTS RESERVED.
*
* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
* SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
@@ -23,7 +23,7 @@
* documentation, and that the name of Digital Equipment Corporation not be
* used in advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
- \*/
+ \*/
#include "utils.h"
#include <ctype.h>
@@ -35,43 +35,46 @@
Opaque
uAlloc(unsigned size)
{
- return((Opaque)malloc(size));
+ return ((Opaque) malloc(size));
}
/***====================================================================***/
Opaque
-uCalloc(unsigned n,unsigned size)
+uCalloc(unsigned n, unsigned size)
{
- return((Opaque)calloc(n,size));
+ return ((Opaque) calloc(n, size));
}
/***====================================================================***/
Opaque
-uRealloc(Opaque old,unsigned newSize)
+uRealloc(Opaque old, unsigned newSize)
{
- if (old==NULL)
- return((Opaque)malloc(newSize));
- else return((Opaque)realloc((char *)old,newSize));
+ if (old == NULL)
+ return ((Opaque) malloc(newSize));
+ else
+ return ((Opaque) realloc((char *) old, newSize));
}
/***====================================================================***/
Opaque
-uRecalloc(Opaque old,unsigned nOld,unsigned nNew,unsigned itemSize)
+uRecalloc(Opaque old, unsigned nOld, unsigned nNew, unsigned itemSize)
{
-char *rtrn;
-
- if (old==NULL)
- rtrn= (char *)calloc(nNew,itemSize);
- else {
- rtrn= (char *)realloc((char *)old,nNew*itemSize);
- if ((rtrn)&&(nNew>nOld)) {
- bzero(&rtrn[nOld*itemSize],(nNew-nOld)*itemSize);
- }
+ char *rtrn;
+
+ if (old == NULL)
+ rtrn = (char *) calloc(nNew, itemSize);
+ else
+ {
+ rtrn = (char *) realloc((char *) old, nNew * itemSize);
+ if ((rtrn) && (nNew > nOld))
+ {
+ bzero(&rtrn[nOld * itemSize], (nNew - nOld) * itemSize);
+ }
}
- return (Opaque)rtrn;
+ return (Opaque) rtrn;
}
/***====================================================================***/
@@ -79,8 +82,8 @@ char *rtrn;
void
uFree(Opaque ptr)
{
- if (ptr!=(Opaque)NULL)
- free((char *)ptr);
+ if (ptr != (Opaque) NULL)
+ free((char *) ptr);
return;
}
@@ -88,51 +91,58 @@ uFree(Opaque ptr)
/*** FUNCTION ENTRY TRACKING ***/
/***====================================================================***/
-static FILE *entryFile= NULL;
- int uEntryLevel;
+static FILE *entryFile = NULL;
+int uEntryLevel;
Boolean
uSetEntryFile(char *name)
{
- if ((entryFile!=NULL)&&(entryFile!=stderr)) {
- fprintf(entryFile,"switching to %s\n",name?name:"stderr");
- fclose(entryFile);
+ if ((entryFile != NULL) && (entryFile != stderr))
+ {
+ fprintf(entryFile, "switching to %s\n", name ? name : "stderr");
+ fclose(entryFile);
}
- if (name!=NullString) entryFile= fopen(name,"w");
- else entryFile= stderr;
- if (entryFile==NULL) {
- entryFile= stderr;
- return(False);
+ if (name != NullString)
+ entryFile = fopen(name, "w");
+ else
+ entryFile = stderr;
+ if (entryFile == NULL)
+ {
+ entryFile = stderr;
+ return (False);
}
- return(True);
+ return (True);
}
void
-uEntry(int l,char *s,...)
+uEntry(int l, char *s, ...)
{
-int i;
-va_list args;
+ int i;
+ va_list args;
- for (i=0;i<uEntryLevel;i++) {
- putc(' ',entryFile);
+ for (i = 0; i < uEntryLevel; i++)
+ {
+ putc(' ', entryFile);
}
va_start(args, s);
- vfprintf(entryFile,s,args);
+ vfprintf(entryFile, s, args);
va_end(args);
- uEntryLevel+= l;
+ uEntryLevel += l;
}
void
-uExit(int l,char *rtVal)
+uExit(int l, char *rtVal)
{
-int i;
-
- uEntryLevel-= l;
- if (uEntryLevel<0) uEntryLevel= 0;
- for (i=0;i<uEntryLevel;i++) {
- putc(' ',entryFile);
+ int i;
+
+ uEntryLevel -= l;
+ if (uEntryLevel < 0)
+ uEntryLevel = 0;
+ for (i = 0; i < uEntryLevel; i++)
+ {
+ putc(' ', entryFile);
}
- fprintf(entryFile,"---> %p\n",rtVal);
+ fprintf(entryFile, "---> %p\n", rtVal);
return;
}
@@ -140,83 +150,92 @@ int i;
/*** PRINT FUNCTIONS ***/
/***====================================================================***/
- FILE *uDebugFile= NULL;
- int uDebugIndentLevel= 0;
- int uDebugIndentSize= 4;
+FILE *uDebugFile = NULL;
+int uDebugIndentLevel = 0;
+int uDebugIndentSize = 4;
Boolean
uSetDebugFile(char *name)
{
- if ((uDebugFile!=NULL)&&(uDebugFile!=stderr)) {
- fprintf(uDebugFile,"switching to %s\n",name?name:"stderr");
- fclose(uDebugFile);
+ if ((uDebugFile != NULL) && (uDebugFile != stderr))
+ {
+ fprintf(uDebugFile, "switching to %s\n", name ? name : "stderr");
+ fclose(uDebugFile);
}
- if (name!=NullString) uDebugFile= fopen(name,"w");
- else uDebugFile= stderr;
- if (uDebugFile==NULL) {
- uDebugFile= stderr;
- return(False);
+ if (name != NullString)
+ uDebugFile = fopen(name, "w");
+ else
+ uDebugFile = stderr;
+ if (uDebugFile == NULL)
+ {
+ uDebugFile = stderr;
+ return (False);
}
- return(True);
+ return (True);
}
void
-uDebug(char *s,...)
+uDebug(char *s, ...)
{
-int i;
-va_list args;
+ int i;
+ va_list args;
- for (i=(uDebugIndentLevel*uDebugIndentSize);i>0;i--) {
- putc(' ',uDebugFile);
+ for (i = (uDebugIndentLevel * uDebugIndentSize); i > 0; i--)
+ {
+ putc(' ', uDebugFile);
}
va_start(args, s);
- vfprintf(uDebugFile,s,args);
+ vfprintf(uDebugFile, s, args);
va_end(args);
fflush(uDebugFile);
}
void
-uDebugNOI(char *s,...)
+uDebugNOI(char *s, ...)
{
-va_list args;
+ va_list args;
va_start(args, s);
- vfprintf(uDebugFile,s,args);
+ vfprintf(uDebugFile, s, args);
va_end(args);
fflush(uDebugFile);
}
/***====================================================================***/
-static FILE *errorFile= NULL;
-static int outCount= 0;
-static char *preMsg= NULL;
-static char *postMsg= NULL;
-static char *prefix= NULL;
+static FILE *errorFile = NULL;
+static int outCount = 0;
+static char *preMsg = NULL;
+static char *postMsg = NULL;
+static char *prefix = NULL;
Boolean
uSetErrorFile(char *name)
{
- if ((errorFile!=NULL)&&(errorFile!=stderr)) {
- fprintf(errorFile,"switching to %s\n",name?name:"stderr");
- fclose(errorFile);
+ if ((errorFile != NULL) && (errorFile != stderr))
+ {
+ fprintf(errorFile, "switching to %s\n", name ? name : "stderr");
+ fclose(errorFile);
}
- if (name!=NullString) errorFile= fopen(name,"w");
- else errorFile= stderr;
- if (errorFile==NULL) {
- errorFile= stderr;
- return(False);
+ if (name != NullString)
+ errorFile = fopen(name, "w");
+ else
+ errorFile = stderr;
+ if (errorFile == NULL)
+ {
+ errorFile = stderr;
+ return (False);
}
- return(True);
+ return (True);
}
void
uInformation(const char *s, ...)
{
-va_list args;
+ va_list args;
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
fflush(errorFile);
}
@@ -226,13 +245,13 @@ va_list args;
void
uAction(const char *s, ...)
{
-va_list args;
+ va_list args;
- if (prefix!=NULL)
- fprintf(errorFile,"%s",prefix);
- fprintf(errorFile," ");
+ if (prefix != NULL)
+ fprintf(errorFile, "%s", prefix);
+ fprintf(errorFile, " ");
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
fflush(errorFile);
}
@@ -242,15 +261,15 @@ va_list args;
void
uWarning(const char *s, ...)
{
-va_list args;
+ va_list args;
- if ((outCount==0)&&(preMsg!=NULL))
- fprintf(errorFile,"%s\n",preMsg);
- if (prefix!=NULL)
- fprintf(errorFile,"%s",prefix);
- fprintf(errorFile,"Warning: ");
+ if ((outCount == 0) && (preMsg != NULL))
+ fprintf(errorFile, "%s\n", preMsg);
+ if (prefix != NULL)
+ fprintf(errorFile, "%s", prefix);
+ fprintf(errorFile, "Warning: ");
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
fflush(errorFile);
outCount++;
@@ -261,15 +280,15 @@ va_list args;
void
uError(const char *s, ...)
{
-va_list args;
+ va_list args;
- if ((outCount==0)&&(preMsg!=NULL))
- fprintf(errorFile,"%s\n",preMsg);
- if (prefix!=NULL)
- fprintf(errorFile,"%s",prefix);
- fprintf(errorFile,"Error: ");
+ if ((outCount == 0) && (preMsg != NULL))
+ fprintf(errorFile, "%s\n", preMsg);
+ if (prefix != NULL)
+ fprintf(errorFile, "%s", prefix);
+ fprintf(errorFile, "Error: ");
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
fflush(errorFile);
outCount++;
@@ -280,17 +299,17 @@ va_list args;
void
uFatalError(const char *s, ...)
{
-va_list args;
+ va_list args;
- if ((outCount==0)&&(preMsg!=NULL))
- fprintf(errorFile,"%s\n",preMsg);
- if (prefix!=NULL)
- fprintf(errorFile,"%s",prefix);
- fprintf(errorFile,"Fatal Error: ");
+ if ((outCount == 0) && (preMsg != NULL))
+ fprintf(errorFile, "%s\n", preMsg);
+ if (prefix != NULL)
+ fprintf(errorFile, "%s", prefix);
+ fprintf(errorFile, "Fatal Error: ");
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
- fprintf(errorFile," Exiting\n");
+ fprintf(errorFile, " Exiting\n");
fflush(errorFile);
outCount++;
exit(1);
@@ -302,15 +321,15 @@ va_list args;
void
uInternalError(const char *s, ...)
{
-va_list args;
+ va_list args;
- if ((outCount==0)&&(preMsg!=NULL))
- fprintf(errorFile,"%s\n",preMsg);
- if (prefix!=NULL)
- fprintf(errorFile,"%s",prefix);
- fprintf(errorFile,"Internal error: ");
+ if ((outCount == 0) && (preMsg != NULL))
+ fprintf(errorFile, "%s\n", preMsg);
+ if (prefix != NULL)
+ fprintf(errorFile, "%s", prefix);
+ fprintf(errorFile, "Internal error: ");
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
fflush(errorFile);
outCount++;
@@ -319,30 +338,30 @@ va_list args;
void
uSetPreErrorMessage(char *msg)
{
- outCount= 0;
- preMsg= msg;
+ outCount = 0;
+ preMsg = msg;
return;
}
void
uSetPostErrorMessage(char *msg)
{
- postMsg= msg;
+ postMsg = msg;
return;
}
void
uSetErrorPrefix(char *pre)
{
- prefix= pre;
+ prefix = pre;
return;
}
void
uFinishUp(void)
{
- if ((outCount>0)&&(postMsg!=NULL))
- fprintf(errorFile,"%s\n",postMsg);
+ if ((outCount > 0) && (postMsg != NULL))
+ fprintf(errorFile, "%s\n", postMsg);
return;
}
@@ -352,12 +371,12 @@ uFinishUp(void)
char *
uStringDup(const char *str)
{
-char *rtrn;
+ char *rtrn;
- if (str==NULL)
- return NULL;
- rtrn= (char *)uAlloc(strlen(str)+1);
- strcpy(rtrn,str);
+ if (str == NULL)
+ return NULL;
+ rtrn = (char *) uAlloc(strlen(str) + 1);
+ strcpy(rtrn, str);
return rtrn;
}
#endif
@@ -366,24 +385,26 @@ char *rtrn;
int
uStrCaseCmp(const char *str1, const char *str2)
{
- char buf1[512],buf2[512];
+ char buf1[512], buf2[512];
char c, *s;
register int n;
- for (n=0, s = buf1; (c = *str1++); n++) {
- if (isupper(c))
- c = tolower(c);
- if (n>510)
- break;
- *s++ = c;
+ for (n = 0, s = buf1; (c = *str1++); n++)
+ {
+ if (isupper(c))
+ c = tolower(c);
+ if (n > 510)
+ break;
+ *s++ = c;
}
*s = '\0';
- for (n=0, s = buf2; (c = *str2++); n++) {
- if (isupper(c))
- c = tolower(c);
- if (n>510)
- break;
- *s++ = c;
+ for (n = 0, s = buf2; (c = *str2++); n++)
+ {
+ if (isupper(c))
+ c = tolower(c);
+ if (n > 510)
+ break;
+ *s++ = c;
}
*s = '\0';
return (strcmp(buf1, buf2));
@@ -394,15 +415,19 @@ uStrCasePrefix(const char *my_prefix, char *str)
{
char c1;
char c2;
- while (((c1=*my_prefix)!='\0')&&((c2=*str)!='\0')) {
- if (isupper(c1)) c1= tolower(c1);
- if (isupper(c2)) c2= tolower(c2);
- if (c1!=c2)
- return 0;
- my_prefix++; str++;
+ while (((c1 = *my_prefix) != '\0') && ((c2 = *str) != '\0'))
+ {
+ if (isupper(c1))
+ c1 = tolower(c1);
+ if (isupper(c2))
+ c2 = tolower(c2);
+ if (c1 != c2)
+ return 0;
+ my_prefix++;
+ str++;
}
- if (c1!='\0')
- return 0;
+ if (c1 != '\0')
+ return 0;
return 1;
}
diff --git a/utils.h b/utils.h
index 8b0ab9b..71e0d11 100644
--- a/utils.h
+++ b/utils.h
@@ -3,10 +3,10 @@
/*\
*
- * COPYRIGHT 1990
- * DIGITAL EQUIPMENT CORPORATION
- * MAYNARD, MASSACHUSETTS
- * ALL RIGHTS RESERVED.
+ * COPYRIGHT 1990
+ * DIGITAL EQUIPMENT CORPORATION
+ * MAYNARD, MASSACHUSETTS
+ * ALL RIGHTS RESERVED.
*
* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
* SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
@@ -25,7 +25,7 @@
* documentation, and that the name of Digital Equipment Corporation not be
* used in advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
- \*/
+ \*/
/***====================================================================***/
@@ -43,14 +43,14 @@
/***====================================================================***/
#ifndef OPAQUE_DEFINED
-typedef void *Opaque;
+typedef void *Opaque;
#endif
#ifndef NullOpaque
#define NullOpaque ((Opaque)NULL)
#endif
#ifndef BOOLEAN_DEFINED
-typedef char Boolean;
+typedef char Boolean;
#endif
#ifndef True
@@ -60,7 +60,7 @@ typedef char Boolean;
#define booleanText(b) ((b)?"True":"False")
#ifndef COMPARISON_DEFINED
-typedef int Comparison;
+typedef int Comparison;
#define Greater ((Comparison)1)
#define Equal ((Comparison)0)
@@ -70,36 +70,32 @@ typedef int Comparison;
#endif
#if 0
-typedef union {
- int i;
- unsigned u;
- void *p;
- void *(*fp)();
+typedef union
+{
+ int i;
+ unsigned u;
+ void *p;
+ void *(*fp) ();
} Union;
#endif
/***====================================================================***/
-extern Opaque uAlloc(
- unsigned /* size */
-);
-extern Opaque uCalloc(
- unsigned /* n */,
- unsigned /* size */
-);
-extern Opaque uRealloc(
- Opaque /* old */,
- unsigned /* newSize */
-);
-extern Opaque uRecalloc(
- Opaque /* old */,
- unsigned /* nOld */,
- unsigned /* nNew */,
- unsigned /* newSize */
-);
-extern void uFree(
- Opaque /* ptr */
-);
+extern Opaque uAlloc(unsigned /* size */
+ );
+extern Opaque uCalloc(unsigned /* n */ ,
+ unsigned /* size */
+ );
+extern Opaque uRealloc(Opaque /* old */ ,
+ unsigned /* newSize */
+ );
+extern Opaque uRecalloc(Opaque /* old */ ,
+ unsigned /* nOld */ ,
+ unsigned /* nNew */ ,
+ unsigned /* newSize */
+ );
+extern void uFree(Opaque /* ptr */
+ );
#define uTypedAlloc(t) ((t *)uAlloc((unsigned)sizeof(t)))
#define uTypedCalloc(n,t) ((t *)uCalloc((unsigned)n,(unsigned)sizeof(t)))
@@ -115,9 +111,8 @@ extern void uFree(
/***====================================================================***/
-extern Boolean uSetErrorFile(
- char * /* name */
-);
+extern Boolean uSetErrorFile(char * /* name */
+ );
#define INFO6 uInformation
#define INFO5 uInformation
@@ -127,14 +122,14 @@ extern Boolean uSetErrorFile(
#define INFO1 uInformation
#define INFO uInformation
-extern void uInformation(
- const char * /* s */, ...
-)
+extern void
+uInformation(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
#define ACTION6 uAction
#define ACTION5 uAction
@@ -144,14 +139,13 @@ __attribute__((format(printf, 1, 2)))
#define ACTION1 uAction
#define ACTION uAction
-extern void uAction(
- const char * /* s */, ...
-)
+ extern void uAction(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
#define WARN6 uWarning
#define WARN5 uWarning
@@ -161,14 +155,13 @@ __attribute__((format(printf, 1, 2)))
#define WARN1 uWarning
#define WARN uWarning
-extern void uWarning(
- const char * /* s */, ...
-)
+ extern void uWarning(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
#define ERROR6 uError
#define ERROR5 uError
@@ -178,14 +171,13 @@ __attribute__((format(printf, 1, 2)))
#define ERROR1 uError
#define ERROR uError
-extern void uError(
- const char * /* s */, ...
-)
+ extern void uError(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
#define FATAL6 uFatalError
#define FATAL5 uFatalError
@@ -195,14 +187,13 @@ __attribute__((format(printf, 1, 2)))
#define FATAL1 uFatalError
#define FATAL uFatalError
-extern void uFatalError(
- const char * /* s */, ...
-)
+ extern void uFatalError(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
/* WSGO stands for "Weird Stuff Going On" */
#define WSGO6 uInternalError
@@ -213,30 +204,24 @@ __attribute__((format(printf, 1, 2)))
#define WSGO1 uInternalError
#define WSGO uInternalError
-extern void uInternalError(
- const char * /* s */, ...
-)
+ extern void uInternalError(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
-extern void uSetPreErrorMessage(
- char * /* msg */
-);
+ extern void uSetPreErrorMessage(char * /* msg */
+ );
-extern void uSetPostErrorMessage(
- char * /* msg */
-);
+ extern void uSetPostErrorMessage(char * /* msg */
+ );
-extern void uSetErrorPrefix(
- char * /* void */
-);
+ extern void uSetErrorPrefix(char * /* void */
+ );
-extern void uFinishUp(
- void
-);
+ extern void uFinishUp(void);
/***====================================================================***/
@@ -253,21 +238,18 @@ extern void uFinishUp(
#define uStrCaseCmp(s1,s2) (strcasecmp(s1,s2))
#define uStrCasePrefix(p,s) (strncasecmp(p,s,strlen(p))==0)
#else
-extern int uStrCaseCmp(
- const char * /* s1 */,
- const char * /* s2 */
-);
-extern int uStrCasePrefix(
- const char * /* p */,
- char * /* str */
-);
+ extern int uStrCaseCmp(const char * /* s1 */ ,
+ const char * /* s2 */
+ );
+ extern int uStrCasePrefix(const char * /* p */ ,
+ char * /* str */
+ );
#endif
#ifdef HAVE_STRDUP
#define uStringDup(s1) (strdup(s1))
#else
-extern char *uStringDup(
- const char * /* s1 */
-);
+ extern char *uStringDup(const char * /* s1 */
+ );
#endif
/***====================================================================***/
@@ -286,35 +268,32 @@ extern char *uStringDup(
#endif
#ifdef DEBUG_VAR_NOT_LOCAL
-extern
+ extern
#endif
-unsigned int DEBUG_VAR;
+ unsigned int DEBUG_VAR;
-extern void uDebug(
- char * /* s */, ...
-)
+ extern void uDebug(char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
-extern void uDebugNOI( /* no indent */
- char * /* s */, ...
-)
+ extern void uDebugNOI( /* no indent */
+ char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
-extern Boolean uSetDebugFile(
- char *name
-);
+ extern Boolean uSetDebugFile(char *name);
-extern FILE *uDebugFile;
-extern int uDebugIndentLevel;
-extern int uDebugIndentSize;
+ extern FILE *uDebugFile;
+ extern int uDebugIndentLevel;
+ extern int uDebugIndentSize;
#define uDebugIndent(l) (uDebugIndentLevel+=(l))
#define uDebugOutdent(l) (uDebugIndentLevel-=(l))
#ifdef DEBUG_ON
@@ -345,29 +324,24 @@ extern int uDebugIndentSize;
#define uDEBUG_NOI5(f,s,a,b,c,d,e)
#endif
-extern Boolean uSetEntryFile(
- char *name
-);
-extern void uEntry(
- int /* l */,
- char * /* s */, ...
-)
+ extern Boolean uSetEntryFile(char *name);
+ extern void uEntry(int /* l */ ,
+ char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 2, 3)))
+ __attribute__ ((format(printf, 2, 3)))
#endif
-;
+ ;
-extern void uExit(
- int l,char *rtVal
-);
+ extern void uExit(int l, char *rtVal);
#ifdef ENTRY_TRACKING_ON
#define ENTRY_BIT 0x10
#define LOW_ENTRY_BIT 0x1000
#define ENTER (DEBUG_VAR&ENTRY_BIT)
#define FLAG(fLag) (DEBUG_VAR&(fLag))
-extern int uEntryLevel;
+ extern int uEntryLevel;
#define uENTRY(s) { if (ENTER) uEntry(1,s);}
#define uENTRY1(s,a) { if (ENTER) uEntry(1,s,a);}
@@ -412,9 +386,7 @@ extern int uEntryLevel;
#define uFLAG_ENTRY7(f,s,a,b,c,d,e,g,h)
#define uFLAG_RETURN(v) { return(v);}
#define uFLAG_VOIDRETURN { return; }
-#endif
+#endif
#endif /* UTILS_H */
-
-
diff --git a/vmod.c b/vmod.c
index abb6d41..1f237f5 100644
--- a/vmod.c
+++ b/vmod.c
@@ -38,30 +38,32 @@
#include "vmod.h"
void
-InitVModInfo(VModInfo *info,XkbDescPtr xkb)
+InitVModInfo(VModInfo * info, XkbDescPtr xkb)
{
- ClearVModInfo(info,xkb);
- info->errorCount= 0;
+ ClearVModInfo(info, xkb);
+ info->errorCount = 0;
return;
}
void
-ClearVModInfo(VModInfo *info,XkbDescPtr xkb)
+ClearVModInfo(VModInfo * info, XkbDescPtr xkb)
{
-register int i;
-
- if (XkbAllocNames(xkb,XkbVirtualModNamesMask,0,0)!=Success)
- return;
- if (XkbAllocServerMap(xkb,XkbVirtualModsMask,0)!=Success)
- return;
- info->xkb= xkb;
- info->newlyDefined= info->defined= info->available= 0;
- if (xkb && xkb->names) {
- register int bit;
- for (i=0,bit=1;i<XkbNumVirtualMods;i++,bit<<=1) {
- if (xkb->names->vmods[i]!=None)
- info->defined|= bit;
- }
+ register int i;
+
+ if (XkbAllocNames(xkb, XkbVirtualModNamesMask, 0, 0) != Success)
+ return;
+ if (XkbAllocServerMap(xkb, XkbVirtualModsMask, 0) != Success)
+ return;
+ info->xkb = xkb;
+ info->newlyDefined = info->defined = info->available = 0;
+ if (xkb && xkb->names)
+ {
+ register int bit;
+ for (i = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1)
+ {
+ if (xkb->names->vmods[i] != None)
+ info->defined |= bit;
+ }
}
return;
}
@@ -69,113 +71,121 @@ register int i;
/***====================================================================***/
Bool
-HandleVModDef(VModDef *stmt,unsigned mergeMode,VModInfo *info)
+HandleVModDef(VModDef * stmt, unsigned mergeMode, VModInfo * info)
{
-register int i,bit,nextFree;
-ExprResult mod;
-XkbServerMapPtr srv;
-XkbNamesPtr names;
-Atom stmtName;
-
- srv= info->xkb->server;
- names= info->xkb->names;
- stmtName= XkbInternAtom(info->xkb->dpy,XkbAtomGetString(NULL,stmt->name),
- False);
- for (i=0,bit=1,nextFree= -1;i<XkbNumVirtualMods;i++,bit<<=1) {
- if (info->defined&bit) {
- if (names->vmods[i]==stmtName) { /* already defined */
- info->available|= bit;
- if (stmt->value==NULL)
- return True;
- else {
- char *str1;
- const char *str2 = "";
- if (!ExprResolveModMask(stmt->value,&mod,NULL,NULL)) {
- str1= XkbAtomText(NULL,stmt->name,XkbMessage);
- ACTION1("Declaration of %s ignored\n",str1);
- return False;
- }
- if (mod.uval==srv->vmods[i])
- return True;
-
- str1= XkbAtomText(NULL,stmt->name,XkbMessage);
- WARN1("Virtual modifier %s multiply defined\n",str1);
- str1= XkbModMaskText(srv->vmods[i],XkbCFile);
- if (mergeMode==MergeOverride) {
- str2= str1;
- str1= XkbModMaskText(mod.uval,XkbCFile);
- }
- ACTION2("Using %s, ignoring %s\n",str1,str2);
- if (mergeMode==MergeOverride)
- srv->vmods[i]= mod.uval;
- return True;
- }
- }
- }
- else if (nextFree<0)
- nextFree= i;
+ register int i, bit, nextFree;
+ ExprResult mod;
+ XkbServerMapPtr srv;
+ XkbNamesPtr names;
+ Atom stmtName;
+
+ srv = info->xkb->server;
+ names = info->xkb->names;
+ stmtName =
+ XkbInternAtom(info->xkb->dpy, XkbAtomGetString(NULL, stmt->name),
+ False);
+ for (i = 0, bit = 1, nextFree = -1; i < XkbNumVirtualMods; i++, bit <<= 1)
+ {
+ if (info->defined & bit)
+ {
+ if (names->vmods[i] == stmtName)
+ { /* already defined */
+ info->available |= bit;
+ if (stmt->value == NULL)
+ return True;
+ else
+ {
+ char *str1;
+ const char *str2 = "";
+ if (!ExprResolveModMask(stmt->value, &mod, NULL, NULL))
+ {
+ str1 = XkbAtomText(NULL, stmt->name, XkbMessage);
+ ACTION1("Declaration of %s ignored\n", str1);
+ return False;
+ }
+ if (mod.uval == srv->vmods[i])
+ return True;
+
+ str1 = XkbAtomText(NULL, stmt->name, XkbMessage);
+ WARN1("Virtual modifier %s multiply defined\n", str1);
+ str1 = XkbModMaskText(srv->vmods[i], XkbCFile);
+ if (mergeMode == MergeOverride)
+ {
+ str2 = str1;
+ str1 = XkbModMaskText(mod.uval, XkbCFile);
+ }
+ ACTION2("Using %s, ignoring %s\n", str1, str2);
+ if (mergeMode == MergeOverride)
+ srv->vmods[i] = mod.uval;
+ return True;
+ }
+ }
+ }
+ else if (nextFree < 0)
+ nextFree = i;
}
- if (nextFree<0) {
- ERROR1("Too many virtual modifiers defined (maximum %d)\n",
- XkbNumVirtualMods);
- ACTION("Exiting\n");
- return False;
+ if (nextFree < 0)
+ {
+ ERROR1("Too many virtual modifiers defined (maximum %d)\n",
+ XkbNumVirtualMods);
+ ACTION("Exiting\n");
+ return False;
}
- info->defined|= (1<<nextFree);
- info->newlyDefined|= (1<<nextFree);
- info->available|= (1<<nextFree);
- names->vmods[nextFree]= stmtName;
- if (stmt->value==NULL)
- return True;
- if (ExprResolveModMask(stmt->value,&mod,NULL,NULL)) {
- srv->vmods[nextFree]= mod.uval;
- return True;
+ info->defined |= (1 << nextFree);
+ info->newlyDefined |= (1 << nextFree);
+ info->available |= (1 << nextFree);
+ names->vmods[nextFree] = stmtName;
+ if (stmt->value == NULL)
+ return True;
+ if (ExprResolveModMask(stmt->value, &mod, NULL, NULL))
+ {
+ srv->vmods[nextFree] = mod.uval;
+ return True;
}
ACTION1("Declaration of %s ignored\n",
- XkbAtomText(NULL,stmt->name,XkbMessage));
+ XkbAtomText(NULL, stmt->name, XkbMessage));
return False;
}
int
-LookupVModIndex( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+LookupVModIndex(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
-register int i;
-register char * fieldStr;
-register char * modStr;
-XkbDescPtr xkb;
-
- xkb= (XkbDescPtr)priv;
- if ((xkb==NULL)||(xkb->names==NULL)||(elem!=None)||(type!=TypeInt)) {
- return False;
+ register int i;
+ register char *fieldStr;
+ register char *modStr;
+ XkbDescPtr xkb;
+
+ xkb = (XkbDescPtr) priv;
+ if ((xkb == NULL) || (xkb->names == NULL) || (elem != None)
+ || (type != TypeInt))
+ {
+ return False;
}
- fieldStr= XkbAtomGetString(xkb->dpy,field);
- if (fieldStr==NULL)
- return False;
- for (i=0;i<XkbNumVirtualMods;i++) {
- modStr= XkbAtomGetString(xkb->dpy,xkb->names->vmods[i]);
- if ((modStr!=NULL)&&(uStrCaseCmp(fieldStr,modStr)==0)) {
- val_rtrn->uval= i;
- return True;
- }
+ fieldStr = XkbAtomGetString(xkb->dpy, field);
+ if (fieldStr == NULL)
+ return False;
+ for (i = 0; i < XkbNumVirtualMods; i++)
+ {
+ modStr = XkbAtomGetString(xkb->dpy, xkb->names->vmods[i]);
+ if ((modStr != NULL) && (uStrCaseCmp(fieldStr, modStr) == 0))
+ {
+ val_rtrn->uval = i;
+ return True;
+ }
}
return False;
}
int
-LookupVModMask( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+LookupVModMask(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
- if (LookupVModIndex(priv,elem,field,type,val_rtrn)) {
- register unsigned ndx= val_rtrn->uval;
- val_rtrn->uval= (1<<(XkbNumModifiers+ndx));
- return True;
+ if (LookupVModIndex(priv, elem, field, type, val_rtrn))
+ {
+ register unsigned ndx = val_rtrn->uval;
+ val_rtrn->uval = (1 << (XkbNumModifiers + ndx));
+ return True;
}
return False;
}
@@ -183,41 +193,44 @@ LookupVModMask( XPointer priv,
int
FindKeypadVMod(XkbDescPtr xkb)
{
-Atom name;
-ExprResult rtrn;
+ Atom name;
+ ExprResult rtrn;
- name= XkbInternAtom(xkb->dpy,"NumLock",False);
- if ((xkb)&&
- LookupVModIndex((XPointer)xkb,None,name,TypeInt,&rtrn)) {
- return rtrn.ival;
+ name = XkbInternAtom(xkb->dpy, "NumLock", False);
+ if ((xkb) && LookupVModIndex((XPointer) xkb, None, name, TypeInt, &rtrn))
+ {
+ return rtrn.ival;
}
return -1;
}
Bool
-ResolveVirtualModifier(ExprDef *def,ExprResult *val_rtrn,VModInfo *info)
+ResolveVirtualModifier(ExprDef * def, ExprResult * val_rtrn, VModInfo * info)
{
-XkbNamesPtr names;
-
- names= info->xkb->names;
- if (def->op==ExprIdent) {
- register int i,bit;
- for (i=0,bit=1;i<XkbNumVirtualMods;i++,bit<<=1) {
- char *str1,*str2;
- str1= XkbAtomGetString(info->xkb->dpy,names->vmods[i]);
- str2= XkbAtomGetString(NULL,def->value.str);
- if ((info->available&bit)&&
- (uStrCaseCmp(str1,str2)==Equal)) {
- val_rtrn->uval= i;
- return True;
- }
- }
+ XkbNamesPtr names;
+
+ names = info->xkb->names;
+ if (def->op == ExprIdent)
+ {
+ register int i, bit;
+ for (i = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1)
+ {
+ char *str1, *str2;
+ str1 = XkbAtomGetString(info->xkb->dpy, names->vmods[i]);
+ str2 = XkbAtomGetString(NULL, def->value.str);
+ if ((info->available & bit) && (uStrCaseCmp(str1, str2) == Equal))
+ {
+ val_rtrn->uval = i;
+ return True;
+ }
+ }
}
- if (ExprResolveInteger(def,val_rtrn,NULL,NULL)) {
- if (val_rtrn->uval<XkbNumVirtualMods)
- return True;
- ERROR2("Illegal virtual modifier %d (must be 0..%d inclusive)\n",
- val_rtrn->uval,XkbNumVirtualMods-1);
+ if (ExprResolveInteger(def, val_rtrn, NULL, NULL))
+ {
+ if (val_rtrn->uval < XkbNumVirtualMods)
+ return True;
+ ERROR2("Illegal virtual modifier %d (must be 0..%d inclusive)\n",
+ val_rtrn->uval, XkbNumVirtualMods - 1);
}
return False;
}
diff --git a/vmod.h b/vmod.h
index e924179..559b9d5 100644
--- a/vmod.h
+++ b/vmod.h
@@ -27,59 +27,52 @@
#ifndef VMOD_H
#define VMOD_H 1
-typedef struct _VModInfo {
- XkbDescPtr xkb;
- unsigned defined;
- unsigned available;
- unsigned newlyDefined;
- int errorCount;
+typedef struct _VModInfo
+{
+ XkbDescPtr xkb;
+ unsigned defined;
+ unsigned available;
+ unsigned newlyDefined;
+ int errorCount;
} VModInfo;
-extern void InitVModInfo(
- VModInfo * /* info */,
- XkbDescPtr /* xkb */
-);
+extern void InitVModInfo(VModInfo * /* info */ ,
+ XkbDescPtr /* xkb */
+ );
-extern void ClearVModInfo(
- VModInfo * /* info */,
- XkbDescPtr /* xkb */
-);
+extern void ClearVModInfo(VModInfo * /* info */ ,
+ XkbDescPtr /* xkb */
+ );
-extern Bool HandleVModDef(
- VModDef * /* stmt */,
- unsigned /* mergeMode */,
- VModInfo * /* info */
-);
+extern Bool HandleVModDef(VModDef * /* stmt */ ,
+ unsigned /* mergeMode */ ,
+ VModInfo * /* info */
+ );
-extern Bool ApplyVModDefs(
- VModInfo * /* info */,
- XkbDescPtr /* xkb */
-);
+extern Bool ApplyVModDefs(VModInfo * /* info */ ,
+ XkbDescPtr /* xkb */
+ );
-extern int LookupVModIndex(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
+extern int LookupVModIndex(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
-extern int LookupVModMask(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
+extern int LookupVModMask(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
-extern int FindKeypadVMod(
- XkbDescPtr /* xkb */
-);
+extern int FindKeypadVMod(XkbDescPtr /* xkb */
+ );
-extern Bool ResolveVirtualModifier(
- ExprDef * /* def */,
- ExprResult * /* value_rtrn */,
- VModInfo * /* info */
-);
+extern Bool ResolveVirtualModifier(ExprDef * /* def */ ,
+ ExprResult * /* value_rtrn */ ,
+ VModInfo * /* info */
+ );
#endif /* VMOD_H */
diff --git a/xkbcomp.c b/xkbcomp.c
index 811424c..80268b0 100644
--- a/xkbcomp.c
+++ b/xkbcomp.c
@@ -75,34 +75,34 @@
#define INPUT_XKM 2
static const char *fileTypeExt[] = {
- "XXX",
- "xkm",
- "h",
- "xkb",
- "dir"
+ "XXX",
+ "xkm",
+ "h",
+ "xkb",
+ "dir"
};
-static unsigned inputFormat,outputFormat;
- char * rootDir;
-static char * inputFile;
-static char * inputMap;
-static char * outputFile;
-static char * inDpyName;
-static char * outDpyName;
-static Display * inDpy;
-static Display * outDpy;
-static Bool showImplicit= False;
-static Bool synch= False;
-static Bool computeDflts= False;
-static Bool xkblist= False;
- unsigned warningLevel= 5;
- unsigned verboseLevel= 0;
- unsigned dirsToStrip= 0;
- unsigned optionalParts= 0;
-static char * preErrorMsg= NULL;
-static char * postErrorMsg= NULL;
-static char * errorPrefix= NULL;
-static unsigned int device_id = XkbUseCoreKbd;
+static unsigned inputFormat, outputFormat;
+char *rootDir;
+static char *inputFile;
+static char *inputMap;
+static char *outputFile;
+static char *inDpyName;
+static char *outDpyName;
+static Display *inDpy;
+static Display *outDpy;
+static Bool showImplicit = False;
+static Bool synch = False;
+static Bool computeDflts = False;
+static Bool xkblist = False;
+unsigned warningLevel = 5;
+unsigned verboseLevel = 0;
+unsigned dirsToStrip = 0;
+unsigned optionalParts = 0;
+static char *preErrorMsg = NULL;
+static char *postErrorMsg = NULL;
+static char *errorPrefix = NULL;
+static unsigned int device_id = XkbUseCoreKbd;
/***====================================================================***/
@@ -110,16 +110,18 @@ static unsigned int device_id = XkbUseCoreKbd;
#define M1(m,a) fprintf(stderr,(m),(a))
static void
-Usage(int argc,char *argv[])
+Usage(int argc, char *argv[])
{
if (!xkblist)
- M1("Usage: %s [options] input-file [ output-file ]\n",argv[0]);
- else M1("Usage: %s [options] file[(map)] ...\n",argv[0]);
+ M1("Usage: %s [options] input-file [ output-file ]\n", argv[0]);
+ else
+ M1("Usage: %s [options] file[(map)] ...\n", argv[0]);
M("Legal options:\n");
M("-?,-help Print this message\n");
- if (!xkblist) {
- M("-a Show all actions\n");
- M("-C Create a C header file\n");
+ if (!xkblist)
+ {
+ M("-a Show all actions\n");
+ M("-C Create a C header file\n");
}
#ifdef DEBUG
M("-d [flags] Report debugging information\n");
@@ -127,44 +129,49 @@ Usage(int argc,char *argv[])
M("-em1 <msg> Print <msg> before printing first error message\n");
M("-emp <msg> Print <msg> at the start of each message line\n");
M("-eml <msg> If there were any errors, print <msg> before exiting\n");
- if (!xkblist) {
- M("-dflts Compute defaults for missing parts\n");
- M("-I[<dir>] Specifies a top level directory for include\n");
- M(" directives. Multiple directories are legal.\n");
- M("-l [flags] List matching maps in the specified files\n");
- M(" f: list fully specified names\n");
- M(" h: also list hidden maps\n");
- M(" l: long listing (show flags)\n");
- M(" p: also list partial maps\n");
- M(" R: recursively list subdirectories\n");
- M(" default is all options off\n");
+ if (!xkblist)
+ {
+ M("-dflts Compute defaults for missing parts\n");
+ M("-I[<dir>] Specifies a top level directory for include\n");
+ M(" directives. Multiple directories are legal.\n");
+ M("-l [flags] List matching maps in the specified files\n");
+ M(" f: list fully specified names\n");
+ M(" h: also list hidden maps\n");
+ M(" l: long listing (show flags)\n");
+ M(" p: also list partial maps\n");
+ M(" R: recursively list subdirectories\n");
+ M(" default is all options off\n");
}
M("-i <deviceid> Specifies device ID (not name) to compile for\n");
M("-m[ap] <map> Specifies map to compile\n");
M("-o <file> Specifies output file name\n");
- if (!xkblist) {
- M("-opt[ional] <parts> Specifies optional components of keymap\n");
- M(" Errors in optional parts are not fatal\n");
- M(" <parts> can be any combination of:\n");
- M(" c: compat map g: geometry\n");
- M(" k: keycodes s: symbols\n");
- M(" t: types\n");
+ if (!xkblist)
+ {
+ M("-opt[ional] <parts> Specifies optional components of keymap\n");
+ M(" Errors in optional parts are not fatal\n");
+ M(" <parts> can be any combination of:\n");
+ M(" c: compat map g: geometry\n");
+ M(" k: keycodes s: symbols\n");
+ M(" t: types\n");
}
- if (xkblist) {
- M("-p <count> Specifies the number of slashes to be stripped\n");
- M(" from the front of the map name on output\n");
+ if (xkblist)
+ {
+ M("-p <count> Specifies the number of slashes to be stripped\n");
+ M(" from the front of the map name on output\n");
}
M("-R[<DIR>] Specifies the root directory for\n");
M(" relative path names\n");
M("-synch Force synchronization\n");
- if (xkblist) {
- M("-v [<flags>] Set level of detail for listing.\n");
- M(" flags are as for the -l option\n");
+ if (xkblist)
+ {
+ M("-v [<flags>] Set level of detail for listing.\n");
+ M(" flags are as for the -l option\n");
}
M("-w [<lvl>] Set warning level (0=none, 10=all)\n");
- if (!xkblist) {
- M("-xkb Create an XKB source (.xkb) file\n");
- M("-xkm Create a compiled key map (.xkm) file\n");
+ if (!xkblist)
+ {
+ M("-xkb Create an XKB source (.xkb) file\n");
+ M("-xkm Create a compiled key map (.xkm) file\n");
}
return;
}
@@ -174,513 +181,683 @@ Usage(int argc,char *argv[])
static void
setVerboseFlags(char *str)
{
- for (;*str;str++) {
- switch (*str) {
- case 'f': verboseLevel|= WantFullNames; break;
- case 'h': verboseLevel|= WantHiddenMaps; break;
- case 'l': verboseLevel|= WantLongListing; break;
- case 'p': verboseLevel|= WantPartialMaps; break;
- case 'R': verboseLevel|= ListRecursive; break;
- default:
- if (warningLevel>4) {
- WARN1("Unknown verbose option \"%c\"\n",(unsigned int)*str);
- ACTION("Ignored\n");
- }
- break;
- }
+ for (; *str; str++)
+ {
+ switch (*str)
+ {
+ case 'f':
+ verboseLevel |= WantFullNames;
+ break;
+ case 'h':
+ verboseLevel |= WantHiddenMaps;
+ break;
+ case 'l':
+ verboseLevel |= WantLongListing;
+ break;
+ case 'p':
+ verboseLevel |= WantPartialMaps;
+ break;
+ case 'R':
+ verboseLevel |= ListRecursive;
+ break;
+ default:
+ if (warningLevel > 4)
+ {
+ WARN1("Unknown verbose option \"%c\"\n", (unsigned int) *str);
+ ACTION("Ignored\n");
+ }
+ break;
+ }
}
return;
}
static Bool
-parseArgs(int argc,char *argv[])
+parseArgs(int argc, char *argv[])
{
-register int i,tmp;
+ register int i, tmp;
- i= strlen(argv[0]);
- tmp= strlen("xkblist");
- if ((i>=tmp)&&(strcmp(&argv[0][i-tmp],"xkblist")==0)) {
- xkblist= True;
+ i = strlen(argv[0]);
+ tmp = strlen("xkblist");
+ if ((i >= tmp) && (strcmp(&argv[0][i - tmp], "xkblist") == 0))
+ {
+ xkblist = True;
}
- for (i=1;i<argc;i++) {
- int itmp;
- if ((argv[i][0]!='-')||(uStringEqual(argv[i],"-"))) {
- if (!xkblist) {
- if (inputFile==NULL)
- inputFile= argv[i];
- else if (outputFile==NULL)
- outputFile= argv[i];
- else if (warningLevel>0) {
- WARN("Too many file names on command line\n");
- ACTION3("Compiling %s, writing to %s, ignoring %s\n",
- inputFile,outputFile,argv[i]);
- }
- }
- else if (!AddMatchingFiles(argv[i]))
- return False;
- }
- else if ((strcmp(argv[i],"-?")==0)||(strcmp(argv[i],"-help")==0)) {
- Usage(argc,argv);
- exit(0);
- }
- else if ((strcmp(argv[i],"-a")==0)&&(!xkblist)) {
- showImplicit= True;
- }
- else if ((strcmp(argv[i],"-C")==0)&&(!xkblist)) {
- if ((outputFormat!=WANT_DEFAULT)&&(outputFormat!=WANT_C_HDR)) {
- if (warningLevel>0) {
- WARN("Multiple output file formats specified\n");
- ACTION1("\"%s\" flag ignored\n",argv[i]);
- }
- }
- else outputFormat= WANT_C_HDR;
- }
+ for (i = 1; i < argc; i++)
+ {
+ int itmp;
+ if ((argv[i][0] != '-') || (uStringEqual(argv[i], "-")))
+ {
+ if (!xkblist)
+ {
+ if (inputFile == NULL)
+ inputFile = argv[i];
+ else if (outputFile == NULL)
+ outputFile = argv[i];
+ else if (warningLevel > 0)
+ {
+ WARN("Too many file names on command line\n");
+ ACTION3
+ ("Compiling %s, writing to %s, ignoring %s\n",
+ inputFile, outputFile, argv[i]);
+ }
+ }
+ else if (!AddMatchingFiles(argv[i]))
+ return False;
+ }
+ else if ((strcmp(argv[i], "-?") == 0)
+ || (strcmp(argv[i], "-help") == 0))
+ {
+ Usage(argc, argv);
+ exit(0);
+ }
+ else if ((strcmp(argv[i], "-a") == 0) && (!xkblist))
+ {
+ showImplicit = True;
+ }
+ else if ((strcmp(argv[i], "-C") == 0) && (!xkblist))
+ {
+ if ((outputFormat != WANT_DEFAULT)
+ && (outputFormat != WANT_C_HDR))
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple output file formats specified\n");
+ ACTION1("\"%s\" flag ignored\n", argv[i]);
+ }
+ }
+ else
+ outputFormat = WANT_C_HDR;
+ }
#ifdef DEBUG
- else if (strcmp(argv[i],"-d")==0) {
- if ((i>=(argc-1))||(!isdigit(argv[i+1][0]))) {
- debugFlags= 1;
- }
- else {
- if (sscanf(argv[++i],"%i",&itmp) == 1)
- debugFlags = itmp;
- }
- INFO1("Setting debug flags to %d\n",debugFlags);
- }
+ else if (strcmp(argv[i], "-d") == 0)
+ {
+ if ((i >= (argc - 1)) || (!isdigit(argv[i + 1][0])))
+ {
+ debugFlags = 1;
+ }
+ else
+ {
+ if (sscanf(argv[++i], "%i", &itmp) == 1)
+ debugFlags = itmp;
+ }
+ INFO1("Setting debug flags to %d\n", debugFlags);
+ }
#endif
- else if ((strcmp(argv[i],"-dflts")==0)&&(!xkblist)) {
- computeDflts= True;
- }
- else if (strcmp(argv[i],"-em1")==0) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No pre-error message specified\n");
- ACTION("Trailing \"-em1\" option ignored\n");
- }
- }
- else if (preErrorMsg!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple pre-error messsages specified\n");
- ACTION2("Compiling %s, ignoring %s\n",preErrorMsg,argv[i]);
- }
- }
- else preErrorMsg= argv[i];
- }
- else if (strcmp(argv[i],"-emp")==0) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No error prefix specified\n");
- ACTION("Trailing \"-emp\" option ignored\n");
- }
- }
- else if (errorPrefix!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple error prefixes specified\n");
- ACTION2("Compiling %s, ignoring %s\n",errorPrefix,argv[i]);
- }
- }
- else errorPrefix= argv[i];
- }
- else if (strcmp(argv[i],"-eml")==0) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No post-error message specified\n");
- ACTION("Trailing \"-eml\" option ignored\n");
- }
- }
- else if (postErrorMsg!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple post-error messages specified\n");
- ACTION2("Compiling %s, ignoring %s\n",postErrorMsg,argv[i]);
- }
- }
- else postErrorMsg= argv[i];
- }
- else if ((strncmp(argv[i],"-I",2)==0)&&(!xkblist)) {
- if (!XkbAddDirectoryToPath(&argv[i][2])) {
- ACTION("Exiting\n");
- exit(1);
- }
- }
- else if ((strncmp(argv[i], "-i", 2) == 0) && (!xkblist)) {
- if (++i >= argc) {
+ else if ((strcmp(argv[i], "-dflts") == 0) && (!xkblist))
+ {
+ computeDflts = True;
+ }
+ else if (strcmp(argv[i], "-em1") == 0)
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No pre-error message specified\n");
+ ACTION("Trailing \"-em1\" option ignored\n");
+ }
+ }
+ else if (preErrorMsg != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple pre-error messsages specified\n");
+ ACTION2("Compiling %s, ignoring %s\n",
+ preErrorMsg, argv[i]);
+ }
+ }
+ else
+ preErrorMsg = argv[i];
+ }
+ else if (strcmp(argv[i], "-emp") == 0)
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No error prefix specified\n");
+ ACTION("Trailing \"-emp\" option ignored\n");
+ }
+ }
+ else if (errorPrefix != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple error prefixes specified\n");
+ ACTION2("Compiling %s, ignoring %s\n",
+ errorPrefix, argv[i]);
+ }
+ }
+ else
+ errorPrefix = argv[i];
+ }
+ else if (strcmp(argv[i], "-eml") == 0)
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No post-error message specified\n");
+ ACTION("Trailing \"-eml\" option ignored\n");
+ }
+ }
+ else if (postErrorMsg != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple post-error messages specified\n");
+ ACTION2("Compiling %s, ignoring %s\n",
+ postErrorMsg, argv[i]);
+ }
+ }
+ else
+ postErrorMsg = argv[i];
+ }
+ else if ((strncmp(argv[i], "-I", 2) == 0) && (!xkblist))
+ {
+ if (!XkbAddDirectoryToPath(&argv[i][2]))
+ {
+ ACTION("Exiting\n");
+ exit(1);
+ }
+ }
+ else if ((strncmp(argv[i], "-i", 2) == 0) && (!xkblist))
+ {
+ if (++i >= argc)
+ {
if (warningLevel > 0)
WARN("No device ID specified\n");
}
device_id = atoi(argv[i]);
}
- else if ((strncmp(argv[i],"-l",2)==0)&&(!xkblist)) {
- if (outputFormat!=WANT_DEFAULT) {
- if (warningLevel>0) {
- WARN("Multiple output file formats specified\n");
- ACTION1("\"%s\" flag ignored\n",argv[i]);
- }
- }
- else {
- if (argv[i][2]!='\0')
- setVerboseFlags(&argv[i][2]);
- xkblist= True;
- if ((inputFile)&&(!AddMatchingFiles(inputFile)))
- return False;
- else inputFile= NULL;
- if ((outputFile)&&(!AddMatchingFiles(outputFile)))
- return False;
- else outputFile= NULL;
- }
- }
- else if ((strcmp(argv[i],"-m")==0)||(strcmp(argv[i],"-map")==0)) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No map name specified\n");
- ACTION1("Trailing \"%s\" option ignored\n",argv[i-1]);
- }
- }
- else if (xkblist) {
- if (!AddMapOnly(argv[i]))
- return False;
- }
- else if (inputMap!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple map names specified\n");
- ACTION2("Compiling %s, ignoring %s\n",inputMap,argv[i]);
- }
- }
- else inputMap= argv[i];
- }
- else if ((strcmp(argv[i],"-merge")==0)&&(!xkblist)) {
- /* Ignored */
- }
- else if (strcmp(argv[i],"-o")==0) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No output file specified\n");
- ACTION("Trailing \"-o\" option ignored\n");
- }
- }
- else if (outputFile!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple output files specified\n");
- ACTION2("Compiling %s, ignoring %s\n",outputFile,argv[i]);
- }
- }
- else outputFile= argv[i];
- }
- else if (((strcmp(argv[i],"-opt")==0)||(strcmp(argv[i],"optional")==0))
- &&(!xkblist)) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No optional components specified\n");
- ACTION1("Trailing \"%s\" option ignored\n",argv[i-1]);
- }
- }
- else {
- char *tmp2;
- for (tmp2=argv[i];(*tmp2!='\0');tmp2++) {
- switch (*tmp2) {
- case 'c': case 'C':
- optionalParts|= XkmCompatMapMask;
- break;
- case 'g': case 'G':
- optionalParts|= XkmGeometryMask;
- break;
- case 'k': case 'K':
- optionalParts|= XkmKeyNamesMask;
- break;
- case 's': case 'S':
- optionalParts|= XkmSymbolsMask;
- break;
- case 't': case 'T':
- optionalParts|= XkmTypesMask;
- break;
- default:
- if (warningLevel>0) {
- WARN1("Illegal component for %s option\n",
- argv[i-1]);
- ACTION1("Ignoring unknown specifier \"%c\"\n",
- (unsigned int)*tmp2);
- }
- break;
- }
- }
- }
- }
- else if (strncmp(argv[i],"-p",2)==0) {
- if (isdigit(argv[i][2])) {
- if (sscanf(&argv[i][2],"%i",&itmp) == 1)
- dirsToStrip = itmp;
- }
- else if ((i<(argc-1))&&(isdigit(argv[i+1][0]))) {
- if (sscanf(argv[++i],"%i",&itmp) == 1)
- dirsToStrip = itmp;
- }
- else {
- dirsToStrip= 0;
- }
- if (warningLevel>5)
- INFO1("Setting path count to %d\n",dirsToStrip);
- }
- else if (strncmp(argv[i],"-R",2)==0) {
- if (argv[i][2]=='\0') {
- if (warningLevel>0) {
- WARN("No root directory specified\n");
- ACTION("Ignoring -R option\n");
- }
- }
- else if (rootDir!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple root directories specified\n");
- ACTION2("Using %s, ignoring %s\n",rootDir,argv[i]);
- }
- }
- else {
- rootDir= &argv[i][2];
- if (warningLevel>8) {
- WARN1("Changing root directory to \"%s\"\n",rootDir);
- }
- if ((chdir(rootDir)<0) && (warningLevel>0)) {
- WARN1("Couldn't change directory to \"%s\"\n",rootDir);
- ACTION("Root directory (-R) option ignored\n");
- rootDir= NULL;
- }
- }
- }
- else if ((strcmp(argv[i],"-synch")==0)||(strcmp(argv[i],"-s")==0)) {
- synch= True;
- }
- else if (strncmp(argv[i],"-v",2)==0) {
- char *str;
- if (argv[i][2]!='\0')
- str= &argv[i][2];
- else if ((i<(argc-1))&&(argv[i+1][0]!='-'))
- str= argv[++i];
- else str= NULL;
- if (str)
- setVerboseFlags(str);
- }
- else if (strncmp(argv[i],"-w",2)==0) {
- if ((i>=(argc-1))||(!isdigit(argv[i+1][0]))) {
- warningLevel = 0;
- if (isdigit(argv[i][1]))
- if (sscanf(&argv[i][1],"%i",&itmp) == 1)
- warningLevel = itmp;
- }
- else {
- if (sscanf(argv[++i],"%i",&itmp) == 1)
- warningLevel = itmp;
- }
- }
- else if ((strcmp(argv[i],"-xkb")==0)&&(!xkblist)) {
- if ((outputFormat!=WANT_DEFAULT)&&(outputFormat!=WANT_XKB_FILE)) {
- if (warningLevel>0) {
- WARN("Multiple output file formats specified\n");
- ACTION1("\"%s\" flag ignored\n",argv[i]);
- }
- }
- else outputFormat= WANT_XKB_FILE;
- }
- else if ((strcmp(argv[i],"-xkm")==0)&&(!xkblist)) {
- if ((outputFormat!=WANT_DEFAULT)&&(outputFormat!=WANT_XKM_FILE)) {
- if (warningLevel>0) {
- WARN("Multiple output file formats specified\n");
- ACTION1("\"%s\" flag ignored\n",argv[i]);
- }
- }
- else outputFormat= WANT_XKM_FILE;
- }
- else {
- ERROR1("Unknown flag \"%s\" on command line\n",argv[i]);
- Usage(argc,argv);
- return False;
- }
+ else if ((strncmp(argv[i], "-l", 2) == 0) && (!xkblist))
+ {
+ if (outputFormat != WANT_DEFAULT)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple output file formats specified\n");
+ ACTION1("\"%s\" flag ignored\n", argv[i]);
+ }
+ }
+ else
+ {
+ if (argv[i][2] != '\0')
+ setVerboseFlags(&argv[i][2]);
+ xkblist = True;
+ if ((inputFile) && (!AddMatchingFiles(inputFile)))
+ return False;
+ else
+ inputFile = NULL;
+ if ((outputFile) && (!AddMatchingFiles(outputFile)))
+ return False;
+ else
+ outputFile = NULL;
+ }
+ }
+ else if ((strcmp(argv[i], "-m") == 0)
+ || (strcmp(argv[i], "-map") == 0))
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No map name specified\n");
+ ACTION1("Trailing \"%s\" option ignored\n", argv[i - 1]);
+ }
+ }
+ else if (xkblist)
+ {
+ if (!AddMapOnly(argv[i]))
+ return False;
+ }
+ else if (inputMap != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple map names specified\n");
+ ACTION2("Compiling %s, ignoring %s\n", inputMap, argv[i]);
+ }
+ }
+ else
+ inputMap = argv[i];
+ }
+ else if ((strcmp(argv[i], "-merge") == 0) && (!xkblist))
+ {
+ /* Ignored */
+ }
+ else if (strcmp(argv[i], "-o") == 0)
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No output file specified\n");
+ ACTION("Trailing \"-o\" option ignored\n");
+ }
+ }
+ else if (outputFile != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple output files specified\n");
+ ACTION2("Compiling %s, ignoring %s\n", outputFile,
+ argv[i]);
+ }
+ }
+ else
+ outputFile = argv[i];
+ }
+ else if (((strcmp(argv[i], "-opt") == 0)
+ || (strcmp(argv[i], "optional") == 0)) && (!xkblist))
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No optional components specified\n");
+ ACTION1("Trailing \"%s\" option ignored\n", argv[i - 1]);
+ }
+ }
+ else
+ {
+ char *tmp2;
+ for (tmp2 = argv[i]; (*tmp2 != '\0'); tmp2++)
+ {
+ switch (*tmp2)
+ {
+ case 'c':
+ case 'C':
+ optionalParts |= XkmCompatMapMask;
+ break;
+ case 'g':
+ case 'G':
+ optionalParts |= XkmGeometryMask;
+ break;
+ case 'k':
+ case 'K':
+ optionalParts |= XkmKeyNamesMask;
+ break;
+ case 's':
+ case 'S':
+ optionalParts |= XkmSymbolsMask;
+ break;
+ case 't':
+ case 'T':
+ optionalParts |= XkmTypesMask;
+ break;
+ default:
+ if (warningLevel > 0)
+ {
+ WARN1
+ ("Illegal component for %s option\n",
+ argv[i - 1]);
+ ACTION1
+ ("Ignoring unknown specifier \"%c\"\n",
+ (unsigned int) *tmp2);
+ }
+ break;
+ }
+ }
+ }
+ }
+ else if (strncmp(argv[i], "-p", 2) == 0)
+ {
+ if (isdigit(argv[i][2]))
+ {
+ if (sscanf(&argv[i][2], "%i", &itmp) == 1)
+ dirsToStrip = itmp;
+ }
+ else if ((i < (argc - 1)) && (isdigit(argv[i + 1][0])))
+ {
+ if (sscanf(argv[++i], "%i", &itmp) == 1)
+ dirsToStrip = itmp;
+ }
+ else
+ {
+ dirsToStrip = 0;
+ }
+ if (warningLevel > 5)
+ INFO1("Setting path count to %d\n", dirsToStrip);
+ }
+ else if (strncmp(argv[i], "-R", 2) == 0)
+ {
+ if (argv[i][2] == '\0')
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No root directory specified\n");
+ ACTION("Ignoring -R option\n");
+ }
+ }
+ else if (rootDir != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple root directories specified\n");
+ ACTION2("Using %s, ignoring %s\n", rootDir, argv[i]);
+ }
+ }
+ else
+ {
+ rootDir = &argv[i][2];
+ if (warningLevel > 8)
+ {
+ WARN1("Changing root directory to \"%s\"\n", rootDir);
+ }
+ if ((chdir(rootDir) < 0) && (warningLevel > 0))
+ {
+ WARN1("Couldn't change directory to \"%s\"\n", rootDir);
+ ACTION("Root directory (-R) option ignored\n");
+ rootDir = NULL;
+ }
+ }
+ }
+ else if ((strcmp(argv[i], "-synch") == 0)
+ || (strcmp(argv[i], "-s") == 0))
+ {
+ synch = True;
+ }
+ else if (strncmp(argv[i], "-v", 2) == 0)
+ {
+ char *str;
+ if (argv[i][2] != '\0')
+ str = &argv[i][2];
+ else if ((i < (argc - 1)) && (argv[i + 1][0] != '-'))
+ str = argv[++i];
+ else
+ str = NULL;
+ if (str)
+ setVerboseFlags(str);
+ }
+ else if (strncmp(argv[i], "-w", 2) == 0)
+ {
+ if ((i >= (argc - 1)) || (!isdigit(argv[i + 1][0])))
+ {
+ warningLevel = 0;
+ if (isdigit(argv[i][1]))
+ if (sscanf(&argv[i][1], "%i", &itmp) == 1)
+ warningLevel = itmp;
+ }
+ else
+ {
+ if (sscanf(argv[++i], "%i", &itmp) == 1)
+ warningLevel = itmp;
+ }
+ }
+ else if ((strcmp(argv[i], "-xkb") == 0) && (!xkblist))
+ {
+ if ((outputFormat != WANT_DEFAULT)
+ && (outputFormat != WANT_XKB_FILE))
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple output file formats specified\n");
+ ACTION1("\"%s\" flag ignored\n", argv[i]);
+ }
+ }
+ else
+ outputFormat = WANT_XKB_FILE;
+ }
+ else if ((strcmp(argv[i], "-xkm") == 0) && (!xkblist))
+ {
+ if ((outputFormat != WANT_DEFAULT)
+ && (outputFormat != WANT_XKM_FILE))
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple output file formats specified\n");
+ ACTION1("\"%s\" flag ignored\n", argv[i]);
+ }
+ }
+ else
+ outputFormat = WANT_XKM_FILE;
+ }
+ else
+ {
+ ERROR1("Unknown flag \"%s\" on command line\n", argv[i]);
+ Usage(argc, argv);
+ return False;
+ }
}
if (xkblist)
- inputFormat= INPUT_XKB;
- else if (inputFile==NULL) {
- ERROR("No input file specified\n");
- return False;
+ inputFormat = INPUT_XKB;
+ else if (inputFile == NULL)
+ {
+ ERROR("No input file specified\n");
+ return False;
}
- else if (uStringEqual(inputFile,"-")) {
- inputFormat= INPUT_XKB;
+ else if (uStringEqual(inputFile, "-"))
+ {
+ inputFormat = INPUT_XKB;
}
#ifndef WIN32
- else if (strchr(inputFile,':')==0) {
+ else if (strchr(inputFile, ':') == 0)
+ {
#else
- else if ((strchr(inputFile,':')==0) || (
- strlen(inputFile) > 2 &&
- isalpha(inputFile[0]) &&
- inputFile[1] == ':' && strchr(inputFile + 2,':')==NULL)) {
+ else if ((strchr(inputFile, ':') == 0) || (strlen(inputFile) > 2 &&
+ isalpha(inputFile[0]) &&
+ inputFile[1] == ':'
+ && strchr(inputFile + 2,
+ ':') == NULL))
+ {
#endif
- int len;
- len= strlen(inputFile);
- if (inputFile[len-1]==')') {
- char *tmp;
- if ((tmp=strchr(inputFile,'('))!=0) {
- *tmp= '\0'; inputFile[len-1]= '\0';
- tmp++;
- if (*tmp=='\0') {
- WARN("Empty map in filename\n");
- ACTION("Ignored\n");
- }
- else if (inputMap==NULL) {
- inputMap= uStringDup(tmp);
- }
- else {
- WARN("Map specified in filename and with -m flag\n");
- ACTION1("map from name (\"%s\") ignored\n",tmp);
- }
- }
- else {
- ERROR1("Illegal name \"%s\" for input file\n",inputFile);
- return False;
- }
- }
- if ((len>4)&&(strcmp(&inputFile[len-4],".xkm")==0)) {
- inputFormat= INPUT_XKM;
- }
- else {
- FILE *file;
- file= fopen(inputFile,"r");
- if (file) {
- if (XkmProbe(file)) inputFormat= INPUT_XKM;
- else inputFormat= INPUT_XKB;
- fclose(file);
- }
- else {
- fprintf(stderr,"Cannot open \"%s\" for reading\n",inputFile);
- return False;
- }
- }
+ int len;
+ len = strlen(inputFile);
+ if (inputFile[len - 1] == ')')
+ {
+ char *tmp;
+ if ((tmp = strchr(inputFile, '(')) != 0)
+ {
+ *tmp = '\0';
+ inputFile[len - 1] = '\0';
+ tmp++;
+ if (*tmp == '\0')
+ {
+ WARN("Empty map in filename\n");
+ ACTION("Ignored\n");
+ }
+ else if (inputMap == NULL)
+ {
+ inputMap = uStringDup(tmp);
+ }
+ else
+ {
+ WARN("Map specified in filename and with -m flag\n");
+ ACTION1("map from name (\"%s\") ignored\n", tmp);
+ }
+ }
+ else
+ {
+ ERROR1("Illegal name \"%s\" for input file\n", inputFile);
+ return False;
+ }
+ }
+ if ((len > 4) && (strcmp(&inputFile[len - 4], ".xkm") == 0))
+ {
+ inputFormat = INPUT_XKM;
+ }
+ else
+ {
+ FILE *file;
+ file = fopen(inputFile, "r");
+ if (file)
+ {
+ if (XkmProbe(file))
+ inputFormat = INPUT_XKM;
+ else
+ inputFormat = INPUT_XKB;
+ fclose(file);
+ }
+ else
+ {
+ fprintf(stderr, "Cannot open \"%s\" for reading\n",
+ inputFile);
+ return False;
+ }
+ }
}
- else {
- inDpyName= inputFile;
- inputFile= NULL;
- inputFormat= INPUT_XKM;
+ else
+ {
+ inDpyName = inputFile;
+ inputFile = NULL;
+ inputFormat = INPUT_XKM;
}
- if (outputFormat==WANT_DEFAULT) {
- if (xkblist) outputFormat= WANT_LISTING;
- else if (inputFormat==INPUT_XKB) outputFormat= WANT_XKM_FILE;
- else outputFormat= WANT_XKB_FILE;
+ if (outputFormat == WANT_DEFAULT)
+ {
+ if (xkblist)
+ outputFormat = WANT_LISTING;
+ else if (inputFormat == INPUT_XKB)
+ outputFormat = WANT_XKM_FILE;
+ else
+ outputFormat = WANT_XKB_FILE;
}
- if ((outputFormat==WANT_LISTING)&&(inputFormat!=INPUT_XKB)) {
- if (inputFile)
- ERROR("Cannot generate a listing from a .xkm file (yet)\n");
- else ERROR("Cannot generate a listing from an X connection (yet)\n");
- return False;
+ if ((outputFormat == WANT_LISTING) && (inputFormat != INPUT_XKB))
+ {
+ if (inputFile)
+ ERROR("Cannot generate a listing from a .xkm file (yet)\n");
+ else
+ ERROR("Cannot generate a listing from an X connection (yet)\n");
+ return False;
}
- if (xkblist) {
- if (outputFile==NULL) outputFile= uStringDup("-");
- else if (strchr(outputFile,':')!=NULL) {
- ERROR("Cannot write a listing to an X connection\n");
- return False;
- }
+ if (xkblist)
+ {
+ if (outputFile == NULL)
+ outputFile = uStringDup("-");
+ else if (strchr(outputFile, ':') != NULL)
+ {
+ ERROR("Cannot write a listing to an X connection\n");
+ return False;
+ }
}
- else if ((!outputFile) && (inputFile) && uStringEqual(inputFile,"-")) {
- int len= strlen("stdin")+strlen(fileTypeExt[outputFormat])+2;
- outputFile= uTypedCalloc(len,char);
- if (outputFile==NULL) {
- WSGO("Cannot allocate space for output file name\n");
- ACTION("Exiting\n");
- exit(1);
- }
- sprintf(outputFile,"stdin.%s",fileTypeExt[outputFormat]);
+ else if ((!outputFile) && (inputFile) && uStringEqual(inputFile, "-"))
+ {
+ int len = strlen("stdin") + strlen(fileTypeExt[outputFormat]) + 2;
+ outputFile = uTypedCalloc(len, char);
+ if (outputFile == NULL)
+ {
+ WSGO("Cannot allocate space for output file name\n");
+ ACTION("Exiting\n");
+ exit(1);
+ }
+ sprintf(outputFile, "stdin.%s", fileTypeExt[outputFormat]);
}
- else if ((outputFile==NULL)&&(inputFile!=NULL)) {
- int len;
- char *base,*ext;
-
- if (inputMap==NULL) {
- base= strrchr(inputFile,'/');
- if (base==NULL) base= inputFile;
- else base++;
- }
- else base= inputMap;
-
- len= strlen(base)+strlen(fileTypeExt[outputFormat])+2;
- outputFile= uTypedCalloc(len,char);
- if (outputFile==NULL) {
- WSGO("Cannot allocate space for output file name\n");
- ACTION("Exiting\n");
- exit(1);
- }
- ext= strrchr(base,'.');
- if (ext==NULL)
- sprintf(outputFile,"%s.%s",base,fileTypeExt[outputFormat]);
- else {
- strcpy(outputFile,base);
- strcpy(&outputFile[ext-base+1],fileTypeExt[outputFormat]);
- }
+ else if ((outputFile == NULL) && (inputFile != NULL))
+ {
+ int len;
+ char *base, *ext;
+
+ if (inputMap == NULL)
+ {
+ base = strrchr(inputFile, '/');
+ if (base == NULL)
+ base = inputFile;
+ else
+ base++;
+ }
+ else
+ base = inputMap;
+
+ len = strlen(base) + strlen(fileTypeExt[outputFormat]) + 2;
+ outputFile = uTypedCalloc(len, char);
+ if (outputFile == NULL)
+ {
+ WSGO("Cannot allocate space for output file name\n");
+ ACTION("Exiting\n");
+ exit(1);
+ }
+ ext = strrchr(base, '.');
+ if (ext == NULL)
+ sprintf(outputFile, "%s.%s", base, fileTypeExt[outputFormat]);
+ else
+ {
+ strcpy(outputFile, base);
+ strcpy(&outputFile[ext - base + 1], fileTypeExt[outputFormat]);
+ }
}
- else if (outputFile==NULL) {
- int len;
- char *ch,*name,buf[128];
- if (inDpyName[0]==':')
- sprintf(name=buf,"server%s",inDpyName);
- else name= inDpyName;
-
- len= strlen(name)+strlen(fileTypeExt[outputFormat])+2;
- outputFile= uTypedCalloc(len,char);
- if (outputFile==NULL) {
- WSGO("Cannot allocate space for output file name\n");
- ACTION("Exiting\n");
- exit(1);
- }
- strcpy(outputFile,name);
- for (ch=outputFile;(*ch)!='\0';ch++) {
- if (*ch==':') *ch= '-';
- else if (*ch=='.') *ch= '_';
- }
- *ch++= '.';
- strcpy(ch,fileTypeExt[outputFormat]);
+ else if (outputFile == NULL)
+ {
+ int len;
+ char *ch, *name, buf[128];
+ if (inDpyName[0] == ':')
+ sprintf(name = buf, "server%s", inDpyName);
+ else
+ name = inDpyName;
+
+ len = strlen(name) + strlen(fileTypeExt[outputFormat]) + 2;
+ outputFile = uTypedCalloc(len, char);
+ if (outputFile == NULL)
+ {
+ WSGO("Cannot allocate space for output file name\n");
+ ACTION("Exiting\n");
+ exit(1);
+ }
+ strcpy(outputFile, name);
+ for (ch = outputFile; (*ch) != '\0'; ch++)
+ {
+ if (*ch == ':')
+ *ch = '-';
+ else if (*ch == '.')
+ *ch = '_';
+ }
+ *ch++ = '.';
+ strcpy(ch, fileTypeExt[outputFormat]);
}
#ifdef WIN32
- else if (strlen(outputFile) > 2 &&
- isalpha(outputFile[0]) &&
- outputFile[1] == ':' && strchr(outputFile + 2,':')==NULL) {
+ else if (strlen(outputFile) > 2 &&
+ isalpha(outputFile[0]) &&
+ outputFile[1] == ':' && strchr(outputFile + 2, ':') == NULL)
+ {
}
#endif
- else if (strchr(outputFile,':')!=NULL) {
- outDpyName= outputFile;
- outputFile= NULL;
- outputFormat= WANT_X_SERVER;
+ else if (strchr(outputFile, ':') != NULL)
+ {
+ outDpyName = outputFile;
+ outputFile = NULL;
+ outputFormat = WANT_X_SERVER;
}
return True;
}
static Display *
-GetDisplay(char *program,char *dpyName)
+GetDisplay(char *program, char *dpyName)
{
-int mjr,mnr,error;
-Display *dpy;
-
- mjr= XkbMajorVersion;
- mnr= XkbMinorVersion;
- dpy= XkbOpenDisplay(dpyName,NULL,NULL,&mjr,&mnr,&error);
- if (dpy==NULL) {
- switch (error) {
- case XkbOD_BadLibraryVersion:
- INFO3("%s was compiled with XKB version %d.%02d\n",
- program,XkbMajorVersion,XkbMinorVersion);
- ERROR2("X library supports incompatible version %d.%02d\n",
- mjr,mnr);
- break;
- case XkbOD_ConnectionRefused:
- ERROR1("Cannot open display \"%s\"\n",dpyName);
- break;
- case XkbOD_NonXkbServer:
- ERROR1("XKB extension not present on %s\n",dpyName);
- break;
- case XkbOD_BadServerVersion:
- INFO3("%s was compiled with XKB version %d.%02d\n",
- program,XkbMajorVersion,XkbMinorVersion);
- ERROR3("Server %s uses incompatible version %d.%02d\n",
- dpyName,mjr,mnr);
- break;
- default:
- WSGO1("Unknown error %d from XkbOpenDisplay\n",error);
- }
+ int mjr, mnr, error;
+ Display *dpy;
+
+ mjr = XkbMajorVersion;
+ mnr = XkbMinorVersion;
+ dpy = XkbOpenDisplay(dpyName, NULL, NULL, &mjr, &mnr, &error);
+ if (dpy == NULL)
+ {
+ switch (error)
+ {
+ case XkbOD_BadLibraryVersion:
+ INFO3("%s was compiled with XKB version %d.%02d\n",
+ program, XkbMajorVersion, XkbMinorVersion);
+ ERROR2("X library supports incompatible version %d.%02d\n",
+ mjr, mnr);
+ break;
+ case XkbOD_ConnectionRefused:
+ ERROR1("Cannot open display \"%s\"\n", dpyName);
+ break;
+ case XkbOD_NonXkbServer:
+ ERROR1("XKB extension not present on %s\n", dpyName);
+ break;
+ case XkbOD_BadServerVersion:
+ INFO3("%s was compiled with XKB version %d.%02d\n",
+ program, XkbMajorVersion, XkbMinorVersion);
+ ERROR3("Server %s uses incompatible version %d.%02d\n",
+ dpyName, mjr, mnr);
+ break;
+ default:
+ WSGO1("Unknown error %d from XkbOpenDisplay\n", error);
+ }
}
else if (synch)
- XSynchronize(dpy,True);
+ XSynchronize(dpy, True);
return dpy;
}
@@ -689,14 +866,14 @@ Display *dpy;
extern int yydebug;
int
-main(int argc,char *argv[])
+main(int argc, char *argv[])
{
-FILE * file;
-XkbFile * rtrn;
-XkbFile * mapToUse;
-int ok;
-XkbFileInfo result;
-Status status;
+ FILE *file;
+ XkbFile *rtrn;
+ XkbFile *mapToUse;
+ int ok;
+ XkbFileInfo result;
+ Status status;
yyin = stdin;
uSetEntryFile(NullString);
@@ -704,281 +881,330 @@ Status status;
uSetErrorFile(NullString);
XkbInitIncludePath();
- if (!parseArgs(argc,argv))
- exit(1);
+ if (!parseArgs(argc, argv))
+ exit(1);
#ifdef DEBUG
- if (debugFlags&0x2)
- yydebug= 1;
+ if (debugFlags & 0x2)
+ yydebug = 1;
#endif
if (preErrorMsg)
- uSetPreErrorMessage(preErrorMsg);
+ uSetPreErrorMessage(preErrorMsg);
if (errorPrefix)
- uSetErrorPrefix(errorPrefix);
+ uSetErrorPrefix(errorPrefix);
if (postErrorMsg)
- uSetPostErrorMessage(postErrorMsg);
- file= NULL;
+ uSetPostErrorMessage(postErrorMsg);
+ file = NULL;
XkbInitAtoms(NULL);
XkbAddDefaultDirectoriesToPath();
- if (xkblist) {
- Bool gotSome;
- gotSome= GenerateListing(outputFile);
- if ((warningLevel>7)&&(!gotSome))
- return -1;
- return 0;
+ if (xkblist)
+ {
+ Bool gotSome;
+ gotSome = GenerateListing(outputFile);
+ if ((warningLevel > 7) && (!gotSome))
+ return -1;
+ return 0;
}
- if (inputFile!=NULL) {
- if (uStringEqual(inputFile,"-")) {
- file= stdin;
- inputFile= "stdin";
- }
- else {
- file= fopen(inputFile,"r");
- }
+ if (inputFile != NULL)
+ {
+ if (uStringEqual(inputFile, "-"))
+ {
+ file = stdin;
+ inputFile = "stdin";
+ }
+ else
+ {
+ file = fopen(inputFile, "r");
+ }
}
- else if (inDpyName!=NULL) {
- inDpy= GetDisplay(argv[0],inDpyName);
- if (!inDpy) {
- ACTION("Exiting\n");
- exit(1);
- }
+ else if (inDpyName != NULL)
+ {
+ inDpy = GetDisplay(argv[0], inDpyName);
+ if (!inDpy)
+ {
+ ACTION("Exiting\n");
+ exit(1);
+ }
}
- if (outDpyName!=NULL) {
- outDpy= GetDisplay(argv[0],outDpyName);
- if (!outDpy) {
- ACTION("Exiting\n");
- exit(1);
- }
+ if (outDpyName != NULL)
+ {
+ outDpy = GetDisplay(argv[0], outDpyName);
+ if (!outDpy)
+ {
+ ACTION("Exiting\n");
+ exit(1);
+ }
}
- if ((inDpy==NULL) && (outDpy==NULL)) {
- int mjr,mnr;
- mjr= XkbMajorVersion;
- mnr= XkbMinorVersion;
- if (!XkbLibraryVersion(&mjr,&mnr)) {
- INFO3("%s was compiled with XKB version %d.%02d\n",
- argv[0],XkbMajorVersion,XkbMinorVersion);
- ERROR2("X library supports incompatible version %d.%02d\n",
- mjr,mnr);
- ACTION("Exiting\n");
- exit(1);
- }
+ if ((inDpy == NULL) && (outDpy == NULL))
+ {
+ int mjr, mnr;
+ mjr = XkbMajorVersion;
+ mnr = XkbMinorVersion;
+ if (!XkbLibraryVersion(&mjr, &mnr))
+ {
+ INFO3("%s was compiled with XKB version %d.%02d\n",
+ argv[0], XkbMajorVersion, XkbMinorVersion);
+ ERROR2("X library supports incompatible version %d.%02d\n",
+ mjr, mnr);
+ ACTION("Exiting\n");
+ exit(1);
+ }
}
- if (file) {
- ok= True;
- setScanState(inputFile,1);
- if ((inputFormat==INPUT_XKB)&&(XKBParseFile(file,&rtrn)&&(rtrn!=NULL))){
- fclose(file);
- mapToUse= rtrn;
- if (inputMap!=NULL) {
- while ((mapToUse)&&(!uStringEqual(mapToUse->name,inputMap))) {
- mapToUse= (XkbFile *)mapToUse->common.next;
- }
- if (!mapToUse) {
- FATAL2("No map named \"%s\" in \"%s\"\n",inputMap,
- inputFile);
- /* NOTREACHED */
- }
- }
- else if (rtrn->common.next!=NULL) {
- mapToUse= rtrn;
- for (;mapToUse;mapToUse= (XkbFile*)mapToUse->common.next) {
- if (mapToUse->flags&XkbLC_Default)
- break;
- }
- if (!mapToUse) {
- mapToUse= rtrn;
- if (warningLevel>4) {
- WARN1("No map specified, but \"%s\" has several\n",
- inputFile);
- ACTION1("Using the first defined map, \"%s\"\n",
- mapToUse->name);
- }
- }
- }
- bzero((char *)&result,sizeof(result));
- result.type= mapToUse->type;
- if ((result.xkb= XkbAllocKeyboard())==NULL) {
- WSGO("Cannot allocate keyboard description\n");
- /* NOTREACHED */
- }
- switch (mapToUse->type) {
- case XkmSemanticsFile:
- case XkmLayoutFile:
- case XkmKeymapFile:
- ok= CompileKeymap(mapToUse,&result,MergeReplace);
- break;
- case XkmKeyNamesIndex:
- ok= CompileKeycodes(mapToUse,&result,MergeReplace);
- break;
- case XkmTypesIndex:
- ok= CompileKeyTypes(mapToUse,&result,MergeReplace);
- break;
- case XkmSymbolsIndex:
- /* if it's just symbols, invent key names */
- result.xkb->flags|= AutoKeyNames;
- ok= False;
- break;
- case XkmCompatMapIndex:
- ok= CompileCompatMap(mapToUse,&result,MergeReplace,NULL);
- break;
- case XkmGeometryFile:
- case XkmGeometryIndex:
- /* if it's just a geometry, invent key names */
- result.xkb->flags|= AutoKeyNames;
- ok= CompileGeometry(mapToUse,&result,MergeReplace);
- break;
- default:
- WSGO1("Unknown file type %d\n",mapToUse->type);
- ok= False;
- break;
- }
- }
- else if (inputFormat==INPUT_XKM) {
- unsigned tmp;
- bzero((char *)&result,sizeof(result));
- if ((result.xkb= XkbAllocKeyboard())==NULL) {
- WSGO("Cannot allocate keyboard description\n");
- /* NOTREACHED */
- }
- tmp= XkmReadFile(file,0,XkmKeymapLegal,&result);
- if (tmp==XkmKeymapLegal) {
- ERROR1("Cannot read XKM file \"%s\"\n",inputFile);
- ok= False;
- }
- }
- else {
- INFO1("Errors encountered in %s; not compiled.\n",inputFile);
- ok= False;
- }
+ if (file)
+ {
+ ok = True;
+ setScanState(inputFile, 1);
+ if ((inputFormat == INPUT_XKB)
+ && (XKBParseFile(file, &rtrn) && (rtrn != NULL)))
+ {
+ fclose(file);
+ mapToUse = rtrn;
+ if (inputMap != NULL)
+ {
+ while ((mapToUse)
+ && (!uStringEqual(mapToUse->name, inputMap)))
+ {
+ mapToUse = (XkbFile *) mapToUse->common.next;
+ }
+ if (!mapToUse)
+ {
+ FATAL2("No map named \"%s\" in \"%s\"\n",
+ inputMap, inputFile);
+ /* NOTREACHED */
+ }
+ }
+ else if (rtrn->common.next != NULL)
+ {
+ mapToUse = rtrn;
+ for (; mapToUse; mapToUse = (XkbFile *) mapToUse->common.next)
+ {
+ if (mapToUse->flags & XkbLC_Default)
+ break;
+ }
+ if (!mapToUse)
+ {
+ mapToUse = rtrn;
+ if (warningLevel > 4)
+ {
+ WARN1
+ ("No map specified, but \"%s\" has several\n",
+ inputFile);
+ ACTION1
+ ("Using the first defined map, \"%s\"\n",
+ mapToUse->name);
+ }
+ }
+ }
+ bzero((char *) &result, sizeof(result));
+ result.type = mapToUse->type;
+ if ((result.xkb = XkbAllocKeyboard()) == NULL)
+ {
+ WSGO("Cannot allocate keyboard description\n");
+ /* NOTREACHED */
+ }
+ switch (mapToUse->type)
+ {
+ case XkmSemanticsFile:
+ case XkmLayoutFile:
+ case XkmKeymapFile:
+ ok = CompileKeymap(mapToUse, &result, MergeReplace);
+ break;
+ case XkmKeyNamesIndex:
+ ok = CompileKeycodes(mapToUse, &result, MergeReplace);
+ break;
+ case XkmTypesIndex:
+ ok = CompileKeyTypes(mapToUse, &result, MergeReplace);
+ break;
+ case XkmSymbolsIndex:
+ /* if it's just symbols, invent key names */
+ result.xkb->flags |= AutoKeyNames;
+ ok = False;
+ break;
+ case XkmCompatMapIndex:
+ ok = CompileCompatMap(mapToUse, &result, MergeReplace, NULL);
+ break;
+ case XkmGeometryFile:
+ case XkmGeometryIndex:
+ /* if it's just a geometry, invent key names */
+ result.xkb->flags |= AutoKeyNames;
+ ok = CompileGeometry(mapToUse, &result, MergeReplace);
+ break;
+ default:
+ WSGO1("Unknown file type %d\n", mapToUse->type);
+ ok = False;
+ break;
+ }
+ }
+ else if (inputFormat == INPUT_XKM)
+ {
+ unsigned tmp;
+ bzero((char *) &result, sizeof(result));
+ if ((result.xkb = XkbAllocKeyboard()) == NULL)
+ {
+ WSGO("Cannot allocate keyboard description\n");
+ /* NOTREACHED */
+ }
+ tmp = XkmReadFile(file, 0, XkmKeymapLegal, &result);
+ if (tmp == XkmKeymapLegal)
+ {
+ ERROR1("Cannot read XKM file \"%s\"\n", inputFile);
+ ok = False;
+ }
+ }
+ else
+ {
+ INFO1("Errors encountered in %s; not compiled.\n", inputFile);
+ ok = False;
+ }
}
- else if (inDpy!=NULL) {
- bzero((char *)&result,sizeof(result));
- result.type= XkmKeymapFile;
- result.xkb= XkbGetMap(inDpy,XkbAllMapComponentsMask,device_id);
- if (result.xkb==NULL)
- WSGO("Cannot load keyboard description\n");
- if (XkbGetIndicatorMap(inDpy,~0,result.xkb)!=Success)
- WSGO("Could not load indicator map\n");
- if (XkbGetControls(inDpy,XkbAllControlsMask,result.xkb)!=Success)
- WSGO("Could not load keyboard controls\n");
- if (XkbGetCompatMap(inDpy,XkbAllCompatMask,result.xkb)!=Success)
- WSGO("Could not load compatibility map\n");
- if (XkbGetNames(inDpy,XkbAllNamesMask,result.xkb)!=Success)
- WSGO("Could not load names\n");
- if ((status=XkbGetGeometry(inDpy,result.xkb))!=Success) {
- if (warningLevel>3) {
- char buf[100];
- buf[0]= '\0';
- XGetErrorText(inDpy,status,buf,100);
- WARN1("Could not load keyboard geometry for %s\n",inDpyName);
- ACTION1("%s\n",buf);
- ACTION("Resulting keymap file will not describe geometry\n");
- }
- }
- if (computeDflts)
- ok= (ComputeKbdDefaults(result.xkb)==Success);
- else ok= True;
+ else if (inDpy != NULL)
+ {
+ bzero((char *) &result, sizeof(result));
+ result.type = XkmKeymapFile;
+ result.xkb = XkbGetMap(inDpy, XkbAllMapComponentsMask, device_id);
+ if (result.xkb == NULL)
+ WSGO("Cannot load keyboard description\n");
+ if (XkbGetIndicatorMap(inDpy, ~0, result.xkb) != Success)
+ WSGO("Could not load indicator map\n");
+ if (XkbGetControls(inDpy, XkbAllControlsMask, result.xkb) != Success)
+ WSGO("Could not load keyboard controls\n");
+ if (XkbGetCompatMap(inDpy, XkbAllCompatMask, result.xkb) != Success)
+ WSGO("Could not load compatibility map\n");
+ if (XkbGetNames(inDpy, XkbAllNamesMask, result.xkb) != Success)
+ WSGO("Could not load names\n");
+ if ((status = XkbGetGeometry(inDpy, result.xkb)) != Success)
+ {
+ if (warningLevel > 3)
+ {
+ char buf[100];
+ buf[0] = '\0';
+ XGetErrorText(inDpy, status, buf, 100);
+ WARN1("Could not load keyboard geometry for %s\n", inDpyName);
+ ACTION1("%s\n", buf);
+ ACTION("Resulting keymap file will not describe geometry\n");
+ }
+ }
+ if (computeDflts)
+ ok = (ComputeKbdDefaults(result.xkb) == Success);
+ else
+ ok = True;
}
- else {
- fprintf(stderr,"Cannot open \"%s\" to compile\n",inputFile);
- ok= 0;
+ else
+ {
+ fprintf(stderr, "Cannot open \"%s\" to compile\n", inputFile);
+ ok = 0;
}
- if (ok) {
- FILE *out = stdout;
- if ((inDpy!=outDpy)&&
- (XkbChangeKbdDisplay(outDpy,&result)!=Success)) {
- WSGO2("Error converting keyboard display from %s to %s\n",
- inDpyName,outDpyName);
- exit(1);
- }
- if (outputFile!=NULL) {
- if (uStringEqual(outputFile,"-"))
- outputFile= "stdout";
- else {
- /*
- * fix to prevent symlink attack (e.g.,
- * ln -s /etc/passwd /var/tmp/server-0.xkm)
- */
- /*
- * this patch may have POSIX, Linux, or GNU libc bias
- * -- Branden Robinson
- */
- int outputFileFd;
- int binMode = 0;
- const char *openMode = "w";
- unlink(outputFile);
+ if (ok)
+ {
+ FILE *out = stdout;
+ if ((inDpy != outDpy) &&
+ (XkbChangeKbdDisplay(outDpy, &result) != Success))
+ {
+ WSGO2("Error converting keyboard display from %s to %s\n",
+ inDpyName, outDpyName);
+ exit(1);
+ }
+ if (outputFile != NULL)
+ {
+ if (uStringEqual(outputFile, "-"))
+ outputFile = "stdout";
+ else
+ {
+ /*
+ * fix to prevent symlink attack (e.g.,
+ * ln -s /etc/passwd /var/tmp/server-0.xkm)
+ */
+ /*
+ * this patch may have POSIX, Linux, or GNU libc bias
+ * -- Branden Robinson
+ */
+ int outputFileFd;
+ int binMode = 0;
+ const char *openMode = "w";
+ unlink(outputFile);
#ifdef O_BINARY
- switch (outputFormat) {
- case WANT_XKM_FILE:
- binMode = O_BINARY;
- openMode = "wb";
- break;
- default:
- binMode = 0;
- break;
- }
+ switch (outputFormat)
+ {
+ case WANT_XKM_FILE:
+ binMode = O_BINARY;
+ openMode = "wb";
+ break;
+ default:
+ binMode = 0;
+ break;
+ }
#endif
- outputFileFd= open(outputFile, O_WRONLY|O_CREAT|O_EXCL,
- S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH|binMode);
- if (outputFileFd<0) {
- ERROR1("Cannot open \"%s\" to write keyboard description\n",
- outputFile);
- ACTION("Exiting\n");
- exit(1);
- }
+ outputFileFd =
+ open(outputFile, O_WRONLY | O_CREAT | O_EXCL,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH
+ | S_IWOTH | binMode);
+ if (outputFileFd < 0)
+ {
+ ERROR1
+ ("Cannot open \"%s\" to write keyboard description\n",
+ outputFile);
+ ACTION("Exiting\n");
+ exit(1);
+ }
#ifndef WIN32
- out= fdopen(outputFileFd, openMode);
+ out = fdopen(outputFileFd, openMode);
#else
- close(outputFileFd);
- out= fopen(outputFile, "wb");
+ close(outputFileFd);
+ out = fopen(outputFile, "wb");
#endif
- /* end BR */
- if (out==NULL) {
- ERROR1("Cannot open \"%s\" to write keyboard description\n",
- outputFile);
- ACTION("Exiting\n");
- exit(1);
- }
- }
- }
- switch (outputFormat) {
- case WANT_XKM_FILE:
- ok= XkbWriteXKMFile(out,&result);
- break;
- case WANT_XKB_FILE:
- ok= XkbWriteXKBFile(out,&result,showImplicit,NULL,NULL);
- break;
- case WANT_C_HDR:
- ok= XkbWriteCFile(out,outputFile,&result);
- break;
- case WANT_X_SERVER:
- if (!(ok= XkbWriteToServer(&result))) {
- ERROR2("%s in %s\n",_XkbErrMessages[_XkbErrCode],
- _XkbErrLocation?_XkbErrLocation:"unknown");
- ACTION1("Couldn't write keyboard description to %s\n",
- outDpyName);
- }
- break;
- default:
- WSGO1("Unknown output format %d\n",outputFormat);
- ACTION("No output file created\n");
- ok= False;
- break;
- }
- if (outputFormat!=WANT_X_SERVER) {
- fclose(out);
- if (!ok) {
- ERROR2("%s in %s\n",_XkbErrMessages[_XkbErrCode],
- _XkbErrLocation?_XkbErrLocation:"unknown");
- ACTION1("Output file \"%s\" removed\n",outputFile);
- unlink(outputFile);
- }
- }
+ /* end BR */
+ if (out == NULL)
+ {
+ ERROR1
+ ("Cannot open \"%s\" to write keyboard description\n",
+ outputFile);
+ ACTION("Exiting\n");
+ exit(1);
+ }
+ }
+ }
+ switch (outputFormat)
+ {
+ case WANT_XKM_FILE:
+ ok = XkbWriteXKMFile(out, &result);
+ break;
+ case WANT_XKB_FILE:
+ ok = XkbWriteXKBFile(out, &result, showImplicit, NULL, NULL);
+ break;
+ case WANT_C_HDR:
+ ok = XkbWriteCFile(out, outputFile, &result);
+ break;
+ case WANT_X_SERVER:
+ if (!(ok = XkbWriteToServer(&result)))
+ {
+ ERROR2("%s in %s\n", _XkbErrMessages[_XkbErrCode],
+ _XkbErrLocation ? _XkbErrLocation : "unknown");
+ ACTION1("Couldn't write keyboard description to %s\n",
+ outDpyName);
+ }
+ break;
+ default:
+ WSGO1("Unknown output format %d\n", outputFormat);
+ ACTION("No output file created\n");
+ ok = False;
+ break;
+ }
+ if (outputFormat != WANT_X_SERVER)
+ {
+ fclose(out);
+ if (!ok)
+ {
+ ERROR2("%s in %s\n", _XkbErrMessages[_XkbErrCode],
+ _XkbErrLocation ? _XkbErrLocation : "unknown");
+ ACTION1("Output file \"%s\" removed\n", outputFile);
+ unlink(outputFile);
+ }
+ }
}
- if (inDpy)
- XCloseDisplay(inDpy);
- inDpy= NULL;
+ if (inDpy)
+ XCloseDisplay(inDpy);
+ inDpy = NULL;
if (outDpy)
- XCloseDisplay(outDpy);
+ XCloseDisplay(outDpy);
uFinishUp();
- return (ok==0);
+ return (ok == 0);
}
diff --git a/xkbcomp.h b/xkbcomp.h
index 5182cce..cbd19b5 100644
--- a/xkbcomp.h
+++ b/xkbcomp.h
@@ -76,9 +76,10 @@ extern char *scanFile;
#define FileSymInterp 100
-typedef struct _ParseCommon {
- unsigned stmtType;
- struct _ParseCommon *next;
+typedef struct _ParseCommon
+{
+ unsigned stmtType;
+ struct _ParseCommon *next;
} ParseCommon;
#define ExprValue 0
@@ -109,188 +110,215 @@ typedef struct _ParseCommon {
#define AutoKeyNames (1L << 0)
#define CreateKeyNames(x) ((x)->flags&AutoKeyNames)
-extern unsigned warningLevel;
-extern unsigned optionalParts;
-
-typedef struct _IncludeStmt {
- ParseCommon common;
- unsigned merge;
- char *stmt;
- char *file;
- char *map;
- char *modifier;
- char *path;
- struct _IncludeStmt *next;
+extern unsigned warningLevel;
+extern unsigned optionalParts;
+
+typedef struct _IncludeStmt
+{
+ ParseCommon common;
+ unsigned merge;
+ char *stmt;
+ char *file;
+ char *map;
+ char *modifier;
+ char *path;
+ struct _IncludeStmt *next;
} IncludeStmt;
-typedef struct _Expr {
- ParseCommon common;
- unsigned op;
- unsigned type;
- union {
- struct {
- struct _Expr *left;
- struct _Expr *right;
- } binary;
- struct {
- Atom element;
- Atom field;
- } field;
- struct {
- Atom element;
- Atom field;
- struct _Expr *entry;
- } array;
- struct {
- Atom name;
- struct _Expr *args;
- } action;
- struct {
- int nSyms;
- int szSyms;
- KeySym * syms;
- } list;
- struct {
- int x;
- int y;
- } coord;
- struct _Expr *child;
- Atom str;
- unsigned uval;
- int ival;
- char keyName[5];
- Opaque ptr;
+typedef struct _Expr
+{
+ ParseCommon common;
+ unsigned op;
+ unsigned type;
+ union
+ {
+ struct
+ {
+ struct _Expr *left;
+ struct _Expr *right;
+ } binary;
+ struct
+ {
+ Atom element;
+ Atom field;
+ } field;
+ struct
+ {
+ Atom element;
+ Atom field;
+ struct _Expr *entry;
+ } array;
+ struct
+ {
+ Atom name;
+ struct _Expr *args;
+ } action;
+ struct
+ {
+ int nSyms;
+ int szSyms;
+ KeySym *syms;
+ } list;
+ struct
+ {
+ int x;
+ int y;
+ } coord;
+ struct _Expr *child;
+ Atom str;
+ unsigned uval;
+ int ival;
+ char keyName[5];
+ Opaque ptr;
} value;
} ExprDef;
-typedef struct _VarDef {
- ParseCommon common;
- unsigned merge;
- ExprDef *name;
- ExprDef *value;
+typedef struct _VarDef
+{
+ ParseCommon common;
+ unsigned merge;
+ ExprDef *name;
+ ExprDef *value;
} VarDef;
-typedef struct _VModDef {
- ParseCommon common;
- unsigned merge;
- Atom name;
- ExprDef *value;
+typedef struct _VModDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom name;
+ ExprDef *value;
} VModDef;
-typedef struct _KeycodeDef {
- ParseCommon common;
- unsigned merge;
- char name[5];
- ExprDef *value;
+typedef struct _KeycodeDef
+{
+ ParseCommon common;
+ unsigned merge;
+ char name[5];
+ ExprDef *value;
} KeycodeDef;
-typedef struct _KeyAliasDef {
- ParseCommon common;
- unsigned merge;
- char alias[5];
- char real[5];
+typedef struct _KeyAliasDef
+{
+ ParseCommon common;
+ unsigned merge;
+ char alias[5];
+ char real[5];
} KeyAliasDef;
-typedef struct _KeyTypeDef {
- ParseCommon common;
- unsigned merge;
- Atom name;
- VarDef *body;
+typedef struct _KeyTypeDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom name;
+ VarDef *body;
} KeyTypeDef;
-typedef struct _SymbolsDef {
- ParseCommon common;
- unsigned merge;
- char keyName[5];
- ExprDef * symbols;
+typedef struct _SymbolsDef
+{
+ ParseCommon common;
+ unsigned merge;
+ char keyName[5];
+ ExprDef *symbols;
} SymbolsDef;
-typedef struct _ModMapDef {
- ParseCommon common;
- unsigned merge;
- Atom modifier;
- ExprDef * keys;
+typedef struct _ModMapDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom modifier;
+ ExprDef *keys;
} ModMapDef;
-typedef struct _GroupCompatDef {
- ParseCommon common;
- unsigned merge;
- int group;
- ExprDef * def;
+typedef struct _GroupCompatDef
+{
+ ParseCommon common;
+ unsigned merge;
+ int group;
+ ExprDef *def;
} GroupCompatDef;
-typedef struct _InterpDef {
- ParseCommon common;
- unsigned merge;
- KeySym sym;
- ExprDef *match;
- VarDef *def;
+typedef struct _InterpDef
+{
+ ParseCommon common;
+ unsigned merge;
+ KeySym sym;
+ ExprDef *match;
+ VarDef *def;
} InterpDef;
-typedef struct _IndicatorNameDef {
- ParseCommon common;
- unsigned merge;
- int ndx;
- ExprDef * name;
- Bool virtual;
+typedef struct _IndicatorNameDef
+{
+ ParseCommon common;
+ unsigned merge;
+ int ndx;
+ ExprDef *name;
+ Bool virtual;
} IndicatorNameDef;
-typedef struct _OutlineDef {
- ParseCommon common;
- Atom field;
- int nPoints;
- ExprDef * points;
+typedef struct _OutlineDef
+{
+ ParseCommon common;
+ Atom field;
+ int nPoints;
+ ExprDef *points;
} OutlineDef;
-typedef struct _ShapeDef {
- ParseCommon common;
- unsigned merge;
- Atom name;
- int nOutlines;
- OutlineDef * outlines;
+typedef struct _ShapeDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom name;
+ int nOutlines;
+ OutlineDef *outlines;
} ShapeDef;
-typedef struct _KeyDef {
- ParseCommon common;
- unsigned defined;
- char * name;
- ExprDef * expr;
+typedef struct _KeyDef
+{
+ ParseCommon common;
+ unsigned defined;
+ char *name;
+ ExprDef *expr;
} KeyDef;
-typedef struct _RowDef {
- ParseCommon common;
- int nKeys;
- KeyDef * keys;
+typedef struct _RowDef
+{
+ ParseCommon common;
+ int nKeys;
+ KeyDef *keys;
} RowDef;
-typedef struct _SectionDef {
- ParseCommon common;
- unsigned merge;
- Atom name;
- int nRows;
- RowDef * rows;
+typedef struct _SectionDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom name;
+ int nRows;
+ RowDef *rows;
} SectionDef;
-typedef struct _OverlayKeyDef {
- ParseCommon common;
- char over[5];
- char under[5];
+typedef struct _OverlayKeyDef
+{
+ ParseCommon common;
+ char over[5];
+ char under[5];
} OverlayKeyDef;
-typedef struct _OverlayDef {
- ParseCommon common;
- unsigned merge;
- Atom name;
- int nKeys;
- OverlayKeyDef * keys;
+typedef struct _OverlayDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom name;
+ int nKeys;
+ OverlayKeyDef *keys;
} OverlayDef;
-typedef struct _DoodadDef {
- ParseCommon common;
- unsigned merge;
- unsigned type;
- Atom name;
- VarDef * body;
+typedef struct _DoodadDef
+{
+ ParseCommon common;
+ unsigned merge;
+ unsigned type;
+ Atom name;
+ VarDef *body;
} DoodadDef;
/* IndicatorMapDef doesn't use the type field, but the rest of the fields
@@ -298,55 +326,50 @@ typedef struct _DoodadDef {
any strict aliasing problems. */
#define IndicatorMapDef DoodadDef
-typedef struct _XkbFile {
- ParseCommon common;
- int type;
- char * topName;
- char * name;
- ParseCommon *defs;
- int id;
- unsigned flags;
- Bool compiled;
+typedef struct _XkbFile
+{
+ ParseCommon common;
+ int type;
+ char *topName;
+ char *name;
+ ParseCommon *defs;
+ int id;
+ unsigned flags;
+ Bool compiled;
} XkbFile;
-extern Bool CompileKeymap(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */
-);
-
-extern Bool CompileKeycodes(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */
-);
-
-extern Bool CompileGeometry(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */
-);
-
-extern Bool CompileKeyTypes(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */
-);
+extern Bool CompileKeymap(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */
+ );
+
+extern Bool CompileKeycodes(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */
+ );
+
+extern Bool CompileGeometry(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */
+ );
+
+extern Bool CompileKeyTypes(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */
+ );
typedef struct _LEDInfo *LEDInfoPtr;
-extern Bool CompileCompatMap(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */,
- LEDInfoPtr * /* unboundLEDs */
-);
+extern Bool CompileCompatMap(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */ ,
+ LEDInfoPtr * /* unboundLEDs */
+ );
-extern Bool CompileSymbols(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */
-);
+extern Bool CompileSymbols(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */
+ );
#define WantLongListing (1<<0)
#define WantPartialMaps (1<<1)
@@ -354,25 +377,21 @@ extern Bool CompileSymbols(
#define WantFullNames (1<<3)
#define ListRecursive (1<<4)
-extern char * rootDir;
+extern char *rootDir;
extern unsigned verboseLevel;
-extern unsigned dirsToStrip;
+extern unsigned dirsToStrip;
-extern Bool AddListing(
- char * /* file */,
- char * /* map */
-);
+extern Bool AddListing(char * /* file */ ,
+ char * /* map */
+ );
-extern Bool AddMatchingFiles(
- char * /* head_in */
-);
+extern Bool AddMatchingFiles(char * /* head_in */
+ );
-extern int AddMapOnly(
- char * /* map */
-);
+extern int AddMapOnly(char * /* map */
+ );
-extern int GenerateListing(
- char * /* filename */
-);
+extern int GenerateListing(char * /* filename */
+ );
#endif /* XKBCOMP_H */
diff --git a/xkbpath.c b/xkbpath.c
index 621eb2e..fc3d4f0 100644
--- a/xkbpath.c
+++ b/xkbpath.c
@@ -44,85 +44,97 @@
#define PATH_CHUNK 8
-static Bool noDefaultPath = False;
-static int longestPath;
-static int szPath;
-static int nPathEntries;
-static char ** includePath;
+static Bool noDefaultPath = False;
+static int longestPath;
+static int szPath;
+static int nPathEntries;
+static char **includePath;
Bool
-XkbParseIncludeMap(char **str_inout,char **file_rtrn,char **map_rtrn,
- char *nextop_rtrn, char **extra_data)
+XkbParseIncludeMap(char **str_inout, char **file_rtrn, char **map_rtrn,
+ char *nextop_rtrn, char **extra_data)
{
-char *tmp,*str,*next;
+ char *tmp, *str, *next;
- str= *str_inout;
- if ((*str=='+')||(*str=='|')) {
- *file_rtrn= *map_rtrn= NULL;
- *nextop_rtrn= *str;
- next= str+1;
+ str = *str_inout;
+ if ((*str == '+') || (*str == '|'))
+ {
+ *file_rtrn = *map_rtrn = NULL;
+ *nextop_rtrn = *str;
+ next = str + 1;
}
- else if (*str=='%') {
- *file_rtrn= *map_rtrn= NULL;
- *nextop_rtrn= str[1];
- next= str+2;
+ else if (*str == '%')
+ {
+ *file_rtrn = *map_rtrn = NULL;
+ *nextop_rtrn = str[1];
+ next = str + 2;
}
- else {
- next= strpbrk(str,"|+");
- if (next) {
- *nextop_rtrn= *next;
- *next++= '\0';
- }
- else {
- *nextop_rtrn= '\0';
- next= NULL;
- }
- tmp= strchr(str,':');
- if (tmp != NULL) {
- *tmp++ = '\0';
- *extra_data = uStringDup(tmp);
- }
- else {
- *extra_data = NULL;
- }
- tmp= strchr(str,'(');
- if (tmp==NULL) {
- *file_rtrn= uStringDup(str);
- *map_rtrn= NULL;
- }
- else if (str[0]=='(') {
- uFree(*extra_data);
- return False;
- }
- else {
- *tmp++= '\0';
- *file_rtrn= uStringDup(str);
- str= tmp;
- tmp= strchr(str,')');
- if ((tmp==NULL)||(tmp[1]!='\0')) {
- uFree(*file_rtrn);
- uFree(*extra_data);
- return False;
- }
- *tmp++= '\0';
- *map_rtrn= uStringDup(str);
- }
+ else
+ {
+ next = strpbrk(str, "|+");
+ if (next)
+ {
+ *nextop_rtrn = *next;
+ *next++ = '\0';
+ }
+ else
+ {
+ *nextop_rtrn = '\0';
+ next = NULL;
+ }
+ tmp = strchr(str, ':');
+ if (tmp != NULL)
+ {
+ *tmp++ = '\0';
+ *extra_data = uStringDup(tmp);
+ }
+ else
+ {
+ *extra_data = NULL;
+ }
+ tmp = strchr(str, '(');
+ if (tmp == NULL)
+ {
+ *file_rtrn = uStringDup(str);
+ *map_rtrn = NULL;
+ }
+ else if (str[0] == '(')
+ {
+ uFree(*extra_data);
+ return False;
+ }
+ else
+ {
+ *tmp++ = '\0';
+ *file_rtrn = uStringDup(str);
+ str = tmp;
+ tmp = strchr(str, ')');
+ if ((tmp == NULL) || (tmp[1] != '\0'))
+ {
+ uFree(*file_rtrn);
+ uFree(*extra_data);
+ return False;
+ }
+ *tmp++ = '\0';
+ *map_rtrn = uStringDup(str);
+ }
}
- if (*nextop_rtrn=='\0')
- *str_inout= NULL;
- else if ((*nextop_rtrn=='|')||(*nextop_rtrn=='+'))
- *str_inout= next;
- else return False;
+ if (*nextop_rtrn == '\0')
+ *str_inout = NULL;
+ else if ((*nextop_rtrn == '|') || (*nextop_rtrn == '+'))
+ *str_inout = next;
+ else
+ return False;
return True;
}
Bool
XkbInitIncludePath(void)
{
- szPath= PATH_CHUNK;
- includePath= (char **)calloc(szPath,sizeof(char *));
- if (includePath==NULL)
- return False;
+ szPath = PATH_CHUNK;
+ includePath = (char **) calloc(szPath, sizeof(char *));
+ if (includePath == NULL)
+ return False;
return True;
}
@@ -130,24 +142,27 @@ void
XkbAddDefaultDirectoriesToPath(void)
{
if (noDefaultPath)
- return;
+ return;
XkbAddDirectoryToPath(DFLT_XKB_CONFIG_ROOT);
}
void
XkbClearIncludePath(void)
{
-register int i;
+ register int i;
- if (szPath>0) {
- for (i=0;i<nPathEntries;i++) {
- if (includePath[i]!=NULL) {
- uFree(includePath[i]);
- includePath[i]= NULL;
- }
- }
- nPathEntries= 0;
- longestPath= 0;
+ if (szPath > 0)
+ {
+ for (i = 0; i < nPathEntries; i++)
+ {
+ if (includePath[i] != NULL)
+ {
+ uFree(includePath[i]);
+ includePath[i] = NULL;
+ }
+ }
+ nPathEntries = 0;
+ longestPath = 0;
}
noDefaultPath = True;
return;
@@ -156,36 +171,42 @@ register int i;
Bool
XkbAddDirectoryToPath(const char *dir)
{
-int len;
- if ((dir==NULL)||(dir[0]=='\0')) {
- XkbClearIncludePath();
- return True;
+ int len;
+ if ((dir == NULL) || (dir[0] == '\0'))
+ {
+ XkbClearIncludePath();
+ return True;
}
#ifdef __UNIXOS2__
- dir = (char*)__XOS2RedirRoot(dir);
+ dir = (char *) __XOS2RedirRoot(dir);
#endif
- len= strlen(dir);
- if (len+2>=PATH_MAX) { /* allow for '/' and at least one character */
- ERROR2("Path entry (%s) too long (maxiumum length is %d)\n",
- dir,PATH_MAX-3);
- return False;
+ len = strlen(dir);
+ if (len + 2 >= PATH_MAX)
+ { /* allow for '/' and at least one character */
+ ERROR2("Path entry (%s) too long (maxiumum length is %d)\n",
+ dir, PATH_MAX - 3);
+ return False;
}
- if (len>longestPath)
- longestPath= len;
- if (nPathEntries>=szPath) {
- szPath+= PATH_CHUNK;
- includePath= (char **)realloc(includePath,szPath*sizeof(char *));
- if (includePath==NULL) {
- WSGO("Allocation failed (includePath)\n");
- return False;
- }
+ if (len > longestPath)
+ longestPath = len;
+ if (nPathEntries >= szPath)
+ {
+ szPath += PATH_CHUNK;
+ includePath = (char **) realloc(includePath, szPath * sizeof(char *));
+ if (includePath == NULL)
+ {
+ WSGO("Allocation failed (includePath)\n");
+ return False;
+ }
}
- includePath[nPathEntries]= (char *)calloc(strlen(dir)+1,sizeof(char));
- if (includePath[nPathEntries]==NULL) {
- WSGO1("Allocation failed (includePath[%d])\n",nPathEntries);
- return False;
+ includePath[nPathEntries] =
+ (char *) calloc(strlen(dir) + 1, sizeof(char));
+ if (includePath[nPathEntries] == NULL)
+ {
+ WSGO1("Allocation failed (includePath[%d])\n", nPathEntries);
+ return False;
}
- strcpy(includePath[nPathEntries++],dir);
+ strcpy(includePath[nPathEntries++], dir);
return True;
}
@@ -194,88 +215,95 @@ int len;
char *
XkbDirectoryForInclude(unsigned type)
{
-static char buf[32];
+ static char buf[32];
- switch (type) {
- case XkmSemanticsFile:
- strcpy(buf,"semantics");
- break;
- case XkmLayoutFile:
- strcpy(buf,"layout");
- break;
- case XkmKeymapFile:
- strcpy(buf,"keymap");
- break;
- case XkmKeyNamesIndex:
- strcpy(buf,"keycodes");
- break;
- case XkmTypesIndex:
- strcpy(buf,"types");
- break;
- case XkmSymbolsIndex:
- strcpy(buf,"symbols");
- break;
- case XkmCompatMapIndex:
- strcpy(buf,"compat");
- break;
- case XkmGeometryFile:
- case XkmGeometryIndex:
- strcpy(buf,"geometry");
- break;
- default:
- strcpy(buf,"");
- break;
+ switch (type)
+ {
+ case XkmSemanticsFile:
+ strcpy(buf, "semantics");
+ break;
+ case XkmLayoutFile:
+ strcpy(buf, "layout");
+ break;
+ case XkmKeymapFile:
+ strcpy(buf, "keymap");
+ break;
+ case XkmKeyNamesIndex:
+ strcpy(buf, "keycodes");
+ break;
+ case XkmTypesIndex:
+ strcpy(buf, "types");
+ break;
+ case XkmSymbolsIndex:
+ strcpy(buf, "symbols");
+ break;
+ case XkmCompatMapIndex:
+ strcpy(buf, "compat");
+ break;
+ case XkmGeometryFile:
+ case XkmGeometryIndex:
+ strcpy(buf, "geometry");
+ break;
+ default:
+ strcpy(buf, "");
+ break;
}
return buf;
}
/***====================================================================***/
-typedef struct _FileCacheEntry {
- char * name;
- unsigned type;
- char * path;
- void * data;
- struct _FileCacheEntry * next;
+typedef struct _FileCacheEntry
+{
+ char *name;
+ unsigned type;
+ char *path;
+ void *data;
+ struct _FileCacheEntry *next;
} FileCacheEntry;
-static FileCacheEntry *fileCache;
+static FileCacheEntry *fileCache;
void *
-XkbAddFileToCache(char *name,unsigned type,char *path,void *data)
+XkbAddFileToCache(char *name, unsigned type, char *path, void *data)
{
-FileCacheEntry *entry;
+ FileCacheEntry *entry;
- for (entry=fileCache;entry!=NULL;entry=entry->next) {
- if ((type==entry->type)&&(uStringEqual(name,entry->name))) {
- void *old= entry->data;
- WSGO2("Replacing file cache entry (%s/%d)\n",name,type);
- entry->path= path;
- entry->data= data;
- return old;
- }
+ for (entry = fileCache; entry != NULL; entry = entry->next)
+ {
+ if ((type == entry->type) && (uStringEqual(name, entry->name)))
+ {
+ void *old = entry->data;
+ WSGO2("Replacing file cache entry (%s/%d)\n", name, type);
+ entry->path = path;
+ entry->data = data;
+ return old;
+ }
}
- entry= uTypedAlloc(FileCacheEntry);
- if (entry!=NULL) {
- entry->name= name;
- entry->type= type;
- entry->path= path;
- entry->data= data;
- entry->next= fileCache;
- fileCache= entry;
+ entry = uTypedAlloc(FileCacheEntry);
+ if (entry != NULL)
+ {
+ entry->name = name;
+ entry->type = type;
+ entry->path = path;
+ entry->data = data;
+ entry->next = fileCache;
+ fileCache = entry;
}
return NULL;
}
void *
-XkbFindFileInCache(char *name,unsigned type,char **pathRtrn)
+XkbFindFileInCache(char *name, unsigned type, char **pathRtrn)
{
-FileCacheEntry *entry;
+ FileCacheEntry *entry;
- for (entry=fileCache;entry!=NULL;entry=entry->next) {
- if ((type==entry->type)&&(uStringEqual(name,entry->name))) {
- *pathRtrn= entry->path;
- return entry->data;
- }
+ for (entry = fileCache; entry != NULL; entry = entry->next)
+ {
+ if ((type == entry->type) && (uStringEqual(name, entry->name)))
+ {
+ *pathRtrn = entry->path;
+ return entry->data;
+ }
}
return NULL;
}
@@ -283,38 +311,40 @@ FileCacheEntry *entry;
/***====================================================================***/
FILE *
-XkbFindFileInPath(char *name,unsigned type,char **pathRtrn)
+XkbFindFileInPath(char *name, unsigned type, char **pathRtrn)
{
-register int i;
-FILE *file= NULL;
-int nameLen,typeLen,pathLen;
-char buf[PATH_MAX],*typeDir;
+ register int i;
+ FILE *file = NULL;
+ int nameLen, typeLen, pathLen;
+ char buf[PATH_MAX], *typeDir;
- typeDir= XkbDirectoryForInclude(type);
- nameLen= strlen(name);
- typeLen= strlen(typeDir);
- for (i=0;i<nPathEntries;i++) {
- pathLen= strlen(includePath[i]);
- if (typeLen<1)
- continue;
+ typeDir = XkbDirectoryForInclude(type);
+ nameLen = strlen(name);
+ typeLen = strlen(typeDir);
+ for (i = 0; i < nPathEntries; i++)
+ {
+ pathLen = strlen(includePath[i]);
+ if (typeLen < 1)
+ continue;
- if ((nameLen+typeLen+pathLen+2)>=PATH_MAX) {
- ERROR3("File name (%s/%s/%s) too long\n",includePath[i],typeDir,
- name);
- ACTION("Ignored\n");
- continue;
- }
- sprintf(buf,"%s/%s/%s",includePath[i],typeDir,name);
- file= fopen(buf,"r");
- if (file!=NULL)
- break;
+ if ((nameLen + typeLen + pathLen + 2) >= PATH_MAX)
+ {
+ ERROR3("File name (%s/%s/%s) too long\n", includePath[i],
+ typeDir, name);
+ ACTION("Ignored\n");
+ continue;
+ }
+ sprintf(buf, "%s/%s/%s", includePath[i], typeDir, name);
+ file = fopen(buf, "r");
+ if (file != NULL)
+ break;
}
- if ((file!=NULL)&&(pathRtrn!=NULL)) {
- *pathRtrn= (char *)calloc(strlen(buf)+1,sizeof(char));
- if (*pathRtrn!=NULL)
- strcpy(*pathRtrn,buf);
+ if ((file != NULL) && (pathRtrn != NULL))
+ {
+ *pathRtrn = (char *) calloc(strlen(buf) + 1, sizeof(char));
+ if (*pathRtrn != NULL)
+ strcpy(*pathRtrn, buf);
}
return file;
}
-
diff --git a/xkbpath.h b/xkbpath.h
index d916d89..66c3ab7 100644
--- a/xkbpath.h
+++ b/xkbpath.h
@@ -27,51 +27,39 @@
#ifndef _XKBPATH_H_
#define _XKBPATH_H_ 1
-extern Bool XkbInitIncludePath(
- void
-);
+extern Bool XkbInitIncludePath(void);
-extern void XkbClearIncludePath(
- void
-);
+extern void XkbClearIncludePath(void);
-extern void XkbAddDefaultDirectoriesToPath(
- void
-);
+extern void XkbAddDefaultDirectoriesToPath(void);
-extern Bool XkbAddDirectoryToPath(
- const char * /* dir */
-);
+extern Bool XkbAddDirectoryToPath(const char * /* dir */
+ );
-extern char * XkbDirectoryForInclude(
- unsigned /* type */
-);
+extern char *XkbDirectoryForInclude(unsigned /* type */
+ );
-extern FILE *XkbFindFileInPath(
- char * /* name */,
- unsigned /* type */,
- char ** /* pathRtrn */
-);
+extern FILE *XkbFindFileInPath(char * /* name */ ,
+ unsigned /* type */ ,
+ char ** /* pathRtrn */
+ );
-extern void * XkbAddFileToCache(
- char * /* name */,
- unsigned /* type */,
- char * /* path */,
- void * /* data */
-);
+extern void *XkbAddFileToCache(char * /* name */ ,
+ unsigned /* type */ ,
+ char * /* path */ ,
+ void * /* data */
+ );
-extern void * XkbFindFileInCache(
- char * /* name */,
- unsigned /* type */,
- char ** /* pathRtrn */
-);
+extern void *XkbFindFileInCache(char * /* name */ ,
+ unsigned /* type */ ,
+ char ** /* pathRtrn */
+ );
-extern Bool XkbParseIncludeMap(
- char ** /* str_inout */,
- char ** /* file_rtrn */,
- char ** /* map_rtrn */,
- char * /* nextop_rtrn */,
- char ** /* extra_data */
-);
+extern Bool XkbParseIncludeMap(char ** /* str_inout */ ,
+ char ** /* file_rtrn */ ,
+ char ** /* map_rtrn */ ,
+ char * /* nextop_rtrn */ ,
+ char ** /* extra_data */
+ );
#endif /* _XKBPATH_H_ */
diff --git a/xkbscan.c b/xkbscan.c
index 1279f96..75bfd1a 100644
--- a/xkbscan.c
+++ b/xkbscan.c
@@ -35,183 +35,332 @@
#include "utils.h"
#include "parseutils.h"
-FILE *yyin = NULL;
+FILE *yyin = NULL;
static char scanFileBuf[1024];
-char * scanFile= scanFileBuf;
-int lineNum= 0;
+char *scanFile = scanFileBuf;
+int lineNum = 0;
-int scanInt;
-char *scanIntStr;
-int scanIntClass;
+int scanInt;
+char *scanIntStr;
+int scanIntClass;
-char *scanStr = NULL;
-int scanStrLine= 0;
+char *scanStr = NULL;
+int scanStrLine = 0;
#define BUFSIZE 512
-static int nInBuf = 0;
-static char buf[BUFSIZE];
+static int nInBuf = 0;
+static char buf[BUFSIZE];
#ifdef DEBUG
-extern unsigned debugFlags;
+extern unsigned debugFlags;
static char *
tokText(int tok)
{
-static char buf[32];
-
- switch (tok) {
- case END_OF_FILE: sprintf(buf, "END_OF_FILE");break;
- case ERROR_TOK: sprintf(buf, "ERROR"); break;
-
- case XKB_KEYMAP: sprintf(buf, "XKB_KEYMAP"); break;
- case XKB_KEYCODES: sprintf(buf, "XKB_KEYCODES"); break;
- case XKB_TYPES: sprintf(buf, "XKB_TYPES"); break;
- case XKB_SYMBOLS: sprintf(buf, "XKB_SYMBOLS"); break;
- case XKB_COMPATMAP: sprintf(buf, "XKB_COMPATMAP"); break;
- case XKB_GEOMETRY: sprintf(buf, "XKB_GEOMETRY"); break;
- case XKB_SEMANTICS: sprintf(buf, "XKB_SEMANTICS"); break;
- case XKB_LAYOUT: sprintf(buf, "XKB_LAYOUT"); break;
-
- case INCLUDE: sprintf(buf, "INCLUDE"); break;
- case OVERRIDE: sprintf(buf, "OVERRIDE"); break;
- case AUGMENT: sprintf(buf, "AUGMENT"); break;
- case REPLACE: sprintf(buf, "REPLACE"); break;
- case ALTERNATE: sprintf(buf, "ALTERNATE"); break;
-
- case VIRTUAL_MODS: sprintf(buf, "VIRTUAL_MODS"); break;
- case TYPE: sprintf(buf, "TYPE"); break;
- case INTERPRET: sprintf(buf, "INTERPRET"); break;
- case ACTION_TOK: sprintf(buf, "ACTION"); break;
- case KEY: sprintf(buf, "KEY"); break;
- case ALIAS: sprintf(buf, "ALIAS"); break;
- case GROUP: sprintf(buf, "GROUP"); break;
- case MODIFIER_MAP: sprintf(buf, "MODIFIER_MAP"); break;
- case INDICATOR: sprintf(buf, "INDICATOR"); break;
- case SHAPE: sprintf(buf, "SHAPE"); break;
- case KEYS: sprintf(buf, "KEYS"); break;
- case ROW: sprintf(buf, "ROW"); break;
- case SECTION: sprintf(buf, "SECTION"); break;
- case OVERLAY: sprintf(buf, "OVERLAY"); break;
- case TEXT: sprintf(buf, "TEXT"); break;
- case OUTLINE: sprintf(buf, "OUTLINE"); break;
- case SOLID: sprintf(buf, "SOLID"); break;
- case LOGO: sprintf(buf, "LOGO"); break;
- case VIRTUAL: sprintf(buf, "VIRTUAL"); break;
-
- case EQUALS: sprintf(buf, "EQUALS"); break;
- case PLUS: sprintf(buf, "PLUS"); break;
- case MINUS: sprintf(buf, "MINUS"); break;
- case DIVIDE: sprintf(buf, "DIVIDE"); break;
- case TIMES: sprintf(buf, "TIMES"); break;
- case OBRACE: sprintf(buf, "OBRACE"); break;
- case CBRACE: sprintf(buf, "CBRACE"); break;
- case OPAREN: sprintf(buf, "OPAREN"); break;
- case CPAREN: sprintf(buf, "CPAREN"); break;
- case OBRACKET: sprintf(buf, "OBRACKET");break;
- case CBRACKET: sprintf(buf, "CBRACKET");break;
- case DOT: sprintf(buf, "DOT"); break;
- case COMMA: sprintf(buf, "COMMA"); break;
- case SEMI: sprintf(buf, "SEMI"); break;
- case EXCLAM: sprintf(buf, "EXCLAM"); break;
- case INVERT: sprintf(buf, "INVERT"); break;
-
- case STRING: sprintf(buf, "STRING (%s)",scanStr); break;
- case INTEGER: sprintf(buf, "INTEGER (0x%x)",scanInt); break;
- case FLOAT: sprintf(buf, "FLOAT (%d.%d)",
- scanInt/XkbGeomPtsPerMM,
- scanInt%XkbGeomPtsPerMM);break;
- case IDENT: sprintf(buf, "IDENT (%s)",scanStr); break;
- case KEYNAME: sprintf(buf, "KEYNAME (%s)",scanStr); break;
-
- case PARTIAL: sprintf(buf, "PARTIAL"); break;
- case DEFAULT: sprintf(buf, "DEFAULT"); break;
- case HIDDEN: sprintf(buf, "HIDDEN"); break;
-
- case ALPHANUMERIC_KEYS: sprintf(buf, "ALPHANUMERIC_KEYS"); break;
- case MODIFIER_KEYS: sprintf(buf, "MODIFIER_KEYS"); break;
- case KEYPAD_KEYS: sprintf(buf, "KEYPAD_KEYS"); break;
- case FUNCTION_KEYS: sprintf(buf, "FUNCTION_KEYS"); break;
- case ALTERNATE_GROUP: sprintf(buf, "ALTERNATE_GROUP"); break;
-
- default: sprintf(buf, "UNKNOWN"); break;
+ static char buf[32];
+
+ switch (tok)
+ {
+ case END_OF_FILE:
+ sprintf(buf, "END_OF_FILE");
+ break;
+ case ERROR_TOK:
+ sprintf(buf, "ERROR");
+ break;
+
+ case XKB_KEYMAP:
+ sprintf(buf, "XKB_KEYMAP");
+ break;
+ case XKB_KEYCODES:
+ sprintf(buf, "XKB_KEYCODES");
+ break;
+ case XKB_TYPES:
+ sprintf(buf, "XKB_TYPES");
+ break;
+ case XKB_SYMBOLS:
+ sprintf(buf, "XKB_SYMBOLS");
+ break;
+ case XKB_COMPATMAP:
+ sprintf(buf, "XKB_COMPATMAP");
+ break;
+ case XKB_GEOMETRY:
+ sprintf(buf, "XKB_GEOMETRY");
+ break;
+ case XKB_SEMANTICS:
+ sprintf(buf, "XKB_SEMANTICS");
+ break;
+ case XKB_LAYOUT:
+ sprintf(buf, "XKB_LAYOUT");
+ break;
+
+ case INCLUDE:
+ sprintf(buf, "INCLUDE");
+ break;
+ case OVERRIDE:
+ sprintf(buf, "OVERRIDE");
+ break;
+ case AUGMENT:
+ sprintf(buf, "AUGMENT");
+ break;
+ case REPLACE:
+ sprintf(buf, "REPLACE");
+ break;
+ case ALTERNATE:
+ sprintf(buf, "ALTERNATE");
+ break;
+
+ case VIRTUAL_MODS:
+ sprintf(buf, "VIRTUAL_MODS");
+ break;
+ case TYPE:
+ sprintf(buf, "TYPE");
+ break;
+ case INTERPRET:
+ sprintf(buf, "INTERPRET");
+ break;
+ case ACTION_TOK:
+ sprintf(buf, "ACTION");
+ break;
+ case KEY:
+ sprintf(buf, "KEY");
+ break;
+ case ALIAS:
+ sprintf(buf, "ALIAS");
+ break;
+ case GROUP:
+ sprintf(buf, "GROUP");
+ break;
+ case MODIFIER_MAP:
+ sprintf(buf, "MODIFIER_MAP");
+ break;
+ case INDICATOR:
+ sprintf(buf, "INDICATOR");
+ break;
+ case SHAPE:
+ sprintf(buf, "SHAPE");
+ break;
+ case KEYS:
+ sprintf(buf, "KEYS");
+ break;
+ case ROW:
+ sprintf(buf, "ROW");
+ break;
+ case SECTION:
+ sprintf(buf, "SECTION");
+ break;
+ case OVERLAY:
+ sprintf(buf, "OVERLAY");
+ break;
+ case TEXT:
+ sprintf(buf, "TEXT");
+ break;
+ case OUTLINE:
+ sprintf(buf, "OUTLINE");
+ break;
+ case SOLID:
+ sprintf(buf, "SOLID");
+ break;
+ case LOGO:
+ sprintf(buf, "LOGO");
+ break;
+ case VIRTUAL:
+ sprintf(buf, "VIRTUAL");
+ break;
+
+ case EQUALS:
+ sprintf(buf, "EQUALS");
+ break;
+ case PLUS:
+ sprintf(buf, "PLUS");
+ break;
+ case MINUS:
+ sprintf(buf, "MINUS");
+ break;
+ case DIVIDE:
+ sprintf(buf, "DIVIDE");
+ break;
+ case TIMES:
+ sprintf(buf, "TIMES");
+ break;
+ case OBRACE:
+ sprintf(buf, "OBRACE");
+ break;
+ case CBRACE:
+ sprintf(buf, "CBRACE");
+ break;
+ case OPAREN:
+ sprintf(buf, "OPAREN");
+ break;
+ case CPAREN:
+ sprintf(buf, "CPAREN");
+ break;
+ case OBRACKET:
+ sprintf(buf, "OBRACKET");
+ break;
+ case CBRACKET:
+ sprintf(buf, "CBRACKET");
+ break;
+ case DOT:
+ sprintf(buf, "DOT");
+ break;
+ case COMMA:
+ sprintf(buf, "COMMA");
+ break;
+ case SEMI:
+ sprintf(buf, "SEMI");
+ break;
+ case EXCLAM:
+ sprintf(buf, "EXCLAM");
+ break;
+ case INVERT:
+ sprintf(buf, "INVERT");
+ break;
+
+ case STRING:
+ sprintf(buf, "STRING (%s)", scanStr);
+ break;
+ case INTEGER:
+ sprintf(buf, "INTEGER (0x%x)", scanInt);
+ break;
+ case FLOAT:
+ sprintf(buf, "FLOAT (%d.%d)",
+ scanInt / XkbGeomPtsPerMM, scanInt % XkbGeomPtsPerMM);
+ break;
+ case IDENT:
+ sprintf(buf, "IDENT (%s)", scanStr);
+ break;
+ case KEYNAME:
+ sprintf(buf, "KEYNAME (%s)", scanStr);
+ break;
+
+ case PARTIAL:
+ sprintf(buf, "PARTIAL");
+ break;
+ case DEFAULT:
+ sprintf(buf, "DEFAULT");
+ break;
+ case HIDDEN:
+ sprintf(buf, "HIDDEN");
+ break;
+
+ case ALPHANUMERIC_KEYS:
+ sprintf(buf, "ALPHANUMERIC_KEYS");
+ break;
+ case MODIFIER_KEYS:
+ sprintf(buf, "MODIFIER_KEYS");
+ break;
+ case KEYPAD_KEYS:
+ sprintf(buf, "KEYPAD_KEYS");
+ break;
+ case FUNCTION_KEYS:
+ sprintf(buf, "FUNCTION_KEYS");
+ break;
+ case ALTERNATE_GROUP:
+ sprintf(buf, "ALTERNATE_GROUP");
+ break;
+
+ default:
+ sprintf(buf, "UNKNOWN");
+ break;
}
return buf;
}
#endif
int
-setScanState(char *file,int line)
+setScanState(char *file, int line)
{
- if (file!=NULL)
- strncpy(scanFile,file,1024);
- if (line>=0)
- lineNum= line;
+ if (file != NULL)
+ strncpy(scanFile, file, 1024);
+ if (line >= 0)
+ lineNum = line;
return 1;
}
static int
yyGetString(void)
{
-int ch;
+ int ch;
nInBuf = 0;
- while ( ((ch=getc(yyin))!=EOF) && (ch!='"') ) {
- if ( ch == '\\' ) {
- if ((ch = getc(yyin))!=EOF) {
- if ( ch=='n' ) ch = '\n';
- else if ( ch == 't' ) ch = '\t';
- else if ( ch == 'v' ) ch = '\v';
- else if ( ch == 'b' ) ch = '\b';
- else if ( ch == 'r' ) ch = '\r';
- else if ( ch == 'f' ) ch = '\f';
- else if ( ch == 'e' ) ch = '\033';
- else if ( ch == '0' ) {
- int tmp,stop;
- ch = stop = 0;
- if (((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- if (!stop) {
- if (((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- }
- if (!stop) {
- if (((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- }
- }
- }
- else return ERROR_TOK;
- }
- if ( nInBuf < BUFSIZE-1 )
- buf[nInBuf++] = ch;
+ while (((ch = getc(yyin)) != EOF) && (ch != '"'))
+ {
+ if (ch == '\\')
+ {
+ if ((ch = getc(yyin)) != EOF)
+ {
+ if (ch == 'n')
+ ch = '\n';
+ else if (ch == 't')
+ ch = '\t';
+ else if (ch == 'v')
+ ch = '\v';
+ else if (ch == 'b')
+ ch = '\b';
+ else if (ch == 'r')
+ ch = '\r';
+ else if (ch == 'f')
+ ch = '\f';
+ else if (ch == 'e')
+ ch = '\033';
+ else if (ch == '0')
+ {
+ int tmp, stop;
+ ch = stop = 0;
+ if (((tmp = getc(yyin)) != EOF) && (isdigit(tmp))
+ && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ ungetc(tmp, yyin);
+ }
+ if (!stop)
+ {
+ if (((tmp = getc(yyin)) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ ungetc(tmp, yyin);
+ }
+ }
+ if (!stop)
+ {
+ if (((tmp = getc(yyin)) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ ungetc(tmp, yyin);
+ }
+ }
+ }
+ }
+ else
+ return ERROR_TOK;
+ }
+ if (nInBuf < BUFSIZE - 1)
+ buf[nInBuf++] = ch;
}
- if ( ch == '"' ) {
- buf[nInBuf++] = '\0';
- if ( scanStr )
- uFree( scanStr );
- scanStr = (char *)uStringDup(buf);
- scanStrLine = lineNum;
- return STRING;
+ if (ch == '"')
+ {
+ buf[nInBuf++] = '\0';
+ if (scanStr)
+ uFree(scanStr);
+ scanStr = (char *) uStringDup(buf);
+ scanStrLine = lineNum;
+ return STRING;
}
return ERROR_TOK;
}
@@ -219,149 +368,220 @@ int ch;
static int
yyGetKeyName(void)
{
-int ch;
+ int ch;
nInBuf = 0;
- while ( ((ch=getc(yyin))!=EOF) && (ch!='>') ) {
- if ( ch == '\\' ) {
- if ((ch = getc(yyin))!=EOF) {
- if ( ch=='n' ) ch = '\n';
- else if ( ch == 't' ) ch = '\t';
- else if ( ch == 'v' ) ch = '\v';
- else if ( ch == 'b' ) ch = '\b';
- else if ( ch == 'r' ) ch = '\r';
- else if ( ch == 'f' ) ch = '\f';
- else if ( ch == 'e' ) ch = '\033';
- else if ( ch == '0' ) {
- int tmp,stop;
- ch = stop = 0;
- if (((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- if ((!stop) && ((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- if ((!stop) && ((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- }
- }
- else return ERROR_TOK;
- }
-
- if ( nInBuf < BUFSIZE-1 )
- buf[nInBuf++] = ch;
+ while (((ch = getc(yyin)) != EOF) && (ch != '>'))
+ {
+ if (ch == '\\')
+ {
+ if ((ch = getc(yyin)) != EOF)
+ {
+ if (ch == 'n')
+ ch = '\n';
+ else if (ch == 't')
+ ch = '\t';
+ else if (ch == 'v')
+ ch = '\v';
+ else if (ch == 'b')
+ ch = '\b';
+ else if (ch == 'r')
+ ch = '\r';
+ else if (ch == 'f')
+ ch = '\f';
+ else if (ch == 'e')
+ ch = '\033';
+ else if (ch == '0')
+ {
+ int tmp, stop;
+ ch = stop = 0;
+ if (((tmp = getc(yyin)) != EOF) && (isdigit(tmp))
+ && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ ungetc(tmp, yyin);
+ }
+ if ((!stop) && ((tmp = getc(yyin)) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ ungetc(tmp, yyin);
+ }
+ if ((!stop) && ((tmp = getc(yyin)) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ ungetc(tmp, yyin);
+ }
+ }
+ }
+ else
+ return ERROR_TOK;
+ }
+
+ if (nInBuf < BUFSIZE - 1)
+ buf[nInBuf++] = ch;
}
- if (( ch == '>' )&&(nInBuf<5)) {
- buf[nInBuf++] = '\0';
- if ( scanStr )
- uFree( scanStr );
- scanStr = (char *)uStringDup(buf);
- scanStrLine = lineNum;
- return KEYNAME;
+ if ((ch == '>') && (nInBuf < 5))
+ {
+ buf[nInBuf++] = '\0';
+ if (scanStr)
+ uFree(scanStr);
+ scanStr = (char *) uStringDup(buf);
+ scanStrLine = lineNum;
+ return KEYNAME;
}
return ERROR_TOK;
}
-struct _Keyword {
- const char *keyword;
- int token;
-} keywords[] = {
- { "xkb_keymap", XKB_KEYMAP },
- { "xkb_keycodes", XKB_KEYCODES },
- { "xkb_types", XKB_TYPES },
- { "xkb_symbols", XKB_SYMBOLS },
- { "xkb_compat", XKB_COMPATMAP },
- { "xkb_compat_map", XKB_COMPATMAP },
- { "xkb_compatibility", XKB_COMPATMAP },
- { "xkb_compatibility_map", XKB_COMPATMAP },
- { "xkb_geometry", XKB_GEOMETRY },
- { "xkb_semantics", XKB_SEMANTICS },
- { "xkb_layout", XKB_LAYOUT },
- { "include", INCLUDE },
- { "override", OVERRIDE },
- { "augment", AUGMENT },
- { "replace", REPLACE },
- { "alternate", ALTERNATE },
- { "partial", PARTIAL },
- { "default", DEFAULT },
- { "hidden", HIDDEN },
- { "virtual_modifiers", VIRTUAL_MODS },
- { "type", TYPE },
- { "interpret", INTERPRET },
- { "action", ACTION_TOK },
- { "key", KEY },
- { "alias", ALIAS },
- { "group", GROUP },
- { "modmap", MODIFIER_MAP },
- { "mod_map", MODIFIER_MAP },
- { "modifier_map", MODIFIER_MAP },
- { "indicator", INDICATOR },
- { "shape", SHAPE },
- { "row", ROW },
- { "keys", KEYS },
- { "section", SECTION },
- { "overlay", OVERLAY },
- { "text", TEXT },
- { "outline", OUTLINE },
- { "solid", SOLID },
- { "logo", LOGO },
- { "virtual", VIRTUAL },
- { "alphanumeric_keys", ALPHANUMERIC_KEYS },
- { "modifier_keys", MODIFIER_KEYS },
- { "keypad_keys", KEYPAD_KEYS },
- { "function_keys", FUNCTION_KEYS },
- { "alternate_group", ALTERNATE_GROUP }
+struct _Keyword
+{
+ const char *keyword;
+ int token;
+} keywords[] =
+{
+ {
+ "xkb_keymap", XKB_KEYMAP},
+ {
+ "xkb_keycodes", XKB_KEYCODES},
+ {
+ "xkb_types", XKB_TYPES},
+ {
+ "xkb_symbols", XKB_SYMBOLS},
+ {
+ "xkb_compat", XKB_COMPATMAP},
+ {
+ "xkb_compat_map", XKB_COMPATMAP},
+ {
+ "xkb_compatibility", XKB_COMPATMAP},
+ {
+ "xkb_compatibility_map", XKB_COMPATMAP},
+ {
+ "xkb_geometry", XKB_GEOMETRY},
+ {
+ "xkb_semantics", XKB_SEMANTICS},
+ {
+ "xkb_layout", XKB_LAYOUT},
+ {
+ "include", INCLUDE},
+ {
+ "override", OVERRIDE},
+ {
+ "augment", AUGMENT},
+ {
+ "replace", REPLACE},
+ {
+ "alternate", ALTERNATE},
+ {
+ "partial", PARTIAL},
+ {
+ "default", DEFAULT},
+ {
+ "hidden", HIDDEN},
+ {
+ "virtual_modifiers", VIRTUAL_MODS},
+ {
+ "type", TYPE},
+ {
+ "interpret", INTERPRET},
+ {
+ "action", ACTION_TOK},
+ {
+ "key", KEY},
+ {
+ "alias", ALIAS},
+ {
+ "group", GROUP},
+ {
+ "modmap", MODIFIER_MAP},
+ {
+ "mod_map", MODIFIER_MAP},
+ {
+ "modifier_map", MODIFIER_MAP},
+ {
+ "indicator", INDICATOR},
+ {
+ "shape", SHAPE},
+ {
+ "row", ROW},
+ {
+ "keys", KEYS},
+ {
+ "section", SECTION},
+ {
+ "overlay", OVERLAY},
+ {
+ "text", TEXT},
+ {
+ "outline", OUTLINE},
+ {
+ "solid", SOLID},
+ {
+ "logo", LOGO},
+ {
+ "virtual", VIRTUAL},
+ {
+ "alphanumeric_keys", ALPHANUMERIC_KEYS},
+ {
+ "modifier_keys", MODIFIER_KEYS},
+ {
+ "keypad_keys", KEYPAD_KEYS},
+ {
+ "function_keys", FUNCTION_KEYS},
+ {
+ "alternate_group", ALTERNATE_GROUP}
};
-int numKeywords = sizeof(keywords)/sizeof(struct _Keyword);
+int numKeywords = sizeof(keywords) / sizeof(struct _Keyword);
static int
yyGetIdent(int first)
{
-int ch,i,found;
-int rtrn = IDENT;
-
- buf[0] = first; nInBuf = 1;
- while ( ((ch=getc(yyin))!=EOF) && (isalnum(ch)||(ch=='_')) ) {
- if ( nInBuf < BUFSIZE - 1 )
- buf[nInBuf++] = ch;
+ int ch, i, found;
+ int rtrn = IDENT;
+
+ buf[0] = first;
+ nInBuf = 1;
+ while (((ch = getc(yyin)) != EOF) && (isalnum(ch) || (ch == '_')))
+ {
+ if (nInBuf < BUFSIZE - 1)
+ buf[nInBuf++] = ch;
}
buf[nInBuf++] = '\0';
- found= 0;
-
- for (i=0;(!found)&&(i<numKeywords);i++) {
- if (uStrCaseCmp(buf,keywords[i].keyword)==0) {
- rtrn= keywords[i].token;
- found= 1;
- }
+ found = 0;
+
+ for (i = 0; (!found) && (i < numKeywords); i++)
+ {
+ if (uStrCaseCmp(buf, keywords[i].keyword) == 0)
+ {
+ rtrn = keywords[i].token;
+ found = 1;
+ }
}
- if (!found) {
- if ( scanStr )
- uFree( scanStr );
- scanStr = (char *)uStringDup(buf);
- scanStrLine = lineNum;
- rtrn = IDENT;
+ if (!found)
+ {
+ if (scanStr)
+ uFree(scanStr);
+ scanStr = (char *) uStringDup(buf);
+ scanStrLine = lineNum;
+ rtrn = IDENT;
}
- if ( (ch!=EOF) && (!isspace(ch)) )
- ungetc( ch, yyin );
- else if ( ch=='\n' )
- lineNum++;
+ if ((ch != EOF) && (!isspace(ch)))
+ ungetc(ch, yyin);
+ else if (ch == '\n')
+ lineNum++;
return rtrn;
}
@@ -369,98 +589,138 @@ int rtrn = IDENT;
static int
yyGetNumber(int ch)
{
-int isFloat= 0;
-
- buf[0]= ch;
- nInBuf= 1;
- while (((ch=getc(yyin))!=EOF)&&(isxdigit(ch)||((nInBuf==1)&&(ch=='x')))) {
- buf[nInBuf++]= ch;
+ int isFloat = 0;
+
+ buf[0] = ch;
+ nInBuf = 1;
+ while (((ch = getc(yyin)) != EOF)
+ && (isxdigit(ch) || ((nInBuf == 1) && (ch == 'x'))))
+ {
+ buf[nInBuf++] = ch;
}
- if (ch=='.') {
- isFloat= 1;
- buf[nInBuf++]= ch;
- while (((ch=getc(yyin))!=EOF)&&(isxdigit(ch))) {
- buf[nInBuf++]= ch;
- }
+ if (ch == '.')
+ {
+ isFloat = 1;
+ buf[nInBuf++] = ch;
+ while (((ch = getc(yyin)) != EOF) && (isxdigit(ch)))
+ {
+ buf[nInBuf++] = ch;
+ }
}
- buf[nInBuf++]= '\0';
- if ((ch!=EOF)&&(!isspace(ch)))
- ungetc( ch, yyin );
-
- if (isFloat) {
- float tmp;
- if (sscanf(buf,"%g",&tmp)==1) {
- scanInt= tmp*XkbGeomPtsPerMM;
- return FLOAT;
- }
+ buf[nInBuf++] = '\0';
+ if ((ch != EOF) && (!isspace(ch)))
+ ungetc(ch, yyin);
+
+ if (isFloat)
+ {
+ float tmp;
+ if (sscanf(buf, "%g", &tmp) == 1)
+ {
+ scanInt = tmp * XkbGeomPtsPerMM;
+ return FLOAT;
+ }
}
- else if ( sscanf(buf,"%i",&scanInt)==1 )
- return INTEGER;
- fprintf(stderr,"Malformed number %s\n",buf);
+ else if (sscanf(buf, "%i", &scanInt) == 1)
+ return INTEGER;
+ fprintf(stderr, "Malformed number %s\n", buf);
return ERROR_TOK;
}
int
yylex(void)
{
-int ch;
-int rtrn;
-
- do {
- ch = getc(yyin);
- if ( ch == '\n' ) {
- lineNum++;
- }
- else if ( ch=='#' ) { /* handle shell style '#' comments */
- do {
- ch= getc(yyin);
- } while ((ch!='\n')&&(ch!=EOF));
- lineNum++;
- }
- else if ( ch=='/' ) { /* handle C++ style double-/ comments */
- int newch= getc(yyin);
- if (newch=='/') {
- do {
- ch= getc(yyin);
- } while ((ch!='\n')&&(ch!=EOF));
- lineNum++;
- }
- else if (newch!=EOF) {
- ungetc(newch,yyin);
- }
- }
- } while ((ch!=EOF)&&(isspace(ch)));
- if ( ch == '=' ) rtrn = EQUALS;
- else if ( ch == '+' ) rtrn = PLUS;
- else if ( ch == '-' ) rtrn = MINUS;
- else if ( ch == '/' ) rtrn = DIVIDE;
- else if ( ch == '*' ) rtrn = TIMES;
- else if ( ch == '{' ) rtrn = OBRACE;
- else if ( ch == '}' ) rtrn = CBRACE;
- else if ( ch == '(' ) rtrn = OPAREN;
- else if ( ch == ')' ) rtrn = CPAREN;
- else if ( ch == '[' ) rtrn = OBRACKET;
- else if ( ch == ']' ) rtrn = CBRACKET;
- else if ( ch == '.' ) rtrn = DOT;
- else if ( ch == ',' ) rtrn = COMMA;
- else if ( ch == ';' ) rtrn = SEMI;
- else if ( ch == '!' ) rtrn = EXCLAM;
- else if ( ch == '~' ) rtrn = INVERT;
- else if ( ch == '"' ) rtrn = yyGetString();
- else if ( ch == '<' ) rtrn = yyGetKeyName();
- else if ( isalpha(ch) || (ch=='_')) rtrn = yyGetIdent(ch);
- else if ( isdigit(ch) ) rtrn = yyGetNumber(ch);
- else if ( ch == EOF ) rtrn = END_OF_FILE;
- else {
+ int ch;
+ int rtrn;
+
+ do
+ {
+ ch = getc(yyin);
+ if (ch == '\n')
+ {
+ lineNum++;
+ }
+ else if (ch == '#')
+ { /* handle shell style '#' comments */
+ do
+ {
+ ch = getc(yyin);
+ }
+ while ((ch != '\n') && (ch != EOF));
+ lineNum++;
+ }
+ else if (ch == '/')
+ { /* handle C++ style double-/ comments */
+ int newch = getc(yyin);
+ if (newch == '/')
+ {
+ do
+ {
+ ch = getc(yyin);
+ }
+ while ((ch != '\n') && (ch != EOF));
+ lineNum++;
+ }
+ else if (newch != EOF)
+ {
+ ungetc(newch, yyin);
+ }
+ }
+ }
+ while ((ch != EOF) && (isspace(ch)));
+ if (ch == '=')
+ rtrn = EQUALS;
+ else if (ch == '+')
+ rtrn = PLUS;
+ else if (ch == '-')
+ rtrn = MINUS;
+ else if (ch == '/')
+ rtrn = DIVIDE;
+ else if (ch == '*')
+ rtrn = TIMES;
+ else if (ch == '{')
+ rtrn = OBRACE;
+ else if (ch == '}')
+ rtrn = CBRACE;
+ else if (ch == '(')
+ rtrn = OPAREN;
+ else if (ch == ')')
+ rtrn = CPAREN;
+ else if (ch == '[')
+ rtrn = OBRACKET;
+ else if (ch == ']')
+ rtrn = CBRACKET;
+ else if (ch == '.')
+ rtrn = DOT;
+ else if (ch == ',')
+ rtrn = COMMA;
+ else if (ch == ';')
+ rtrn = SEMI;
+ else if (ch == '!')
+ rtrn = EXCLAM;
+ else if (ch == '~')
+ rtrn = INVERT;
+ else if (ch == '"')
+ rtrn = yyGetString();
+ else if (ch == '<')
+ rtrn = yyGetKeyName();
+ else if (isalpha(ch) || (ch == '_'))
+ rtrn = yyGetIdent(ch);
+ else if (isdigit(ch))
+ rtrn = yyGetNumber(ch);
+ else if (ch == EOF)
+ rtrn = END_OF_FILE;
+ else
+ {
#ifdef DEBUG
- if (debugFlags)
- fprintf(stderr,"Unexpected character %c (%d) in input stream\n",ch,ch);
+ if (debugFlags)
+ fprintf(stderr,
+ "Unexpected character %c (%d) in input stream\n", ch, ch);
#endif
- rtrn = ERROR_TOK;
+ rtrn = ERROR_TOK;
}
#ifdef DEBUG
- if (debugFlags&0x2)
- fprintf(stderr,"scan: %s\n",tokText(rtrn));
+ if (debugFlags & 0x2)
+ fprintf(stderr, "scan: %s\n", tokText(rtrn));
#endif
return rtrn;
}