diff options
author | Keith Packard <keithp@keithp.com> | 2012-03-21 12:55:09 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2012-03-21 13:54:42 -0700 |
commit | 9838b7032ea9792bec21af424c53c07078636d21 (patch) | |
tree | b72d0827dac50f0f3b8eab29b3b7639546d735d7 /xkb/xkbout.c | |
parent | 75199129c603fc8567185ac31866c9518193cb78 (diff) |
Introduce a consistent coding style
This is strictly the application of the script 'x-indent-all.sh'
from util/modular. Compared to the patch that Daniel posted in
January, I've added a few indent flags:
-bap
-psl
-T PrivatePtr
-T pmWait
-T _XFUNCPROTOBEGIN
-T _XFUNCPROTOEND
-T _X_EXPORT
The typedefs were needed to make the output of sdksyms.sh match the
previous output, otherwise, the code is formatted badly enough that
sdksyms.sh generates incorrect output.
The generated code was compared with the previous version and found to
be essentially identical -- "assert" line numbers and BUILD_TIME were
the only differences found.
The comparison was done with this script:
dir1=$1
dir2=$2
for dir in $dir1 $dir2; do
(cd $dir && find . -name '*.o' | while read file; do
dir=`dirname $file`
base=`basename $file .o`
dump=$dir/$base.dump
objdump -d $file > $dump
done)
done
find $dir1 -name '*.dump' | while read dump; do
otherdump=`echo $dump | sed "s;$dir1;$dir2;"`
diff -u $dump $otherdump
done
Signed-off-by: Keith Packard <keithp@keithp.com>
Acked-by: Daniel Stone <daniel@fooishbar.org>
Acked-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Diffstat (limited to 'xkb/xkbout.c')
-rw-r--r-- | xkb/xkbout.c | 1551 |
1 files changed, 788 insertions, 763 deletions
diff --git a/xkb/xkbout.c b/xkb/xkbout.c index 889d5cc39..cd1ae0b4e 100644 --- a/xkb/xkbout.c +++ b/xkb/xkbout.c @@ -52,849 +52,874 @@ #define VMOD_COMMENT_VALUE 2 static Bool -WriteXKBVModDecl(FILE *file,XkbDescPtr xkb,int showValue) +WriteXKBVModDecl(FILE * file, XkbDescPtr xkb, int showValue) { -register int i,nMods; -Atom * vmodNames; - - if (xkb==NULL) - return FALSE; - if (xkb->names!=NULL) - vmodNames= xkb->names->vmods; - else vmodNames= NULL; - - for (i=nMods=0;i<XkbNumVirtualMods;i++) { - if ((vmodNames!=NULL)&&(vmodNames[i]!=None)) { - if (nMods==0) fprintf(file," virtual_modifiers "); - else fprintf(file,","); - fprintf(file,"%s",XkbAtomText(vmodNames[i],XkbXKBFile)); - if ((showValue!=VMOD_HIDE_VALUE)&& - (xkb->server)&&(xkb->server->vmods[i]!=XkbNoModifierMask)) { - if (showValue==VMOD_COMMENT_VALUE) { - fprintf(file,"/* = %s */", - XkbModMaskText(xkb->server->vmods[i],XkbXKBFile)); - } - else { - fprintf(file,"= %s", - XkbModMaskText(xkb->server->vmods[i],XkbXKBFile)); - } - } - nMods++; - } - } - if (nMods>0) - fprintf(file,";\n\n"); + register int i, nMods; + Atom *vmodNames; + + if (xkb == NULL) + return FALSE; + if (xkb->names != NULL) + vmodNames = xkb->names->vmods; + else + vmodNames = NULL; + + for (i = nMods = 0; i < XkbNumVirtualMods; i++) { + if ((vmodNames != NULL) && (vmodNames[i] != None)) { + if (nMods == 0) + fprintf(file, " virtual_modifiers "); + else + fprintf(file, ","); + fprintf(file, "%s", XkbAtomText(vmodNames[i], XkbXKBFile)); + if ((showValue != VMOD_HIDE_VALUE) && + (xkb->server) && (xkb->server->vmods[i] != XkbNoModifierMask)) { + if (showValue == VMOD_COMMENT_VALUE) { + fprintf(file, "/* = %s */", + XkbModMaskText(xkb->server->vmods[i], XkbXKBFile)); + } + else { + fprintf(file, "= %s", + XkbModMaskText(xkb->server->vmods[i], XkbXKBFile)); + } + } + nMods++; + } + } + if (nMods > 0) + fprintf(file, ";\n\n"); return TRUE; } /***====================================================================***/ static Bool -WriteXKBAction(FILE *file,XkbDescPtr xkb,XkbAnyAction *action) +WriteXKBAction(FILE * file, XkbDescPtr xkb, XkbAnyAction * action) { - fprintf(file,"%s",XkbActionText(xkb,(XkbAction *)action,XkbXKBFile)); + fprintf(file, "%s", XkbActionText(xkb, (XkbAction *) action, XkbXKBFile)); return TRUE; } /***====================================================================***/ Bool -XkbWriteXKBKeycodes( FILE * file, - XkbDescPtr xkb, - Bool topLevel, - Bool showImplicit, - XkbFileAddOnFunc addOn, - void * priv) +XkbWriteXKBKeycodes(FILE * file, + XkbDescPtr xkb, + Bool topLevel, + Bool showImplicit, XkbFileAddOnFunc addOn, void *priv) { -Atom kcName; -register unsigned i; -const char * alternate; - - if ((!xkb)||(!xkb->names)||(!xkb->names->keys)) { - _XkbLibError(_XkbErrMissingNames,"XkbWriteXKBKeycodes",0); - return FALSE; - } - kcName= xkb->names->keycodes; - if (kcName!=None) - fprintf(file,"xkb_keycodes \"%s\" {\n", - XkbAtomText(kcName,XkbXKBFile)); - else fprintf(file,"xkb_keycodes {\n"); - fprintf(file," minimum = %d;\n",xkb->min_key_code); - fprintf(file," maximum = %d;\n",xkb->max_key_code); - for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) { - if (xkb->names->keys[i].name[0]!='\0') { - if (XkbFindKeycodeByName(xkb,xkb->names->keys[i].name,TRUE)!=i) - alternate= "alternate "; - else alternate= ""; - fprintf(file," %s%6s = %d;\n",alternate, - XkbKeyNameText(xkb->names->keys[i].name,XkbXKBFile), - i); - } - } - if (xkb->indicators!=NULL) { - for (i=0;i<XkbNumIndicators;i++) { - const char *type; - if (xkb->indicators->phys_indicators&(1<<i)) - type= " "; - else type= " virtual "; - if (xkb->names->indicators[i]!=None) { - fprintf(file,"%sindicator %d = \"%s\";\n",type,i+1, - XkbAtomText(xkb->names->indicators[i],XkbXKBFile)); - } - } - } - if (xkb->names->key_aliases!=NULL) { - XkbKeyAliasPtr pAl; - pAl= xkb->names->key_aliases; - for (i=0;i<xkb->names->num_key_aliases;i++,pAl++) { - fprintf(file," alias %6s = %6s;\n", - XkbKeyNameText(pAl->alias,XkbXKBFile), - XkbKeyNameText(pAl->real,XkbXKBFile)); - } + Atom kcName; + register unsigned i; + const char *alternate; + + if ((!xkb) || (!xkb->names) || (!xkb->names->keys)) { + _XkbLibError(_XkbErrMissingNames, "XkbWriteXKBKeycodes", 0); + return FALSE; + } + kcName = xkb->names->keycodes; + if (kcName != None) + fprintf(file, "xkb_keycodes \"%s\" {\n", + XkbAtomText(kcName, XkbXKBFile)); + else + fprintf(file, "xkb_keycodes {\n"); + fprintf(file, " minimum = %d;\n", xkb->min_key_code); + fprintf(file, " maximum = %d;\n", xkb->max_key_code); + for (i = xkb->min_key_code; i <= xkb->max_key_code; i++) { + if (xkb->names->keys[i].name[0] != '\0') { + if (XkbFindKeycodeByName(xkb, xkb->names->keys[i].name, TRUE) != i) + alternate = "alternate "; + else + alternate = ""; + fprintf(file, " %s%6s = %d;\n", alternate, + XkbKeyNameText(xkb->names->keys[i].name, XkbXKBFile), i); + } + } + if (xkb->indicators != NULL) { + for (i = 0; i < XkbNumIndicators; i++) { + const char *type; + + if (xkb->indicators->phys_indicators & (1 << i)) + type = " "; + else + type = " virtual "; + if (xkb->names->indicators[i] != None) { + fprintf(file, "%sindicator %d = \"%s\";\n", type, i + 1, + XkbAtomText(xkb->names->indicators[i], XkbXKBFile)); + } + } + } + if (xkb->names->key_aliases != NULL) { + XkbKeyAliasPtr pAl; + + pAl = xkb->names->key_aliases; + for (i = 0; i < xkb->names->num_key_aliases; i++, pAl++) { + fprintf(file, " alias %6s = %6s;\n", + XkbKeyNameText(pAl->alias, XkbXKBFile), + XkbKeyNameText(pAl->real, XkbXKBFile)); + } } if (addOn) - (*addOn)(file,xkb,topLevel,showImplicit,XkmKeyNamesIndex,priv); - fprintf(file,"};\n\n"); + (*addOn) (file, xkb, topLevel, showImplicit, XkmKeyNamesIndex, priv); + fprintf(file, "};\n\n"); return TRUE; } Bool -XkbWriteXKBKeyTypes( FILE * file, - XkbDescPtr xkb, - Bool topLevel, - Bool showImplicit, - XkbFileAddOnFunc addOn, - void * priv) +XkbWriteXKBKeyTypes(FILE * file, + XkbDescPtr xkb, + Bool topLevel, + Bool showImplicit, XkbFileAddOnFunc addOn, void *priv) { -register unsigned i,n; -XkbKeyTypePtr type; -XkbKTMapEntryPtr entry; - - if ((!xkb)||(!xkb->map)||(!xkb->map->types)) { - _XkbLibError(_XkbErrMissingTypes,"XkbWriteXKBKeyTypes",0); - return FALSE; - } - if (xkb->map->num_types<XkbNumRequiredTypes) { - _XkbLibError(_XkbErrMissingReqTypes,"XkbWriteXKBKeyTypes",0); - return 0; - } - if ((xkb->names==NULL)||(xkb->names->types==None)) - fprintf(file,"xkb_types {\n\n"); - else fprintf(file,"xkb_types \"%s\" {\n\n", - XkbAtomText(xkb->names->types,XkbXKBFile)); - WriteXKBVModDecl(file,xkb, - (showImplicit?VMOD_COMMENT_VALUE:VMOD_HIDE_VALUE)); - - type= xkb->map->types; - for (i=0;i<xkb->map->num_types;i++,type++) { - fprintf(file," type \"%s\" {\n", - XkbAtomText(type->name,XkbXKBFile)); - fprintf(file," modifiers= %s;\n", - XkbVModMaskText(xkb,type->mods.real_mods,type->mods.vmods, - XkbXKBFile)); - entry= type->map; - for (n=0;n<type->map_count;n++,entry++) { - char *str; - str=XkbVModMaskText(xkb,entry->mods.real_mods,entry->mods.vmods, - XkbXKBFile); - fprintf(file," map[%s]= Level%d;\n",str,entry->level+1); - if ((type->preserve)&&((type->preserve[n].real_mods)|| - (type->preserve[n].vmods))) { - fprintf(file," preserve[%s]= ",str); - fprintf(file,"%s;\n",XkbVModMaskText(xkb, - type->preserve[n].real_mods, - type->preserve[n].vmods, - XkbXKBFile)); - } - } - if (type->level_names!=NULL) { - Atom *name= type->level_names; - for (n=0;n<type->num_levels;n++,name++) { - if ((*name)==None) - continue; - fprintf(file," level_name[Level%d]= \"%s\";\n",n+1, - XkbAtomText(*name,XkbXKBFile)); - } - } - fprintf(file," };\n"); + register unsigned i, n; + XkbKeyTypePtr type; + XkbKTMapEntryPtr entry; + + if ((!xkb) || (!xkb->map) || (!xkb->map->types)) { + _XkbLibError(_XkbErrMissingTypes, "XkbWriteXKBKeyTypes", 0); + return FALSE; + } + if (xkb->map->num_types < XkbNumRequiredTypes) { + _XkbLibError(_XkbErrMissingReqTypes, "XkbWriteXKBKeyTypes", 0); + return 0; + } + if ((xkb->names == NULL) || (xkb->names->types == None)) + fprintf(file, "xkb_types {\n\n"); + else + fprintf(file, "xkb_types \"%s\" {\n\n", + XkbAtomText(xkb->names->types, XkbXKBFile)); + WriteXKBVModDecl(file, xkb, + (showImplicit ? VMOD_COMMENT_VALUE : VMOD_HIDE_VALUE)); + + type = xkb->map->types; + for (i = 0; i < xkb->map->num_types; i++, type++) { + fprintf(file, " type \"%s\" {\n", + XkbAtomText(type->name, XkbXKBFile)); + fprintf(file, " modifiers= %s;\n", + XkbVModMaskText(xkb, type->mods.real_mods, type->mods.vmods, + XkbXKBFile)); + entry = type->map; + for (n = 0; n < type->map_count; n++, entry++) { + char *str; + + str = XkbVModMaskText(xkb, entry->mods.real_mods, entry->mods.vmods, + XkbXKBFile); + fprintf(file, " map[%s]= Level%d;\n", str, entry->level + 1); + if ((type->preserve) && ((type->preserve[n].real_mods) || + (type->preserve[n].vmods))) { + fprintf(file, " preserve[%s]= ", str); + fprintf(file, "%s;\n", XkbVModMaskText(xkb, + type->preserve[n]. + real_mods, + type->preserve[n].vmods, + XkbXKBFile)); + } + } + if (type->level_names != NULL) { + Atom *name = type->level_names; + + for (n = 0; n < type->num_levels; n++, name++) { + if ((*name) == None) + continue; + fprintf(file, " level_name[Level%d]= \"%s\";\n", n + 1, + XkbAtomText(*name, XkbXKBFile)); + } + } + fprintf(file, " };\n"); } if (addOn) - (*addOn)(file,xkb,topLevel,showImplicit,XkmTypesIndex,priv); - fprintf(file,"};\n\n"); + (*addOn) (file, xkb, topLevel, showImplicit, XkmTypesIndex, priv); + fprintf(file, "};\n\n"); return TRUE; } static Bool -WriteXKBIndicatorMap( FILE * file, - XkbDescPtr xkb, - Atom name, - XkbIndicatorMapPtr led, - XkbFileAddOnFunc addOn, - void * priv) +WriteXKBIndicatorMap(FILE * file, + XkbDescPtr xkb, + Atom name, + XkbIndicatorMapPtr led, XkbFileAddOnFunc addOn, void *priv) { - fprintf(file," indicator \"%s\" {\n",NameForAtom(name)); - if (led->flags&XkbIM_NoExplicit) - fprintf(file," !allowExplicit;\n"); - if (led->flags&XkbIM_LEDDrivesKB) - fprintf(file," indicatorDrivesKeyboard;\n"); - if (led->which_groups!=0) { - if (led->which_groups!=XkbIM_UseEffective) { - fprintf(file," whichGroupState= %s;\n", - XkbIMWhichStateMaskText(led->which_groups,XkbXKBFile)); - } - fprintf(file," groups= 0x%02x;\n",led->groups); - } - if (led->which_mods!=0) { - if (led->which_mods!=XkbIM_UseEffective) { - fprintf(file," whichModState= %s;\n", - XkbIMWhichStateMaskText(led->which_mods,XkbXKBFile)); - } - fprintf(file," modifiers= %s;\n", - XkbVModMaskText(xkb, - led->mods.real_mods,led->mods.vmods, - XkbXKBFile)); - } - if (led->ctrls!=0) { - fprintf(file," controls= %s;\n", - XkbControlsMaskText(led->ctrls,XkbXKBFile)); + fprintf(file, " indicator \"%s\" {\n", NameForAtom(name)); + if (led->flags & XkbIM_NoExplicit) + fprintf(file, " !allowExplicit;\n"); + if (led->flags & XkbIM_LEDDrivesKB) + fprintf(file, " indicatorDrivesKeyboard;\n"); + if (led->which_groups != 0) { + if (led->which_groups != XkbIM_UseEffective) { + fprintf(file, " whichGroupState= %s;\n", + XkbIMWhichStateMaskText(led->which_groups, XkbXKBFile)); + } + fprintf(file, " groups= 0x%02x;\n", led->groups); + } + if (led->which_mods != 0) { + if (led->which_mods != XkbIM_UseEffective) { + fprintf(file, " whichModState= %s;\n", + XkbIMWhichStateMaskText(led->which_mods, XkbXKBFile)); + } + fprintf(file, " modifiers= %s;\n", + XkbVModMaskText(xkb, + led->mods.real_mods, led->mods.vmods, + XkbXKBFile)); + } + if (led->ctrls != 0) { + fprintf(file, " controls= %s;\n", + XkbControlsMaskText(led->ctrls, XkbXKBFile)); } if (addOn) - (*addOn)(file,xkb,FALSE,TRUE,XkmIndicatorsIndex,priv); - fprintf(file," };\n"); + (*addOn) (file, xkb, FALSE, TRUE, XkmIndicatorsIndex, priv); + fprintf(file, " };\n"); return TRUE; } Bool -XkbWriteXKBCompatMap( FILE * file, - XkbDescPtr xkb, - Bool topLevel, - Bool showImplicit, - XkbFileAddOnFunc addOn, - void * priv) +XkbWriteXKBCompatMap(FILE * file, + XkbDescPtr xkb, + Bool topLevel, + Bool showImplicit, XkbFileAddOnFunc addOn, void *priv) { -register unsigned i; -XkbSymInterpretPtr interp; - - if ((!xkb)||(!xkb->compat)||(!xkb->compat->sym_interpret)) { - _XkbLibError(_XkbErrMissingCompatMap,"XkbWriteXKBCompatMap",0); - return FALSE; - } - if ((xkb->names==NULL)||(xkb->names->compat==None)) - fprintf(file,"xkb_compatibility {\n\n"); - else fprintf(file,"xkb_compatibility \"%s\" {\n\n", - XkbAtomText(xkb->names->compat,XkbXKBFile)); - WriteXKBVModDecl(file,xkb, - (showImplicit?VMOD_COMMENT_VALUE:VMOD_HIDE_VALUE)); - - fprintf(file," interpret.useModMapMods= AnyLevel;\n"); - fprintf(file," interpret.repeat= FALSE;\n"); - fprintf(file," interpret.locking= FALSE;\n"); - interp= xkb->compat->sym_interpret; - for (i=0;i<xkb->compat->num_si;i++,interp++) { - fprintf(file," interpret %s+%s(%s) {\n", - ((interp->sym==NoSymbol)?"Any": - XkbKeysymText(interp->sym,XkbXKBFile)), - XkbSIMatchText(interp->match,XkbXKBFile), - XkbModMaskText(interp->mods,XkbXKBFile)); - if (interp->virtual_mod!=XkbNoModifier) { - fprintf(file," virtualModifier= %s;\n", - XkbVModIndexText(xkb,interp->virtual_mod,XkbXKBFile)); - } - if (interp->match&XkbSI_LevelOneOnly) - fprintf(file," useModMapMods=level1;\n"); - if (interp->flags&XkbSI_LockingKey) - fprintf(file," locking= TRUE;\n"); - if (interp->flags&XkbSI_AutoRepeat) - fprintf(file," repeat= TRUE;\n"); - fprintf(file," action= "); - WriteXKBAction(file,xkb,&interp->act); - fprintf(file,";\n"); - fprintf(file," };\n"); - } - for (i=0;i<XkbNumKbdGroups;i++) { - XkbModsPtr gc; - - gc= &xkb->compat->groups[i]; - if ((gc->real_mods==0)&&(gc->vmods==0)) - continue; - fprintf(file," group %d = %s;\n",i+1,XkbVModMaskText(xkb, - gc->real_mods,gc->vmods, - XkbXKBFile)); + register unsigned i; + XkbSymInterpretPtr interp; + + if ((!xkb) || (!xkb->compat) || (!xkb->compat->sym_interpret)) { + _XkbLibError(_XkbErrMissingCompatMap, "XkbWriteXKBCompatMap", 0); + return FALSE; + } + if ((xkb->names == NULL) || (xkb->names->compat == None)) + fprintf(file, "xkb_compatibility {\n\n"); + else + fprintf(file, "xkb_compatibility \"%s\" {\n\n", + XkbAtomText(xkb->names->compat, XkbXKBFile)); + WriteXKBVModDecl(file, xkb, + (showImplicit ? VMOD_COMMENT_VALUE : VMOD_HIDE_VALUE)); + + fprintf(file, " interpret.useModMapMods= AnyLevel;\n"); + fprintf(file, " interpret.repeat= FALSE;\n"); + fprintf(file, " interpret.locking= FALSE;\n"); + interp = xkb->compat->sym_interpret; + for (i = 0; i < xkb->compat->num_si; i++, interp++) { + fprintf(file, " interpret %s+%s(%s) {\n", + ((interp->sym == NoSymbol) ? "Any" : + XkbKeysymText(interp->sym, XkbXKBFile)), + XkbSIMatchText(interp->match, XkbXKBFile), + XkbModMaskText(interp->mods, XkbXKBFile)); + if (interp->virtual_mod != XkbNoModifier) { + fprintf(file, " virtualModifier= %s;\n", + XkbVModIndexText(xkb, interp->virtual_mod, XkbXKBFile)); + } + if (interp->match & XkbSI_LevelOneOnly) + fprintf(file, " useModMapMods=level1;\n"); + if (interp->flags & XkbSI_LockingKey) + fprintf(file, " locking= TRUE;\n"); + if (interp->flags & XkbSI_AutoRepeat) + fprintf(file, " repeat= TRUE;\n"); + fprintf(file, " action= "); + WriteXKBAction(file, xkb, &interp->act); + fprintf(file, ";\n"); + fprintf(file, " };\n"); + } + for (i = 0; i < XkbNumKbdGroups; i++) { + XkbModsPtr gc; + + gc = &xkb->compat->groups[i]; + if ((gc->real_mods == 0) && (gc->vmods == 0)) + continue; + fprintf(file, " group %d = %s;\n", i + 1, XkbVModMaskText(xkb, + gc-> + real_mods, + gc->vmods, + XkbXKBFile)); } if (xkb->indicators) { - for (i=0;i<XkbNumIndicators;i++) { - XkbIndicatorMapPtr map= &xkb->indicators->maps[i]; - if ((map->flags!=0)||(map->which_groups!=0)||(map->groups!=0)|| - (map->which_mods!=0)|| - (map->mods.real_mods!=0)||(map->mods.vmods!=0)|| - (map->ctrls!=0)) { - WriteXKBIndicatorMap(file,xkb,xkb->names->indicators[i],map, - addOn,priv); - } - } + for (i = 0; i < XkbNumIndicators; i++) { + XkbIndicatorMapPtr map = &xkb->indicators->maps[i]; + + if ((map->flags != 0) || (map->which_groups != 0) || + (map->groups != 0) || (map->which_mods != 0) || + (map->mods.real_mods != 0) || (map->mods.vmods != 0) || + (map->ctrls != 0)) { + WriteXKBIndicatorMap(file, xkb, xkb->names->indicators[i], map, + addOn, priv); + } + } } if (addOn) - (*addOn)(file,xkb,topLevel,showImplicit,XkmCompatMapIndex,priv); - fprintf(file,"};\n\n"); + (*addOn) (file, xkb, topLevel, showImplicit, XkmCompatMapIndex, priv); + fprintf(file, "};\n\n"); return TRUE; } Bool -XkbWriteXKBSymbols( FILE * file, - XkbDescPtr xkb, - Bool topLevel, - Bool showImplicit, - XkbFileAddOnFunc addOn, - void * priv) +XkbWriteXKBSymbols(FILE * file, + XkbDescPtr xkb, + Bool topLevel, + Bool showImplicit, XkbFileAddOnFunc addOn, void *priv) { -register unsigned i,tmp; -XkbClientMapPtr map; -XkbServerMapPtr srv; -Bool showActions; + register unsigned i, tmp; + XkbClientMapPtr map; + XkbServerMapPtr srv; + Bool showActions; if (!xkb) { - _XkbLibError(_XkbErrMissingSymbols,"XkbWriteXKBSymbols",0); - return FALSE; - } - - map= xkb->map; - if ((!map)||(!map->syms)||(!map->key_sym_map)) { - _XkbLibError(_XkbErrMissingSymbols,"XkbWriteXKBSymbols",0); - return FALSE; - } - if ((!xkb->names)||(!xkb->names->keys)) { - _XkbLibError(_XkbErrMissingNames,"XkbWriteXKBSymbols",0); - return FALSE; - } - if ((xkb->names==NULL)||(xkb->names->symbols==None)) - fprintf(file,"xkb_symbols {\n\n"); - else fprintf(file,"xkb_symbols \"%s\" {\n\n", - XkbAtomText(xkb->names->symbols,XkbXKBFile)); - for (tmp=i=0;i<XkbNumKbdGroups;i++) { - if (xkb->names->groups[i]!=None) { - fprintf(file," name[group%d]=\"%s\";\n",i+1, - XkbAtomText(xkb->names->groups[i],XkbXKBFile)); - tmp++; - } - } - if (tmp>0) - fprintf(file,"\n"); - srv= xkb->server; - for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) { - Bool simple; - if ((int)XkbKeyNumSyms(xkb,i)<1) - continue; - if (XkbFindKeycodeByName(xkb,xkb->names->keys[i].name,TRUE)!=i) - continue; - simple= TRUE; - fprintf(file," key %6s {", - XkbKeyNameText(xkb->names->keys[i].name,XkbXKBFile)); - if (srv->explicit) { - if (((srv->explicit[i]&XkbExplicitKeyTypesMask)!=0)|| - (showImplicit)) { - int typeNdx,g; - Bool multi; - const char * comment=" "; - - if ((srv->explicit[i]&XkbExplicitKeyTypesMask)==0) - comment= "//"; - multi= FALSE; - typeNdx= XkbKeyKeyTypeIndex(xkb,i,0); - for (g=1;(g<XkbKeyNumGroups(xkb,i))&&(!multi);g++) { - if (XkbKeyKeyTypeIndex(xkb,i,g)!=typeNdx) - multi= TRUE; - } - if (multi) { - for (g=0;g<XkbKeyNumGroups(xkb,i);g++) { - typeNdx= XkbKeyKeyTypeIndex(xkb,i,g); - if (srv->explicit[i]&(1<<g)) { - fprintf(file,"\n%s type[group%d]= \"%s\",", - comment,g+1, - XkbAtomText(map->types[typeNdx].name, - XkbXKBFile)); - } - else if (showImplicit) { - fprintf(file,"\n// type[group%d]= \"%s\",",g+1, - XkbAtomText(map->types[typeNdx].name, - XkbXKBFile)); - } - } - } - else { - fprintf(file,"\n%s type= \"%s\",",comment, - XkbAtomText(map->types[typeNdx].name, - XkbXKBFile)); - } - simple= FALSE; - } - if (((srv->explicit[i]&XkbExplicitAutoRepeatMask)!=0)&& - (xkb->ctrls!=NULL)) { - if (xkb->ctrls->per_key_repeat[i/8]&(1<<(i%8))) - fprintf(file,"\n repeat= Yes,"); - else fprintf(file,"\n repeat= No,"); - simple= FALSE; - } - if ((xkb->server!=NULL)&&(xkb->server->vmodmap!=NULL)&& - (xkb->server->vmodmap[i]!=0)) { - if ((srv->explicit[i]&XkbExplicitVModMapMask)!=0) { - fprintf(file,"\n virtualMods= %s,", - XkbVModMaskText(xkb,0, - xkb->server->vmodmap[i], - XkbXKBFile)); - } - else if (showImplicit) { - fprintf(file,"\n// virtualMods= %s,", - XkbVModMaskText(xkb,0, - xkb->server->vmodmap[i], - XkbXKBFile)); - } - } - } - switch (XkbOutOfRangeGroupAction(XkbKeyGroupInfo(xkb,i))) { - case XkbClampIntoRange: - fprintf(file,"\n groupsClamp,"); - break; - case XkbRedirectIntoRange: - fprintf(file,"\n groupsRedirect= Group%d,", - XkbOutOfRangeGroupNumber(XkbKeyGroupInfo(xkb,i))+1); - break; - } - if (srv->behaviors!=NULL) { - unsigned type; - type= srv->behaviors[i].type&XkbKB_OpMask; - - if (type!=XkbKB_Default) { - simple= FALSE; - fprintf(file,"\n %s,", - XkbBehaviorText(xkb,&srv->behaviors[i],XkbXKBFile)); - } - } - if ((srv->explicit==NULL) || showImplicit || - ((srv->explicit[i]&XkbExplicitInterpretMask)!=0)) - showActions= XkbKeyHasActions(xkb,i); - else showActions= FALSE; - - if (((unsigned)XkbKeyNumGroups(xkb,i)>1)||showActions) - simple= FALSE; - if (simple) { - KeySym *syms; - unsigned s; - - syms= XkbKeySymsPtr(xkb,i); - fprintf(file," [ "); - for (s=0;s<XkbKeyGroupWidth(xkb,i,XkbGroup1Index);s++) { - if (s!=0) - fprintf(file,", "); - fprintf(file,"%15s",XkbKeysymText(*syms++,XkbXKBFile)); - } - fprintf(file," ] };\n"); - } - else { - unsigned g,s; - KeySym *syms; - XkbAction *acts; - syms= XkbKeySymsPtr(xkb,i); - acts= XkbKeyActionsPtr(xkb,i); - for (g=0;g<XkbKeyNumGroups(xkb,i);g++) { - if (g!=0) - fprintf(file,","); - fprintf(file,"\n symbols[Group%d]= [ ",g+1); - for (s=0;s<XkbKeyGroupWidth(xkb,i,g);s++) { - if (s!=0) - fprintf(file,", "); - fprintf(file,"%15s",XkbKeysymText(syms[s],XkbXKBFile)); - } - fprintf(file," ]"); - syms+= XkbKeyGroupsWidth(xkb,i); - if (showActions) { - fprintf(file,",\n actions[Group%d]= [ ",g+1); - for (s=0;s<XkbKeyGroupWidth(xkb,i,g);s++) { - if (s!=0) - fprintf(file,", "); - WriteXKBAction(file,xkb,(XkbAnyAction *)&acts[s]); - } - fprintf(file," ]"); - acts+= XkbKeyGroupsWidth(xkb,i); - } - } - fprintf(file,"\n };\n"); - } + _XkbLibError(_XkbErrMissingSymbols, "XkbWriteXKBSymbols", 0); + return FALSE; + } + + map = xkb->map; + if ((!map) || (!map->syms) || (!map->key_sym_map)) { + _XkbLibError(_XkbErrMissingSymbols, "XkbWriteXKBSymbols", 0); + return FALSE; + } + if ((!xkb->names) || (!xkb->names->keys)) { + _XkbLibError(_XkbErrMissingNames, "XkbWriteXKBSymbols", 0); + return FALSE; + } + if ((xkb->names == NULL) || (xkb->names->symbols == None)) + fprintf(file, "xkb_symbols {\n\n"); + else + fprintf(file, "xkb_symbols \"%s\" {\n\n", + XkbAtomText(xkb->names->symbols, XkbXKBFile)); + for (tmp = i = 0; i < XkbNumKbdGroups; i++) { + if (xkb->names->groups[i] != None) { + fprintf(file, " name[group%d]=\"%s\";\n", i + 1, + XkbAtomText(xkb->names->groups[i], XkbXKBFile)); + tmp++; + } + } + if (tmp > 0) + fprintf(file, "\n"); + srv = xkb->server; + for (i = xkb->min_key_code; i <= xkb->max_key_code; i++) { + Bool simple; + + if ((int) XkbKeyNumSyms(xkb, i) < 1) + continue; + if (XkbFindKeycodeByName(xkb, xkb->names->keys[i].name, TRUE) != i) + continue; + simple = TRUE; + fprintf(file, " key %6s {", + XkbKeyNameText(xkb->names->keys[i].name, XkbXKBFile)); + if (srv->explicit) { + if (((srv->explicit[i] & XkbExplicitKeyTypesMask) != 0) || + (showImplicit)) { + int typeNdx, g; + Bool multi; + const char *comment = " "; + + if ((srv->explicit[i] & XkbExplicitKeyTypesMask) == 0) + comment = "//"; + multi = FALSE; + typeNdx = XkbKeyKeyTypeIndex(xkb, i, 0); + for (g = 1; (g < XkbKeyNumGroups(xkb, i)) && (!multi); g++) { + if (XkbKeyKeyTypeIndex(xkb, i, g) != typeNdx) + multi = TRUE; + } + if (multi) { + for (g = 0; g < XkbKeyNumGroups(xkb, i); g++) { + typeNdx = XkbKeyKeyTypeIndex(xkb, i, g); + if (srv->explicit[i] & (1 << g)) { + fprintf(file, "\n%s type[group%d]= \"%s\",", + comment, g + 1, + XkbAtomText(map->types[typeNdx].name, + XkbXKBFile)); + } + else if (showImplicit) { + fprintf(file, "\n// type[group%d]= \"%s\",", + g + 1, XkbAtomText(map->types[typeNdx].name, + XkbXKBFile)); + } + } + } + else { + fprintf(file, "\n%s type= \"%s\",", comment, + XkbAtomText(map->types[typeNdx].name, XkbXKBFile)); + } + simple = FALSE; + } + if (((srv->explicit[i] & XkbExplicitAutoRepeatMask) != 0) && + (xkb->ctrls != NULL)) { + if (xkb->ctrls->per_key_repeat[i / 8] & (1 << (i % 8))) + fprintf(file, "\n repeat= Yes,"); + else + fprintf(file, "\n repeat= No,"); + simple = FALSE; + } + if ((xkb->server != NULL) && (xkb->server->vmodmap != NULL) && + (xkb->server->vmodmap[i] != 0)) { + if ((srv->explicit[i] & XkbExplicitVModMapMask) != 0) { + fprintf(file, "\n virtualMods= %s,", + XkbVModMaskText(xkb, 0, + xkb->server->vmodmap[i], + XkbXKBFile)); + } + else if (showImplicit) { + fprintf(file, "\n// virtualMods= %s,", + XkbVModMaskText(xkb, 0, + xkb->server->vmodmap[i], + XkbXKBFile)); + } + } + } + switch (XkbOutOfRangeGroupAction(XkbKeyGroupInfo(xkb, i))) { + case XkbClampIntoRange: + fprintf(file, "\n groupsClamp,"); + break; + case XkbRedirectIntoRange: + fprintf(file, "\n groupsRedirect= Group%d,", + XkbOutOfRangeGroupNumber(XkbKeyGroupInfo(xkb, i)) + 1); + break; + } + if (srv->behaviors != NULL) { + unsigned type; + + type = srv->behaviors[i].type & XkbKB_OpMask; + + if (type != XkbKB_Default) { + simple = FALSE; + fprintf(file, "\n %s,", + XkbBehaviorText(xkb, &srv->behaviors[i], XkbXKBFile)); + } + } + if ((srv->explicit == NULL) || showImplicit || + ((srv->explicit[i] & XkbExplicitInterpretMask) != 0)) + showActions = XkbKeyHasActions(xkb, i); + else + showActions = FALSE; + + if (((unsigned) XkbKeyNumGroups(xkb, i) > 1) || showActions) + simple = FALSE; + if (simple) { + KeySym *syms; + unsigned s; + + syms = XkbKeySymsPtr(xkb, i); + fprintf(file, " [ "); + for (s = 0; s < XkbKeyGroupWidth(xkb, i, XkbGroup1Index); s++) { + if (s != 0) + fprintf(file, ", "); + fprintf(file, "%15s", XkbKeysymText(*syms++, XkbXKBFile)); + } + fprintf(file, " ] };\n"); + } + else { + unsigned g, s; + KeySym *syms; + XkbAction *acts; + + syms = XkbKeySymsPtr(xkb, i); + acts = XkbKeyActionsPtr(xkb, i); + for (g = 0; g < XkbKeyNumGroups(xkb, i); g++) { + if (g != 0) + fprintf(file, ","); + fprintf(file, "\n symbols[Group%d]= [ ", g + 1); + for (s = 0; s < XkbKeyGroupWidth(xkb, i, g); s++) { + if (s != 0) + fprintf(file, ", "); + fprintf(file, "%15s", XkbKeysymText(syms[s], XkbXKBFile)); + } + fprintf(file, " ]"); + syms += XkbKeyGroupsWidth(xkb, i); + if (showActions) { + fprintf(file, ",\n actions[Group%d]= [ ", g + 1); + for (s = 0; s < XkbKeyGroupWidth(xkb, i, g); s++) { + if (s != 0) + fprintf(file, ", "); + WriteXKBAction(file, xkb, (XkbAnyAction *) & acts[s]); + } + fprintf(file, " ]"); + acts += XkbKeyGroupsWidth(xkb, i); + } + } + fprintf(file, "\n };\n"); + } } if (map && map->modmap) { - for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) { - if (map->modmap[i]!=0) { - register int n,bit; - for (bit=1,n=0;n<XkbNumModifiers;n++,bit<<=1) { - if (map->modmap[i]&bit) { - char buf[5]; - memcpy(buf,xkb->names->keys[i].name,4); - buf[4]= '\0'; - fprintf(file," modifier_map %s { <%s> };\n", - XkbModIndexText(n,XkbXKBFile),buf); - } - } - } - } + for (i = xkb->min_key_code; i <= xkb->max_key_code; i++) { + if (map->modmap[i] != 0) { + register int n, bit; + + for (bit = 1, n = 0; n < XkbNumModifiers; n++, bit <<= 1) { + if (map->modmap[i] & bit) { + char buf[5]; + + memcpy(buf, xkb->names->keys[i].name, 4); + buf[4] = '\0'; + fprintf(file, " modifier_map %s { <%s> };\n", + XkbModIndexText(n, XkbXKBFile), buf); + } + } + } + } } if (addOn) - (*addOn)(file,xkb,topLevel,showImplicit,XkmSymbolsIndex,priv); - fprintf(file,"};\n\n"); + (*addOn) (file, xkb, topLevel, showImplicit, XkmSymbolsIndex, priv); + fprintf(file, "};\n\n"); return TRUE; } static Bool -WriteXKBOutline( FILE * file, - XkbShapePtr shape, - XkbOutlinePtr outline, - int lastRadius, - int first, - int indent) +WriteXKBOutline(FILE * file, + XkbShapePtr shape, + XkbOutlinePtr outline, int lastRadius, int first, int indent) { -register int i; -XkbPointPtr pt; -char * iStr; - - fprintf(file,"%s",iStr= XkbIndentText(first)); - if (first!=indent) - iStr= XkbIndentText(indent); - if (outline->corner_radius!=lastRadius) { - fprintf(file,"corner= %s,", - XkbGeomFPText(outline->corner_radius,XkbMessage)); - if (shape!=NULL) { - fprintf(file,"\n%s",iStr); - } + register int i; + XkbPointPtr pt; + char *iStr; + + fprintf(file, "%s", iStr = XkbIndentText(first)); + if (first != indent) + iStr = XkbIndentText(indent); + if (outline->corner_radius != lastRadius) { + fprintf(file, "corner= %s,", + XkbGeomFPText(outline->corner_radius, XkbMessage)); + if (shape != NULL) { + fprintf(file, "\n%s", iStr); + } } if (shape) { - if (outline==shape->approx) - fprintf(file,"approx= "); - else if (outline==shape->primary) - fprintf(file,"primary= "); - } - fprintf(file,"{"); - for (pt=outline->points,i=0;i<outline->num_points;i++,pt++) { - if (i==0) fprintf(file," "); - else if ((i%4)==0) fprintf(file,",\n%s ",iStr); - else fprintf(file,", "); - fprintf(file,"[ %3s, %3s ]",XkbGeomFPText(pt->x,XkbXKBFile), - XkbGeomFPText(pt->y,XkbXKBFile)); - } - fprintf(file," }"); + if (outline == shape->approx) + fprintf(file, "approx= "); + else if (outline == shape->primary) + fprintf(file, "primary= "); + } + fprintf(file, "{"); + for (pt = outline->points, i = 0; i < outline->num_points; i++, pt++) { + if (i == 0) + fprintf(file, " "); + else if ((i % 4) == 0) + fprintf(file, ",\n%s ", iStr); + else + fprintf(file, ", "); + fprintf(file, "[ %3s, %3s ]", XkbGeomFPText(pt->x, XkbXKBFile), + XkbGeomFPText(pt->y, XkbXKBFile)); + } + fprintf(file, " }"); return TRUE; } static Bool -WriteXKBDoodad( FILE * file, - unsigned indent, - XkbGeometryPtr geom, - XkbDoodadPtr doodad) +WriteXKBDoodad(FILE * file, + unsigned indent, XkbGeometryPtr geom, XkbDoodadPtr doodad) { -register char * i_str; -XkbShapePtr shape; -XkbColorPtr color; - - i_str= XkbIndentText(indent); - fprintf(file,"%s%s \"%s\" {\n",i_str, - XkbDoodadTypeText(doodad->any.type,XkbMessage), - XkbAtomText(doodad->any.name,XkbMessage)); - fprintf(file,"%s top= %s;\n",i_str, - XkbGeomFPText(doodad->any.top,XkbXKBFile)); - fprintf(file,"%s left= %s;\n",i_str, - XkbGeomFPText(doodad->any.left,XkbXKBFile)); - fprintf(file,"%s priority= %d;\n",i_str,doodad->any.priority); + register char *i_str; + XkbShapePtr shape; + XkbColorPtr color; + + i_str = XkbIndentText(indent); + fprintf(file, "%s%s \"%s\" {\n", i_str, + XkbDoodadTypeText(doodad->any.type, XkbMessage), + XkbAtomText(doodad->any.name, XkbMessage)); + fprintf(file, "%s top= %s;\n", i_str, + XkbGeomFPText(doodad->any.top, XkbXKBFile)); + fprintf(file, "%s left= %s;\n", i_str, + XkbGeomFPText(doodad->any.left, XkbXKBFile)); + fprintf(file, "%s priority= %d;\n", i_str, doodad->any.priority); switch (doodad->any.type) { - case XkbOutlineDoodad: - case XkbSolidDoodad: - if (doodad->shape.angle!=0) { - fprintf(file,"%s angle= %s;\n",i_str, - XkbGeomFPText(doodad->shape.angle,XkbXKBFile)); - } - if (doodad->shape.color_ndx!=0) { - fprintf(file,"%s color= \"%s\";\n",i_str, - XkbShapeDoodadColor(geom,&doodad->shape)->spec); - } - shape= XkbShapeDoodadShape(geom,&doodad->shape); - fprintf(file,"%s shape= \"%s\";\n",i_str, - XkbAtomText(shape->name,XkbXKBFile)); - break; - case XkbTextDoodad: - if (doodad->text.angle!=0) { - fprintf(file,"%s angle= %s;\n",i_str, - XkbGeomFPText(doodad->text.angle,XkbXKBFile)); - } - if (doodad->text.width!=0) { - fprintf(file,"%s width= %s;\n",i_str, - XkbGeomFPText(doodad->text.width,XkbXKBFile)); - - } - if (doodad->text.height!=0) { - fprintf(file,"%s height= %s;\n",i_str, - XkbGeomFPText(doodad->text.height,XkbXKBFile)); - - } - if (doodad->text.color_ndx!=0) { - color= XkbTextDoodadColor(geom,&doodad->text); - fprintf(file,"%s color= \"%s\";\n",i_str, - XkbStringText(color->spec,XkbXKBFile)); - } - fprintf(file,"%s XFont= \"%s\";\n",i_str, - XkbStringText(doodad->text.font,XkbXKBFile)); - fprintf(file,"%s text= \"%s\";\n",i_str, - XkbStringText(doodad->text.text,XkbXKBFile)); - break; - case XkbIndicatorDoodad: - shape= XkbIndicatorDoodadShape(geom,&doodad->indicator); - color= XkbIndicatorDoodadOnColor(geom,&doodad->indicator); - fprintf(file,"%s onColor= \"%s\";\n",i_str, - XkbStringText(color->spec,XkbXKBFile)); - color= XkbIndicatorDoodadOffColor(geom,&doodad->indicator); - fprintf(file,"%s offColor= \"%s\";\n",i_str, - XkbStringText(color->spec,XkbXKBFile)); - fprintf(file,"%s shape= \"%s\";\n",i_str, - XkbAtomText(shape->name,XkbXKBFile)); - break; - case XkbLogoDoodad: - fprintf(file,"%s logoName= \"%s\";\n",i_str, - XkbStringText(doodad->logo.logo_name,XkbXKBFile)); - if (doodad->shape.angle!=0) { - fprintf(file,"%s angle= %s;\n",i_str, - XkbGeomFPText(doodad->logo.angle,XkbXKBFile)); - } - if (doodad->shape.color_ndx!=0) { - fprintf(file,"%s color= \"%s\";\n",i_str, - XkbLogoDoodadColor(geom,&doodad->logo)->spec); - } - shape= XkbLogoDoodadShape(geom,&doodad->logo); - fprintf(file,"%s shape= \"%s\";\n",i_str, - XkbAtomText(shape->name,XkbXKBFile)); - break; - } - fprintf(file,"%s};\n",i_str); + case XkbOutlineDoodad: + case XkbSolidDoodad: + if (doodad->shape.angle != 0) { + fprintf(file, "%s angle= %s;\n", i_str, + XkbGeomFPText(doodad->shape.angle, XkbXKBFile)); + } + if (doodad->shape.color_ndx != 0) { + fprintf(file, "%s color= \"%s\";\n", i_str, + XkbShapeDoodadColor(geom, &doodad->shape)->spec); + } + shape = XkbShapeDoodadShape(geom, &doodad->shape); + fprintf(file, "%s shape= \"%s\";\n", i_str, + XkbAtomText(shape->name, XkbXKBFile)); + break; + case XkbTextDoodad: + if (doodad->text.angle != 0) { + fprintf(file, "%s angle= %s;\n", i_str, + XkbGeomFPText(doodad->text.angle, XkbXKBFile)); + } + if (doodad->text.width != 0) { + fprintf(file, "%s width= %s;\n", i_str, + XkbGeomFPText(doodad->text.width, XkbXKBFile)); + + } + if (doodad->text.height != 0) { + fprintf(file, "%s height= %s;\n", i_str, + XkbGeomFPText(doodad->text.height, XkbXKBFile)); + + } + if (doodad->text.color_ndx != 0) { + color = XkbTextDoodadColor(geom, &doodad->text); + fprintf(file, "%s color= \"%s\";\n", i_str, + XkbStringText(color->spec, XkbXKBFile)); + } + fprintf(file, "%s XFont= \"%s\";\n", i_str, + XkbStringText(doodad->text.font, XkbXKBFile)); + fprintf(file, "%s text= \"%s\";\n", i_str, + XkbStringText(doodad->text.text, XkbXKBFile)); + break; + case XkbIndicatorDoodad: + shape = XkbIndicatorDoodadShape(geom, &doodad->indicator); + color = XkbIndicatorDoodadOnColor(geom, &doodad->indicator); + fprintf(file, "%s onColor= \"%s\";\n", i_str, + XkbStringText(color->spec, XkbXKBFile)); + color = XkbIndicatorDoodadOffColor(geom, &doodad->indicator); + fprintf(file, "%s offColor= \"%s\";\n", i_str, + XkbStringText(color->spec, XkbXKBFile)); + fprintf(file, "%s shape= \"%s\";\n", i_str, + XkbAtomText(shape->name, XkbXKBFile)); + break; + case XkbLogoDoodad: + fprintf(file, "%s logoName= \"%s\";\n", i_str, + XkbStringText(doodad->logo.logo_name, XkbXKBFile)); + if (doodad->shape.angle != 0) { + fprintf(file, "%s angle= %s;\n", i_str, + XkbGeomFPText(doodad->logo.angle, XkbXKBFile)); + } + if (doodad->shape.color_ndx != 0) { + fprintf(file, "%s color= \"%s\";\n", i_str, + XkbLogoDoodadColor(geom, &doodad->logo)->spec); + } + shape = XkbLogoDoodadShape(geom, &doodad->logo); + fprintf(file, "%s shape= \"%s\";\n", i_str, + XkbAtomText(shape->name, XkbXKBFile)); + break; + } + fprintf(file, "%s};\n", i_str); return TRUE; } -/*ARGSUSED*/ -static Bool -WriteXKBOverlay( FILE * file, - unsigned indent, - XkbGeometryPtr geom, - XkbOverlayPtr ol) + /*ARGSUSED*/ static Bool +WriteXKBOverlay(FILE * file, + unsigned indent, XkbGeometryPtr geom, XkbOverlayPtr ol) { -register char * i_str; -int r,k,nOut; -XkbOverlayRowPtr row; -XkbOverlayKeyPtr key; - - i_str= XkbIndentText(indent); - if (ol->name!=None) { - fprintf(file,"%soverlay \"%s\" {\n",i_str, - XkbAtomText(ol->name,XkbMessage)); - } - else fprintf(file,"%soverlay {\n",i_str); - for (nOut=r=0,row=ol->rows;r<ol->num_rows;r++,row++) { - for (k=0,key=row->keys;k<row->num_keys;k++,key++) { - char *over,*under; - over= XkbKeyNameText(key->over.name,XkbXKBFile); - under= XkbKeyNameText(key->under.name,XkbXKBFile); - if (nOut==0) - fprintf(file,"%s %6s=%6s",i_str,under,over); - else if ((nOut%4)==0) - fprintf(file,",\n%s %6s=%6s",i_str,under,over); - else fprintf(file,", %6s=%6s",under,over); - nOut++; - } - } - fprintf(file,"\n%s};\n",i_str); + register char *i_str; + int r, k, nOut; + XkbOverlayRowPtr row; + XkbOverlayKeyPtr key; + + i_str = XkbIndentText(indent); + if (ol->name != None) { + fprintf(file, "%soverlay \"%s\" {\n", i_str, + XkbAtomText(ol->name, XkbMessage)); + } + else + fprintf(file, "%soverlay {\n", i_str); + for (nOut = r = 0, row = ol->rows; r < ol->num_rows; r++, row++) { + for (k = 0, key = row->keys; k < row->num_keys; k++, key++) { + char *over, *under; + + over = XkbKeyNameText(key->over.name, XkbXKBFile); + under = XkbKeyNameText(key->under.name, XkbXKBFile); + if (nOut == 0) + fprintf(file, "%s %6s=%6s", i_str, under, over); + else if ((nOut % 4) == 0) + fprintf(file, ",\n%s %6s=%6s", i_str, under, over); + else + fprintf(file, ", %6s=%6s", under, over); + nOut++; + } + } + fprintf(file, "\n%s};\n", i_str); return TRUE; } static Bool -WriteXKBSection( FILE * file, - XkbSectionPtr s, - XkbGeometryPtr geom) +WriteXKBSection(FILE * file, XkbSectionPtr s, XkbGeometryPtr geom) { -register int i; -XkbRowPtr row; -int dfltKeyColor = 0; - - fprintf(file," section \"%s\" {\n", - XkbAtomText(s->name,XkbXKBFile)); - if (s->rows&&(s->rows->num_keys>0)) { - dfltKeyColor= s->rows->keys[0].color_ndx; - fprintf(file," key.color= \"%s\";\n", - XkbStringText(geom->colors[dfltKeyColor].spec,XkbXKBFile)); - } - fprintf(file," priority= %d;\n",s->priority); - fprintf(file," top= %s;\n",XkbGeomFPText(s->top,XkbXKBFile)); - fprintf(file," left= %s;\n",XkbGeomFPText(s->left,XkbXKBFile)); - fprintf(file," width= %s;\n",XkbGeomFPText(s->width,XkbXKBFile)); - fprintf(file," height= %s;\n", - XkbGeomFPText(s->height,XkbXKBFile)); - if (s->angle!=0) { - fprintf(file," angle= %s;\n", - XkbGeomFPText(s->angle,XkbXKBFile)); - } - for (i=0,row=s->rows;i<s->num_rows;i++,row++) { - fprintf(file," row {\n"); - fprintf(file," top= %s;\n", - XkbGeomFPText(row->top,XkbXKBFile)); - fprintf(file," left= %s;\n", - XkbGeomFPText(row->left,XkbXKBFile)); - if (row->vertical) - fprintf(file," vertical;\n"); - if (row->num_keys>0) { - register int k; - register XkbKeyPtr key; - int forceNL=0; - int nThisLine= 0; - fprintf(file," keys {\n"); - for (k=0,key=row->keys;k<row->num_keys;k++,key++) { - XkbShapePtr shape; - if (key->color_ndx!=dfltKeyColor) - forceNL= 1; - if (k==0) { - fprintf(file," "); - nThisLine= 0; - } - else if (((nThisLine%2)==1)||(forceNL)) { - fprintf(file,",\n "); - forceNL= nThisLine= 0; - } - else { - fprintf(file,", "); - nThisLine++; - } - shape= XkbKeyShape(geom,key); - fprintf(file,"{ %6s, \"%s\", %3s", - XkbKeyNameText(key->name.name,XkbXKBFile), - XkbAtomText(shape->name,XkbXKBFile), - XkbGeomFPText(key->gap,XkbXKBFile)); - if (key->color_ndx!=dfltKeyColor) { - fprintf(file,", color=\"%s\"",XkbKeyColor(geom,key)->spec); - forceNL= 1; - } - fprintf(file," }"); - } - fprintf(file,"\n };\n"); - } - fprintf(file," };\n"); - } - if (s->doodads!=NULL) { - XkbDoodadPtr doodad; - for (i=0,doodad=s->doodads;i<s->num_doodads;i++,doodad++) { - WriteXKBDoodad(file,8,geom,doodad); - } - } - if (s->overlays!=NULL) { - XkbOverlayPtr ol; - for (i=0,ol=s->overlays;i<s->num_overlays;i++,ol++) { - WriteXKBOverlay(file,8,geom,ol); - } - } - fprintf(file," }; // End of \"%s\" section\n\n", - XkbAtomText(s->name,XkbXKBFile)); + register int i; + XkbRowPtr row; + int dfltKeyColor = 0; + + fprintf(file, " section \"%s\" {\n", XkbAtomText(s->name, XkbXKBFile)); + if (s->rows && (s->rows->num_keys > 0)) { + dfltKeyColor = s->rows->keys[0].color_ndx; + fprintf(file, " key.color= \"%s\";\n", + XkbStringText(geom->colors[dfltKeyColor].spec, XkbXKBFile)); + } + fprintf(file, " priority= %d;\n", s->priority); + fprintf(file, " top= %s;\n", + XkbGeomFPText(s->top, XkbXKBFile)); + fprintf(file, " left= %s;\n", + XkbGeomFPText(s->left, XkbXKBFile)); + fprintf(file, " width= %s;\n", + XkbGeomFPText(s->width, XkbXKBFile)); + fprintf(file, " height= %s;\n", + XkbGeomFPText(s->height, XkbXKBFile)); + if (s->angle != 0) { + fprintf(file, " angle= %s;\n", + XkbGeomFPText(s->angle, XkbXKBFile)); + } + for (i = 0, row = s->rows; i < s->num_rows; i++, row++) { + fprintf(file, " row {\n"); + fprintf(file, " top= %s;\n", + XkbGeomFPText(row->top, XkbXKBFile)); + fprintf(file, " left= %s;\n", + XkbGeomFPText(row->left, XkbXKBFile)); + if (row->vertical) + fprintf(file, " vertical;\n"); + if (row->num_keys > 0) { + register int k; + register XkbKeyPtr key; + int forceNL = 0; + int nThisLine = 0; + + fprintf(file, " keys {\n"); + for (k = 0, key = row->keys; k < row->num_keys; k++, key++) { + XkbShapePtr shape; + + if (key->color_ndx != dfltKeyColor) + forceNL = 1; + if (k == 0) { + fprintf(file, " "); + nThisLine = 0; + } + else if (((nThisLine % 2) == 1) || (forceNL)) { + fprintf(file, ",\n "); + forceNL = nThisLine = 0; + } + else { + fprintf(file, ", "); + nThisLine++; + } + shape = XkbKeyShape(geom, key); + fprintf(file, "{ %6s, \"%s\", %3s", + XkbKeyNameText(key->name.name, XkbXKBFile), + XkbAtomText(shape->name, XkbXKBFile), + XkbGeomFPText(key->gap, XkbXKBFile)); + if (key->color_ndx != dfltKeyColor) { + fprintf(file, ", color=\"%s\"", + XkbKeyColor(geom, key)->spec); + forceNL = 1; + } + fprintf(file, " }"); + } + fprintf(file, "\n };\n"); + } + fprintf(file, " };\n"); + } + if (s->doodads != NULL) { + XkbDoodadPtr doodad; + + for (i = 0, doodad = s->doodads; i < s->num_doodads; i++, doodad++) { + WriteXKBDoodad(file, 8, geom, doodad); + } + } + if (s->overlays != NULL) { + XkbOverlayPtr ol; + + for (i = 0, ol = s->overlays; i < s->num_overlays; i++, ol++) { + WriteXKBOverlay(file, 8, geom, ol); + } + } + fprintf(file, " }; // End of \"%s\" section\n\n", + XkbAtomText(s->name, XkbXKBFile)); return TRUE; } Bool -XkbWriteXKBGeometry( FILE * file, - XkbDescPtr xkb, - Bool topLevel, - Bool showImplicit, - XkbFileAddOnFunc addOn, - void * priv) +XkbWriteXKBGeometry(FILE * file, + XkbDescPtr xkb, + Bool topLevel, + Bool showImplicit, XkbFileAddOnFunc addOn, void *priv) { -register unsigned i,n; -XkbGeometryPtr geom; - - if ((!xkb)||(!xkb->geom)) { - _XkbLibError(_XkbErrMissingGeometry,"XkbWriteXKBGeometry",0); - return FALSE; - } - geom= xkb->geom; - if (geom->name==None) - fprintf(file,"xkb_geometry {\n\n"); - else fprintf(file,"xkb_geometry \"%s\" {\n\n", - XkbAtomText(geom->name,XkbXKBFile)); - fprintf(file," width= %s;\n", - XkbGeomFPText(geom->width_mm,XkbXKBFile)); - fprintf(file," height= %s;\n\n", - XkbGeomFPText(geom->height_mm,XkbXKBFile)); - - if (geom->key_aliases!=NULL) { - XkbKeyAliasPtr pAl; - pAl= geom->key_aliases; - for (i=0;i<geom->num_key_aliases;i++,pAl++) { - fprintf(file," alias %6s = %6s;\n", - XkbKeyNameText(pAl->alias,XkbXKBFile), - XkbKeyNameText(pAl->real,XkbXKBFile)); - } - fprintf(file,"\n"); - } - - if (geom->base_color!=NULL) - fprintf(file," baseColor= \"%s\";\n", - XkbStringText(geom->base_color->spec,XkbXKBFile)); - if (geom->label_color!=NULL) - fprintf(file," labelColor= \"%s\";\n", - XkbStringText(geom->label_color->spec,XkbXKBFile)); - if (geom->label_font!=NULL) - fprintf(file," xfont= \"%s\";\n", - XkbStringText(geom->label_font,XkbXKBFile)); - if ((geom->num_colors>0)&&(showImplicit)) { - XkbColorPtr color; - for (color=geom->colors,i=0;i<geom->num_colors;i++,color++) { - fprintf(file,"// color[%d]= \"%s\"\n",i, - XkbStringText(color->spec,XkbXKBFile)); - } - fprintf(file,"\n"); - } - if (geom->num_properties>0) { - XkbPropertyPtr prop; - for (prop=geom->properties,i=0;i<geom->num_properties;i++,prop++) { - fprintf(file," %s= \"%s\";\n",prop->name, - XkbStringText(prop->value,XkbXKBFile)); - } - fprintf(file,"\n"); - } - if (geom->num_shapes>0) { - XkbShapePtr shape; - XkbOutlinePtr outline; - int lastR; - for (shape=geom->shapes,i=0;i<geom->num_shapes;i++,shape++) { - lastR=0; - fprintf(file," shape \"%s\" {", - XkbAtomText(shape->name,XkbXKBFile)); - outline= shape->outlines; - if (shape->num_outlines>1) { - for (n=0;n<shape->num_outlines;n++,outline++) { - if (n==0) fprintf(file,"\n"); - else fprintf(file,",\n"); - WriteXKBOutline(file,shape,outline,lastR,8,8); - lastR= outline->corner_radius; - } - fprintf(file,"\n };\n"); - } - else { - WriteXKBOutline(file,NULL,outline,lastR,1,8); - fprintf(file," };\n"); - } - } - } - if (geom->num_sections>0) { - XkbSectionPtr section; - for (section=geom->sections,i=0;i<geom->num_sections;i++,section++){ - WriteXKBSection(file,section,geom); - } - } - if (geom->num_doodads>0) { - XkbDoodadPtr doodad; - for (i=0,doodad=geom->doodads;i<geom->num_doodads;i++,doodad++) { - WriteXKBDoodad(file,4,geom,doodad); - } + register unsigned i, n; + XkbGeometryPtr geom; + + if ((!xkb) || (!xkb->geom)) { + _XkbLibError(_XkbErrMissingGeometry, "XkbWriteXKBGeometry", 0); + return FALSE; + } + geom = xkb->geom; + if (geom->name == None) + fprintf(file, "xkb_geometry {\n\n"); + else + fprintf(file, "xkb_geometry \"%s\" {\n\n", + XkbAtomText(geom->name, XkbXKBFile)); + fprintf(file, " width= %s;\n", + XkbGeomFPText(geom->width_mm, XkbXKBFile)); + fprintf(file, " height= %s;\n\n", + XkbGeomFPText(geom->height_mm, XkbXKBFile)); + + if (geom->key_aliases != NULL) { + XkbKeyAliasPtr pAl; + + pAl = geom->key_aliases; + for (i = 0; i < geom->num_key_aliases; i++, pAl++) { + fprintf(file, " alias %6s = %6s;\n", + XkbKeyNameText(pAl->alias, XkbXKBFile), + XkbKeyNameText(pAl->real, XkbXKBFile)); + } + fprintf(file, "\n"); + } + + if (geom->base_color != NULL) + fprintf(file, " baseColor= \"%s\";\n", + XkbStringText(geom->base_color->spec, XkbXKBFile)); + if (geom->label_color != NULL) + fprintf(file, " labelColor= \"%s\";\n", + XkbStringText(geom->label_color->spec, XkbXKBFile)); + if (geom->label_font != NULL) + fprintf(file, " xfont= \"%s\";\n", + XkbStringText(geom->label_font, XkbXKBFile)); + if ((geom->num_colors > 0) && (showImplicit)) { + XkbColorPtr color; + + for (color = geom->colors, i = 0; i < geom->num_colors; i++, color++) { + fprintf(file, "// color[%d]= \"%s\"\n", i, + XkbStringText(color->spec, XkbXKBFile)); + } + fprintf(file, "\n"); + } + if (geom->num_properties > 0) { + XkbPropertyPtr prop; + + for (prop = geom->properties, i = 0; i < geom->num_properties; + i++, prop++) { + fprintf(file, " %s= \"%s\";\n", prop->name, + XkbStringText(prop->value, XkbXKBFile)); + } + fprintf(file, "\n"); + } + if (geom->num_shapes > 0) { + XkbShapePtr shape; + XkbOutlinePtr outline; + int lastR; + + for (shape = geom->shapes, i = 0; i < geom->num_shapes; i++, shape++) { + lastR = 0; + fprintf(file, " shape \"%s\" {", + XkbAtomText(shape->name, XkbXKBFile)); + outline = shape->outlines; + if (shape->num_outlines > 1) { + for (n = 0; n < shape->num_outlines; n++, outline++) { + if (n == 0) + fprintf(file, "\n"); + else + fprintf(file, ",\n"); + WriteXKBOutline(file, shape, outline, lastR, 8, 8); + lastR = outline->corner_radius; + } + fprintf(file, "\n };\n"); + } + else { + WriteXKBOutline(file, NULL, outline, lastR, 1, 8); + fprintf(file, " };\n"); + } + } + } + if (geom->num_sections > 0) { + XkbSectionPtr section; + + for (section = geom->sections, i = 0; i < geom->num_sections; + i++, section++) { + WriteXKBSection(file, section, geom); + } + } + if (geom->num_doodads > 0) { + XkbDoodadPtr doodad; + + for (i = 0, doodad = geom->doodads; i < geom->num_doodads; + i++, doodad++) { + WriteXKBDoodad(file, 4, geom, doodad); + } } if (addOn) - (*addOn)(file,xkb,topLevel,showImplicit,XkmGeometryIndex,priv); - fprintf(file,"};\n\n"); + (*addOn) (file, xkb, topLevel, showImplicit, XkmGeometryIndex, priv); + fprintf(file, "};\n\n"); return TRUE; } |