summaryrefslogtreecommitdiff
path: root/src/xkmout.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/xkmout.c')
-rw-r--r--src/xkmout.c2161
1 files changed, 1106 insertions, 1055 deletions
diff --git a/src/xkmout.c b/src/xkmout.c
index 1e43157..8f54e14 100644
--- a/src/xkmout.c
+++ b/src/xkmout.c
@@ -39,13 +39,13 @@
#include "XKBfileInt.h"
typedef struct _XkmInfo {
- unsigned short bound_vmods;
- unsigned short named_vmods;
- unsigned char num_bound;
- unsigned char group_compat;
- unsigned short num_group_compat;
- unsigned short num_leds;
- int total_vmodmaps;
+ unsigned short bound_vmods;
+ unsigned short named_vmods;
+ unsigned char num_bound;
+ unsigned char group_compat;
+ unsigned short num_group_compat;
+ unsigned short num_leds;
+ int total_vmodmaps;
} XkmInfo;
/***====================================================================***/
@@ -53,67 +53,68 @@ typedef struct _XkmInfo {
#define xkmPutCARD8(f,v) (putc(v,f),1)
static int
-xkmPutCARD16(FILE *file,unsigned val)
+xkmPutCARD16(FILE *file, unsigned val)
{
-CARD16 tmp= val;
+ CARD16 tmp = val;
- fwrite(&tmp,2,1,file);
+ fwrite(&tmp, 2, 1, file);
return 2;
}
static int
-xkmPutCARD32(FILE *file,unsigned long val)
+xkmPutCARD32(FILE *file, unsigned long val)
{
-CARD32 tmp= val;
+ CARD32 tmp = val;
- fwrite(&tmp,4,1,file);
+ fwrite(&tmp, 4, 1, file);
return 4;
}
static int
-xkmPutPadding(FILE *file,unsigned pad)
+xkmPutPadding(FILE *file, unsigned pad)
{
-int i;
- for (i=0;i<pad;i++) {
- putc('\0',file);
+ int i;
+
+ for (i = 0; i < pad; i++) {
+ putc('\0', file);
}
return pad;
}
static int
-xkmPutCountedBytes(FILE *file,char *ptr,unsigned count)
+xkmPutCountedBytes(FILE *file, char *ptr, unsigned count)
{
-register int nOut;
-register unsigned pad;
-
- if (count==0)
- return xkmPutCARD32(file,(unsigned long)0);
-
- xkmPutCARD16(file,count);
- nOut= fwrite(ptr,1,count,file);
- if (nOut<0)
- return 2;
- nOut= count+2;
- pad= XkbPaddedSize(nOut)-nOut;
+ register int nOut;
+ register unsigned pad;
+
+ if (count == 0)
+ return xkmPutCARD32(file, (unsigned long) 0);
+
+ xkmPutCARD16(file, count);
+ nOut = fwrite(ptr, 1, count, file);
+ if (nOut < 0)
+ return 2;
+ nOut = count + 2;
+ pad = XkbPaddedSize(nOut) - nOut;
if (pad)
- xkmPutPadding(file,pad);
- return nOut+pad;
+ xkmPutPadding(file, pad);
+ return nOut + pad;
}
static unsigned
xkmSizeCountedString(char *str)
{
- if (str==NULL)
- return 4;
- return XkbPaddedSize(strlen(str)+2);
+ if (str == NULL)
+ return 4;
+ return XkbPaddedSize(strlen(str) + 2);
}
static int
-xkmPutCountedString(FILE *file,char *str)
+xkmPutCountedString(FILE *file, char *str)
{
- if (str==NULL)
- return xkmPutCARD32(file,(unsigned long)0);
- return xkmPutCountedBytes(file,str,strlen(str));
+ if (str == NULL)
+ return xkmPutCARD32(file, (unsigned long) 0);
+ return xkmPutCountedBytes(file, str, strlen(str));
}
#define xkmSizeCountedAtomString(d,a) \
@@ -125,72 +126,72 @@ xkmPutCountedString(FILE *file,char *str)
/***====================================================================***/
static unsigned
-SizeXKMVirtualMods( XkbFileInfo * result,
- XkmInfo * info,
- xkmSectionInfo * toc,
- int * offset_inout)
+SizeXKMVirtualMods(XkbFileInfo *result, XkmInfo *info,
+ xkmSectionInfo *toc, int *offset_inout)
{
-Display * dpy;
-XkbDescPtr xkb;
-unsigned nBound,bound;
-unsigned nNamed,named,szNames;
-register unsigned i,bit;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- if ((!xkb)||(!xkb->names)||(!xkb->server)) {
- _XkbLibError(_XkbErrMissingVMods,"SizeXKMVirtualMods",0);
- return 0;
+ Display *dpy;
+ XkbDescPtr xkb;
+ unsigned nBound, bound;
+ unsigned nNamed, named, szNames;
+ register unsigned i, bit;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ if ((!xkb) || (!xkb->names) || (!xkb->server)) {
+ _XkbLibError(_XkbErrMissingVMods, "SizeXKMVirtualMods", 0);
+ return 0;
}
- bound=named=0;
- for (i=nBound=nNamed=szNames=0,bit=1;i<XkbNumVirtualMods;i++,bit<<=1) {
- if (xkb->server->vmods[i]!=XkbNoModifierMask) {
- bound|= bit;
- nBound++;
- }
- if (xkb->names->vmods[i]!=None) {
- named|= bit;
- szNames+= xkmSizeCountedAtomString(dpy,xkb->names->vmods[i]);
- nNamed++;
- }
+ bound = named = 0;
+ for (i = nBound = nNamed = szNames = 0, bit = 1; i < XkbNumVirtualMods;
+ i++, bit <<= 1) {
+ if (xkb->server->vmods[i] != XkbNoModifierMask) {
+ bound |= bit;
+ nBound++;
+ }
+ if (xkb->names->vmods[i] != None) {
+ named |= bit;
+ szNames += xkmSizeCountedAtomString(dpy, xkb->names->vmods[i]);
+ nNamed++;
+ }
}
- info->num_bound= nBound;
- info->bound_vmods= bound;
- info->named_vmods= named;
- if ((nBound==0)&&(nNamed==0))
- return 0;
- toc->type= XkmVirtualModsIndex;
- toc->format= MSBFirst;
- toc->size= 4+XkbPaddedSize(nBound)+szNames+SIZEOF(xkmSectionInfo);
- toc->offset= *offset_inout;
- (*offset_inout)+= toc->size;
+ info->num_bound = nBound;
+ info->bound_vmods = bound;
+ info->named_vmods = named;
+ if ((nBound == 0) && (nNamed == 0))
+ return 0;
+ toc->type = XkmVirtualModsIndex;
+ toc->format = MSBFirst;
+ toc->size = 4 + XkbPaddedSize(nBound) + szNames + SIZEOF(xkmSectionInfo);
+ toc->offset = *offset_inout;
+ (*offset_inout) += toc->size;
return 1;
}
static unsigned
-WriteXKMVirtualMods(FILE *file,XkbFileInfo *result,XkmInfo *info)
+WriteXKMVirtualMods(FILE *file, XkbFileInfo *result, XkmInfo *info)
{
-register unsigned int i,bit;
-XkbDescPtr xkb;
-Display * dpy;
-unsigned size= 0;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- size+= xkmPutCARD16(file,info->bound_vmods);
- size+= xkmPutCARD16(file,info->named_vmods);
- for (i=0,bit=1;i<XkbNumVirtualMods;i++,bit<<=1) {
- if (info->bound_vmods&bit)
- size+= xkmPutCARD8(file,xkb->server->vmods[i]);
+ register unsigned int i, bit;
+ XkbDescPtr xkb;
+ Display *dpy;
+ unsigned size = 0;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ size += xkmPutCARD16(file, info->bound_vmods);
+ size += xkmPutCARD16(file, info->named_vmods);
+ for (i = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1) {
+ if (info->bound_vmods & bit)
+ size += xkmPutCARD8(file, xkb->server->vmods[i]);
}
- if ((i= XkbPaddedSize(info->num_bound)-info->num_bound)>0)
- size+= xkmPutPadding(file,i);
- for (i=0,bit=1;i<XkbNumVirtualMods;i++,bit<<=1) {
- if (info->named_vmods&bit) {
- register char *name;
- name= XkbAtomGetString(dpy,xkb->names->vmods[i]);
- size+= xkmPutCountedString(file,name);
- }
+ if ((i = XkbPaddedSize(info->num_bound) - info->num_bound) > 0)
+ size += xkmPutPadding(file, i);
+ for (i = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1) {
+ if (info->named_vmods & bit) {
+ register char *name;
+
+ name = XkbAtomGetString(dpy, xkb->names->vmods[i]);
+ size += xkmPutCountedString(file, name);
+ }
}
return size;
}
@@ -198,62 +199,62 @@ unsigned size= 0;
/***====================================================================***/
static unsigned
-SizeXKMKeycodes(XkbFileInfo *result,xkmSectionInfo *toc,int *offset_inout)
+SizeXKMKeycodes(XkbFileInfo *result, xkmSectionInfo *toc, int *offset_inout)
{
-XkbDescPtr xkb;
-Atom kcName;
-int size=0;
-Display * dpy;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- if ((!xkb)||(!xkb->names)||(!xkb->names->keys)) {
- _XkbLibError(_XkbErrMissingNames,"SizeXKMKeycodes",0);
- return 0;
+ XkbDescPtr xkb;
+ Atom kcName;
+ int size = 0;
+ Display *dpy;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ if ((!xkb) || (!xkb->names) || (!xkb->names->keys)) {
+ _XkbLibError(_XkbErrMissingNames, "SizeXKMKeycodes", 0);
+ return 0;
}
- kcName= xkb->names->keycodes;
- size+= 4; /* min and max keycode */
- size+= xkmSizeCountedAtomString(dpy,kcName);
- size+= XkbNumKeys(xkb)*sizeof(XkbKeyNameRec);
- if (xkb->names->num_key_aliases>0) {
- if (xkb->names->key_aliases!=NULL)
- size+= xkb->names->num_key_aliases*sizeof(XkbKeyAliasRec);
- else xkb->names->num_key_aliases= 0;
+ kcName = xkb->names->keycodes;
+ size += 4; /* min and max keycode */
+ size += xkmSizeCountedAtomString(dpy, kcName);
+ size += XkbNumKeys(xkb) * sizeof(XkbKeyNameRec);
+ if (xkb->names->num_key_aliases > 0) {
+ if (xkb->names->key_aliases != NULL)
+ size += xkb->names->num_key_aliases * sizeof(XkbKeyAliasRec);
+ else
+ xkb->names->num_key_aliases = 0;
}
- toc->type= XkmKeyNamesIndex;
- toc->format= MSBFirst;
- toc->size= size+SIZEOF(xkmSectionInfo);
- toc->offset= (*offset_inout);
- (*offset_inout)+= toc->size;
+ toc->type = XkmKeyNamesIndex;
+ toc->format = MSBFirst;
+ toc->size = size + SIZEOF(xkmSectionInfo);
+ toc->offset = (*offset_inout);
+ (*offset_inout) += toc->size;
return 1;
}
static unsigned
-WriteXKMKeycodes(FILE *file,XkbFileInfo *result)
+WriteXKMKeycodes(FILE *file, XkbFileInfo *result)
{
-XkbDescPtr xkb;
-Atom kcName;
-char *start;
-Display * dpy;
-unsigned tmp,size= 0;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- kcName= xkb->names->keycodes;
- start= xkb->names->keys[xkb->min_key_code].name;
-
- size+= xkmPutCountedString(file,XkbAtomGetString(dpy,kcName));
- size+= xkmPutCARD8(file,xkb->min_key_code);
- size+= xkmPutCARD8(file,xkb->max_key_code);
- size+= xkmPutCARD8(file,xkb->names->num_key_aliases);
- size+= xkmPutPadding(file,1);
- tmp= fwrite(start,sizeof(XkbKeyNameRec),XkbNumKeys(xkb),file);
- size+= tmp*sizeof(XkbKeyNameRec);
- if (xkb->names->num_key_aliases>0) {
- tmp= fwrite((char *)xkb->names->key_aliases,
- sizeof(XkbKeyAliasRec),xkb->names->num_key_aliases,
- file);
- size+= tmp*sizeof(XkbKeyAliasRec);
+ XkbDescPtr xkb;
+ Atom kcName;
+ char *start;
+ Display *dpy;
+ unsigned tmp, size = 0;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ kcName = xkb->names->keycodes;
+ start = xkb->names->keys[xkb->min_key_code].name;
+
+ size += xkmPutCountedString(file, XkbAtomGetString(dpy, kcName));
+ size += xkmPutCARD8(file, xkb->min_key_code);
+ size += xkmPutCARD8(file, xkb->max_key_code);
+ size += xkmPutCARD8(file, xkb->names->num_key_aliases);
+ size += xkmPutPadding(file, 1);
+ tmp = fwrite(start, sizeof(XkbKeyNameRec), XkbNumKeys(xkb), file);
+ size += tmp * sizeof(XkbKeyNameRec);
+ if (xkb->names->num_key_aliases > 0) {
+ tmp = fwrite((char *) xkb->names->key_aliases,
+ sizeof(XkbKeyAliasRec), xkb->names->num_key_aliases, file);
+ size += tmp * sizeof(XkbKeyAliasRec);
}
return size;
}
@@ -261,107 +262,116 @@ unsigned tmp,size= 0;
/***====================================================================***/
static unsigned
-SizeXKMKeyTypes(XkbFileInfo *result,xkmSectionInfo *toc,int *offset_inout)
+SizeXKMKeyTypes(XkbFileInfo *result, xkmSectionInfo *toc, int *offset_inout)
{
-register unsigned i,n,size;
-XkbKeyTypePtr type;
-XkbDescPtr xkb;
-Display * dpy;
-char * name;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- if ((!xkb)||(!xkb->map)||(!xkb->map->types)) {
- _XkbLibError(_XkbErrMissingTypes,"SizeXKBKeyTypes",0);
- return 0;
+ register unsigned i, n, size;
+ XkbKeyTypePtr type;
+ XkbDescPtr xkb;
+ Display *dpy;
+ char *name;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ if ((!xkb) || (!xkb->map) || (!xkb->map->types)) {
+ _XkbLibError(_XkbErrMissingTypes, "SizeXKBKeyTypes", 0);
+ return 0;
}
- if (xkb->map->num_types<XkbNumRequiredTypes) {
- _XkbLibError(_XkbErrMissingReqTypes,"SizeXKBKeyTypes",0);
- return 0;
+ if (xkb->map->num_types < XkbNumRequiredTypes) {
+ _XkbLibError(_XkbErrMissingReqTypes, "SizeXKBKeyTypes", 0);
+ return 0;
}
- if (xkb->names) name= XkbAtomGetString(dpy,xkb->names->types);
- else name= NULL;
- size= xkmSizeCountedString(name);
- size+= 4; /* room for # of key types + padding */
- for (i=0,type=xkb->map->types;i<xkb->map->num_types;i++,type++) {
- size+= SIZEOF(xkmKeyTypeDesc);
- size+= SIZEOF(xkmKTMapEntryDesc)*type->map_count;
- size+= xkmSizeCountedAtomString(dpy,type->name);
- if (type->preserve)
- size+= SIZEOF(xkmModsDesc)*type->map_count;
- if (type->level_names) {
- Atom *names;
- names= type->level_names;
- for (n=0;n<(unsigned)type->num_levels;n++) {
- size+= xkmSizeCountedAtomString(dpy,names[n]);
- }
- }
+ if (xkb->names)
+ name = XkbAtomGetString(dpy, xkb->names->types);
+ else
+ name = NULL;
+ size = xkmSizeCountedString(name);
+ size += 4; /* room for # of key types + padding */
+ for (i = 0, type = xkb->map->types; i < xkb->map->num_types; i++, type++) {
+ size += SIZEOF(xkmKeyTypeDesc);
+ size += SIZEOF(xkmKTMapEntryDesc) * type->map_count;
+ size += xkmSizeCountedAtomString(dpy, type->name);
+ if (type->preserve)
+ size += SIZEOF(xkmModsDesc) * type->map_count;
+ if (type->level_names) {
+ Atom *names;
+
+ names = type->level_names;
+ for (n = 0; n < (unsigned) type->num_levels; n++) {
+ size += xkmSizeCountedAtomString(dpy, names[n]);
+ }
+ }
}
- toc->type= XkmTypesIndex;
- toc->format= MSBFirst;
- toc->size= size+SIZEOF(xkmSectionInfo);
- toc->offset= (*offset_inout);
- (*offset_inout)+= toc->size;
+ toc->type = XkmTypesIndex;
+ toc->format = MSBFirst;
+ toc->size = size + SIZEOF(xkmSectionInfo);
+ toc->offset = (*offset_inout);
+ (*offset_inout) += toc->size;
return 1;
}
static unsigned
-WriteXKMKeyTypes(FILE *file,XkbFileInfo *result)
+WriteXKMKeyTypes(FILE *file, XkbFileInfo *result)
{
-register unsigned i,n;
-XkbDescPtr xkb;
-XkbKeyTypePtr type;
-xkmKeyTypeDesc wire;
-XkbKTMapEntryPtr entry;
-xkmKTMapEntryDesc wire_entry;
-Atom * names;
-Display * dpy;
-unsigned tmp,size= 0;
-char * name;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- if (xkb->names) name= XkbAtomGetString(dpy,xkb->names->types);
- else name= NULL;
- size+= xkmPutCountedString(file,name);
- size+= xkmPutCARD16(file,xkb->map->num_types);
- size+= xkmPutPadding(file,2);
- type= xkb->map->types;
- for (i=0;i<xkb->map->num_types;i++,type++) {
- wire.realMods= type->mods.real_mods;
- wire.virtualMods= type->mods.vmods;
- wire.numLevels= type->num_levels;
- wire.nMapEntries= type->map_count;
- wire.preserve= (type->preserve!=NULL);
- if (type->level_names!=NULL)
- wire.nLevelNames= type->num_levels;
- else wire.nLevelNames= 0;
- tmp= fwrite(&wire,SIZEOF(xkmKeyTypeDesc),1,file);
- size+= tmp*SIZEOF(xkmKeyTypeDesc);
- for (n=0,entry= type->map;n<type->map_count;n++,entry++) {
- wire_entry.level= entry->level;
- wire_entry.realMods= entry->mods.real_mods;
- wire_entry.virtualMods= entry->mods.vmods;
- tmp= fwrite(&wire_entry,SIZEOF(xkmKTMapEntryDesc),1,file);
- size+= tmp*SIZEOF(xkmKTMapEntryDesc);
- }
- size+= xkmPutCountedString(file,XkbAtomGetString(dpy,type->name));
- if (type->preserve) {
- xkmModsDesc p_entry;
- XkbModsPtr pre;
- for (n=0,pre=type->preserve;n<type->map_count;n++,pre++) {
- p_entry.realMods= pre->real_mods;
- p_entry.virtualMods= pre->vmods;
- tmp= fwrite(&p_entry,SIZEOF(xkmModsDesc),1,file);
- size+= tmp*SIZEOF(xkmModsDesc);
- }
- }
- if (type->level_names!=NULL) {
- names= type->level_names;
- for (n=0;n<wire.nLevelNames;n++) {
- size+= xkmPutCountedString(file,XkbAtomGetString(dpy,names[n]));
- }
- }
+ register unsigned i, n;
+ XkbDescPtr xkb;
+ XkbKeyTypePtr type;
+ xkmKeyTypeDesc wire;
+ XkbKTMapEntryPtr entry;
+ xkmKTMapEntryDesc wire_entry;
+ Atom *names;
+ Display *dpy;
+ unsigned tmp, size = 0;
+ char *name;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ if (xkb->names)
+ name = XkbAtomGetString(dpy, xkb->names->types);
+ else
+ name = NULL;
+ size += xkmPutCountedString(file, name);
+ size += xkmPutCARD16(file, xkb->map->num_types);
+ size += xkmPutPadding(file, 2);
+ type = xkb->map->types;
+ for (i = 0; i < xkb->map->num_types; i++, type++) {
+ wire.realMods = type->mods.real_mods;
+ wire.virtualMods = type->mods.vmods;
+ wire.numLevels = type->num_levels;
+ wire.nMapEntries = type->map_count;
+ wire.preserve = (type->preserve != NULL);
+ if (type->level_names != NULL)
+ wire.nLevelNames = type->num_levels;
+ else
+ wire.nLevelNames = 0;
+ tmp = fwrite(&wire, SIZEOF(xkmKeyTypeDesc), 1, file);
+ size += tmp * SIZEOF(xkmKeyTypeDesc);
+ for (n = 0, entry = type->map; n < type->map_count; n++, entry++) {
+ wire_entry.level = entry->level;
+ wire_entry.realMods = entry->mods.real_mods;
+ wire_entry.virtualMods = entry->mods.vmods;
+ tmp = fwrite(&wire_entry, SIZEOF(xkmKTMapEntryDesc), 1, file);
+ size += tmp * SIZEOF(xkmKTMapEntryDesc);
+ }
+ size += xkmPutCountedString(file, XkbAtomGetString(dpy, type->name));
+ if (type->preserve) {
+ xkmModsDesc p_entry;
+
+ XkbModsPtr pre;
+
+ for (n = 0, pre = type->preserve; n < type->map_count; n++, pre++) {
+ p_entry.realMods = pre->real_mods;
+ p_entry.virtualMods = pre->vmods;
+ tmp = fwrite(&p_entry, SIZEOF(xkmModsDesc), 1, file);
+ size += tmp * SIZEOF(xkmModsDesc);
+ }
+ }
+ if (type->level_names != NULL) {
+ names = type->level_names;
+ for (n = 0; n < wire.nLevelNames; n++) {
+ size +=
+ xkmPutCountedString(file, XkbAtomGetString(dpy, names[n]));
+ }
+ }
}
return size;
}
@@ -369,96 +379,100 @@ char * name;
/***====================================================================***/
static unsigned
-SizeXKMCompatMap( XkbFileInfo * result,
- XkmInfo * info,
- xkmSectionInfo * toc,
- int * offset_inout)
+SizeXKMCompatMap(XkbFileInfo *result, XkmInfo *info,
+ xkmSectionInfo *toc, int *offset_inout)
{
-XkbDescPtr xkb;
-char * name;
-int size;
-register int i;
-unsigned groups,nGroups;
-Display * dpy;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- if ((!xkb)||(!xkb->compat)||(!xkb->compat->sym_interpret)) {
- _XkbLibError(_XkbErrMissingCompatMap,"SizeXKMCompatMap",0);
- return 0;
+ XkbDescPtr xkb;
+ char *name;
+ int size;
+ register int i;
+ unsigned groups, nGroups;
+ Display *dpy;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ if ((!xkb) || (!xkb->compat) || (!xkb->compat->sym_interpret)) {
+ _XkbLibError(_XkbErrMissingCompatMap, "SizeXKMCompatMap", 0);
+ return 0;
}
- if (xkb->names) name= XkbAtomGetString(dpy,xkb->names->compat);
- else name= NULL;
-
- for (i=groups=nGroups=0;i<XkbNumKbdGroups;i++) {
- if ((xkb->compat->groups[i].real_mods!=0)||
- (xkb->compat->groups[i].vmods!=0)) {
- groups|= (1<<i);
- nGroups++;
- }
+ if (xkb->names)
+ name = XkbAtomGetString(dpy, xkb->names->compat);
+ else
+ name = NULL;
+
+ for (i = groups = nGroups = 0; i < XkbNumKbdGroups; i++) {
+ if ((xkb->compat->groups[i].real_mods != 0) ||
+ (xkb->compat->groups[i].vmods != 0)) {
+ groups |= (1 << i);
+ nGroups++;
+ }
}
- info->group_compat= groups;
- info->num_group_compat= nGroups;
- size= 4; /* room for num_si and group_compat mask */
- size+= xkmSizeCountedString(name);
- size+= (SIZEOF(xkmSymInterpretDesc)*xkb->compat->num_si);
- size+= (SIZEOF(xkmModsDesc)*nGroups);
- toc->type= XkmCompatMapIndex;
- toc->format= MSBFirst;
- toc->size= size+SIZEOF(xkmSectionInfo);
- toc->offset= (*offset_inout);
- (*offset_inout)+= toc->size;
+ info->group_compat = groups;
+ info->num_group_compat = nGroups;
+ size = 4; /* room for num_si and group_compat mask */
+ size += xkmSizeCountedString(name);
+ size += (SIZEOF(xkmSymInterpretDesc) * xkb->compat->num_si);
+ size += (SIZEOF(xkmModsDesc) * nGroups);
+ toc->type = XkmCompatMapIndex;
+ toc->format = MSBFirst;
+ toc->size = size + SIZEOF(xkmSectionInfo);
+ toc->offset = (*offset_inout);
+ (*offset_inout) += toc->size;
return 1;
}
static unsigned
-WriteXKMCompatMap(FILE *file,XkbFileInfo *result,XkmInfo *info)
+WriteXKMCompatMap(FILE *file, XkbFileInfo *result, XkmInfo *info)
{
-register unsigned i;
-char * name;
-XkbDescPtr xkb;
-XkbSymInterpretPtr interp;
-xkmSymInterpretDesc wire;
-Display * dpy;
-unsigned tmp,size=0;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- if (xkb->names) name= XkbAtomGetString(dpy,xkb->names->compat);
- else name= NULL;
- size+= xkmPutCountedString(file,name);
- size+= xkmPutCARD16(file,xkb->compat->num_si);
- size+= xkmPutCARD8(file,info->group_compat);
- size+= xkmPutPadding(file,1);
- interp= xkb->compat->sym_interpret;
- for (i=0;i<xkb->compat->num_si;i++,interp++) {
- wire.sym= interp->sym;
- wire.mods= interp->mods;
- wire.match= interp->match;
- wire.virtualMod= interp->virtual_mod;
- wire.flags= interp->flags;
- wire.actionType= interp->act.type;
- wire.actionData[0]= interp->act.data[0];
- wire.actionData[1]= interp->act.data[1];
- wire.actionData[2]= interp->act.data[2];
- wire.actionData[3]= interp->act.data[3];
- wire.actionData[4]= interp->act.data[4];
- wire.actionData[5]= interp->act.data[5];
- wire.actionData[6]= interp->act.data[6];
- tmp= fwrite(&wire,SIZEOF(xkmSymInterpretDesc),1,file);
- size+= tmp*SIZEOF(xkmSymInterpretDesc);
+ register unsigned i;
+ char *name;
+ XkbDescPtr xkb;
+ XkbSymInterpretPtr interp;
+ xkmSymInterpretDesc wire;
+ Display *dpy;
+ unsigned tmp, size = 0;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ if (xkb->names)
+ name = XkbAtomGetString(dpy, xkb->names->compat);
+ else
+ name = NULL;
+ size += xkmPutCountedString(file, name);
+ size += xkmPutCARD16(file, xkb->compat->num_si);
+ size += xkmPutCARD8(file, info->group_compat);
+ size += xkmPutPadding(file, 1);
+ interp = xkb->compat->sym_interpret;
+ for (i = 0; i < xkb->compat->num_si; i++, interp++) {
+ wire.sym = interp->sym;
+ wire.mods = interp->mods;
+ wire.match = interp->match;
+ wire.virtualMod = interp->virtual_mod;
+ wire.flags = interp->flags;
+ wire.actionType = interp->act.type;
+ wire.actionData[0] = interp->act.data[0];
+ wire.actionData[1] = interp->act.data[1];
+ wire.actionData[2] = interp->act.data[2];
+ wire.actionData[3] = interp->act.data[3];
+ wire.actionData[4] = interp->act.data[4];
+ wire.actionData[5] = interp->act.data[5];
+ wire.actionData[6] = interp->act.data[6];
+ tmp = fwrite(&wire, SIZEOF(xkmSymInterpretDesc), 1, file);
+ size += tmp * SIZEOF(xkmSymInterpretDesc);
}
if (info->group_compat) {
- register unsigned bit;
- xkmModsDesc modsWire;
- for (i=0,bit=1;i<XkbNumKbdGroups;i++,bit<<=1) {
- if (info->group_compat&bit) {
- modsWire.realMods= xkb->compat->groups[i].real_mods;
- modsWire.virtualMods= xkb->compat->groups[i].vmods;
- fwrite(&modsWire,SIZEOF(xkmModsDesc),1,file);
- size+= SIZEOF(xkmModsDesc);
- }
- }
+ register unsigned bit;
+
+ xkmModsDesc modsWire;
+
+ for (i = 0, bit = 1; i < XkbNumKbdGroups; i++, bit <<= 1) {
+ if (info->group_compat & bit) {
+ modsWire.realMods = xkb->compat->groups[i].real_mods;
+ modsWire.virtualMods = xkb->compat->groups[i].vmods;
+ fwrite(&modsWire, SIZEOF(xkmModsDesc), 1, file);
+ size += SIZEOF(xkmModsDesc);
+ }
+ }
}
return size;
}
@@ -466,171 +480,183 @@ unsigned tmp,size=0;
/***====================================================================***/
static unsigned
-SizeXKMSymbols( XkbFileInfo * result,
- XkmInfo * info,
- xkmSectionInfo * toc,
- int * offset_inout)
+SizeXKMSymbols(XkbFileInfo *result, XkmInfo *info,
+ xkmSectionInfo *toc, int *offset_inout)
{
-Display * dpy;
-XkbDescPtr xkb;
-unsigned size;
-register int i,nSyms;
-char * name;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- if ((!xkb)||(!xkb->map)||((!xkb->map->syms))) {
- _XkbLibError(_XkbErrMissingSymbols,"SizeXKMSymbols",0);
- return 0;
+ Display *dpy;
+ XkbDescPtr xkb;
+ unsigned size;
+ register int i, nSyms;
+ char *name;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ if ((!xkb) || (!xkb->map) || ((!xkb->map->syms))) {
+ _XkbLibError(_XkbErrMissingSymbols, "SizeXKMSymbols", 0);
+ return 0;
}
- if (xkb->names && (xkb->names->symbols!=None))
- name= XkbAtomGetString(dpy,xkb->names->symbols);
- else name= NULL;
- size= xkmSizeCountedString(name);
- size+= 4; /* min and max keycode, group names mask */
- for (i=0;i<XkbNumKbdGroups;i++) {
- if (xkb->names->groups[i]!=None)
- size+= xkmSizeCountedAtomString(dpy,xkb->names->groups[i]);
+ if (xkb->names && (xkb->names->symbols != None))
+ name = XkbAtomGetString(dpy, xkb->names->symbols);
+ else
+ name = NULL;
+ size = xkmSizeCountedString(name);
+ size += 4; /* min and max keycode, group names mask */
+ for (i = 0; i < XkbNumKbdGroups; i++) {
+ if (xkb->names->groups[i] != None)
+ size += xkmSizeCountedAtomString(dpy, xkb->names->groups[i]);
}
- info->total_vmodmaps= 0;
- for (i=xkb->min_key_code;i<=(int)xkb->max_key_code;i++) {
- nSyms= XkbKeyNumSyms(xkb,i);
- size+= SIZEOF(xkmKeySymMapDesc)+(nSyms*4);
- if (xkb->server) {
- if (xkb->server->explicit[i]&XkbExplicitKeyTypesMask) {
- register int g;
- for (g=XkbKeyNumGroups(xkb,i)-1;g>=0;g--) {
- if (xkb->server->explicit[i]&(1<<g)) {
- XkbKeyTypePtr type;
- char * name;
- type= XkbKeyKeyType(xkb,i,g);
- name= XkbAtomGetString(dpy,type->name);
- if (name!=NULL)
- size+= xkmSizeCountedString(name);
- }
- }
- }
- if (XkbKeyHasActions(xkb,i))
- size+= nSyms*SIZEOF(xkmActionDesc);
- if (xkb->server->behaviors[i].type!=XkbKB_Default)
- size+= SIZEOF(xkmBehaviorDesc);
- if (xkb->server->vmodmap && (xkb->server->vmodmap[i]!=0))
- info->total_vmodmaps++;
- }
+ info->total_vmodmaps = 0;
+ for (i = xkb->min_key_code; i <= (int) xkb->max_key_code; i++) {
+ nSyms = XkbKeyNumSyms(xkb, i);
+ size += SIZEOF(xkmKeySymMapDesc) + (nSyms * 4);
+ if (xkb->server) {
+ if (xkb->server->explicit[i] & XkbExplicitKeyTypesMask) {
+ register int g;
+
+ for (g = XkbKeyNumGroups(xkb, i) - 1; g >= 0; g--) {
+ if (xkb->server->explicit[i] & (1 << g)) {
+ XkbKeyTypePtr type;
+ char *name;
+
+ type = XkbKeyKeyType(xkb, i, g);
+ name = XkbAtomGetString(dpy, type->name);
+ if (name != NULL)
+ size += xkmSizeCountedString(name);
+ }
+ }
+ }
+ if (XkbKeyHasActions(xkb, i))
+ size += nSyms * SIZEOF(xkmActionDesc);
+ if (xkb->server->behaviors[i].type != XkbKB_Default)
+ size += SIZEOF(xkmBehaviorDesc);
+ if (xkb->server->vmodmap && (xkb->server->vmodmap[i] != 0))
+ info->total_vmodmaps++;
+ }
}
- size+= info->total_vmodmaps*SIZEOF(xkmVModMapDesc);
- toc->type= XkmSymbolsIndex;
- toc->format= MSBFirst;
- toc->size= size+SIZEOF(xkmSectionInfo);
- toc->offset= (*offset_inout);
- (*offset_inout)+= toc->size;
+ size += info->total_vmodmaps * SIZEOF(xkmVModMapDesc);
+ toc->type = XkmSymbolsIndex;
+ toc->format = MSBFirst;
+ toc->size = size + SIZEOF(xkmSectionInfo);
+ toc->offset = (*offset_inout);
+ (*offset_inout) += toc->size;
return 1;
}
static unsigned
-WriteXKMSymbols(FILE *file,XkbFileInfo *result,XkmInfo *info)
+WriteXKMSymbols(FILE *file, XkbFileInfo *result, XkmInfo *info)
{
-Display * dpy;
-XkbDescPtr xkb;
-register int i,n;
-xkmKeySymMapDesc wireMap;
-char * name;
-unsigned tmp,size= 0;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- if (xkb->names && (xkb->names->symbols!=None))
- name= XkbAtomGetString(dpy,xkb->names->symbols);
- else name= NULL;
- size+= xkmPutCountedString(file,name);
- for (tmp=i=0;i<XkbNumKbdGroups;i++) {
- if (xkb->names->groups[i]!=None)
- tmp|= (1<<i);
+ Display *dpy;
+ XkbDescPtr xkb;
+ register int i, n;
+ xkmKeySymMapDesc wireMap;
+ char *name;
+ unsigned tmp, size = 0;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ if (xkb->names && (xkb->names->symbols != None))
+ name = XkbAtomGetString(dpy, xkb->names->symbols);
+ else
+ name = NULL;
+ size += xkmPutCountedString(file, name);
+ for (tmp = i = 0; i < XkbNumKbdGroups; i++) {
+ if (xkb->names->groups[i] != None)
+ tmp |= (1 << i);
}
- size+= xkmPutCARD8(file,xkb->min_key_code);
- size+= xkmPutCARD8(file,xkb->max_key_code);
- size+= xkmPutCARD8(file,tmp);
- size+= xkmPutCARD8(file,info->total_vmodmaps);
- for (i=0,n=1;i<XkbNumKbdGroups;i++,n<<=1) {
- if ((tmp&n)==0)
- continue;
- size+= xkmPutCountedAtomString(dpy,file,xkb->names->groups[i]);
+ size += xkmPutCARD8(file, xkb->min_key_code);
+ size += xkmPutCARD8(file, xkb->max_key_code);
+ size += xkmPutCARD8(file, tmp);
+ size += xkmPutCARD8(file, info->total_vmodmaps);
+ for (i = 0, n = 1; i < XkbNumKbdGroups; i++, n <<= 1) {
+ if ((tmp & n) == 0)
+ continue;
+ size += xkmPutCountedAtomString(dpy, file, xkb->names->groups[i]);
}
- for (i=xkb->min_key_code;i<=(int)xkb->max_key_code;i++) {
- char *typeName[XkbNumKbdGroups];
- wireMap.width= XkbKeyGroupsWidth(xkb,i);
- wireMap.num_groups= XkbKeyGroupInfo(xkb,i);
- if (xkb->map && xkb->map->modmap)
- wireMap.modifier_map= xkb->map->modmap[i];
- else wireMap.modifier_map= 0;
- wireMap.flags= 0;
- bzero((char *)typeName,XkbNumKbdGroups*sizeof(char *));
- if (xkb->server) {
- if (xkb->server->explicit[i]&XkbExplicitKeyTypesMask) {
- register int g;
- for (g=0;g<XkbKeyNumGroups(xkb,i);g++) {
- if (xkb->server->explicit[i]&(1<<g)) {
- XkbKeyTypePtr type;
- type= XkbKeyKeyType(xkb,i,g);
- typeName[g]= XkbAtomGetString(dpy,type->name);
- if (typeName[g]!=NULL)
- wireMap.flags|= (1<<g);
- }
- }
- }
- if (XkbKeyHasActions(xkb,i))
- wireMap.flags|= XkmKeyHasActions;
- if (xkb->server->behaviors[i].type!=XkbKB_Default)
- wireMap.flags|= XkmKeyHasBehavior;
- if ((xkb->server->explicit[i]&XkbExplicitAutoRepeatMask)&&
- (xkb->ctrls!=NULL)) {
- if (xkb->ctrls->per_key_repeat[(i/8)]&(1<<(i%8)))
- wireMap.flags|= XkmRepeatingKey;
- else wireMap.flags|= XkmNonRepeatingKey;
- }
- }
- tmp= fwrite(&wireMap,SIZEOF(xkmKeySymMapDesc),1,file);
- size+= tmp*SIZEOF(xkmKeySymMapDesc);
- if (xkb->server->explicit[i]&XkbExplicitKeyTypesMask) {
- register int g;
- for (g=0;g<XkbNumKbdGroups;g++) {
- if (typeName[g]!=NULL)
- size+= xkmPutCountedString(file,typeName[g]);
- }
- }
- if (XkbNumGroups(wireMap.num_groups)>0) {
- KeySym *sym;
- sym= XkbKeySymsPtr(xkb,i);
- for (n=XkbKeyNumSyms(xkb,i);n>0;n--,sym++) {
- size+= xkmPutCARD32(file,(CARD32)*sym);
- }
- if (wireMap.flags&XkmKeyHasActions) {
- XkbAction * act;
- act= XkbKeyActionsPtr(xkb,i);
- for (n=XkbKeyNumActions(xkb,i);n>0;n--,act++) {
- tmp= fwrite(act,SIZEOF(xkmActionDesc),1,file);
- size+= tmp*SIZEOF(xkmActionDesc);
- }
- }
- }
- if (wireMap.flags&XkmKeyHasBehavior) {
- xkmBehaviorDesc b;
- b.type= xkb->server->behaviors[i].type;
- b.data= xkb->server->behaviors[i].data;
- tmp= fwrite(&b,SIZEOF(xkmBehaviorDesc),1,file);
- size+= tmp*SIZEOF(xkmBehaviorDesc);
- }
+ for (i = xkb->min_key_code; i <= (int) xkb->max_key_code; i++) {
+ char *typeName[XkbNumKbdGroups];
+
+ wireMap.width = XkbKeyGroupsWidth(xkb, i);
+ wireMap.num_groups = XkbKeyGroupInfo(xkb, i);
+ if (xkb->map && xkb->map->modmap)
+ wireMap.modifier_map = xkb->map->modmap[i];
+ else
+ wireMap.modifier_map = 0;
+ wireMap.flags = 0;
+ bzero((char *) typeName, XkbNumKbdGroups * sizeof(char *));
+ if (xkb->server) {
+ if (xkb->server->explicit[i] & XkbExplicitKeyTypesMask) {
+ register int g;
+
+ for (g = 0; g < XkbKeyNumGroups(xkb, i); g++) {
+ if (xkb->server->explicit[i] & (1 << g)) {
+ XkbKeyTypePtr type;
+
+ type = XkbKeyKeyType(xkb, i, g);
+ typeName[g] = XkbAtomGetString(dpy, type->name);
+ if (typeName[g] != NULL)
+ wireMap.flags |= (1 << g);
+ }
+ }
+ }
+ if (XkbKeyHasActions(xkb, i))
+ wireMap.flags |= XkmKeyHasActions;
+ if (xkb->server->behaviors[i].type != XkbKB_Default)
+ wireMap.flags |= XkmKeyHasBehavior;
+ if ((xkb->server->explicit[i] & XkbExplicitAutoRepeatMask) &&
+ (xkb->ctrls != NULL)) {
+ if (xkb->ctrls->per_key_repeat[(i / 8)] & (1 << (i % 8)))
+ wireMap.flags |= XkmRepeatingKey;
+ else
+ wireMap.flags |= XkmNonRepeatingKey;
+ }
+ }
+ tmp = fwrite(&wireMap, SIZEOF(xkmKeySymMapDesc), 1, file);
+ size += tmp * SIZEOF(xkmKeySymMapDesc);
+ if (xkb->server->explicit[i] & XkbExplicitKeyTypesMask) {
+ register int g;
+
+ for (g = 0; g < XkbNumKbdGroups; g++) {
+ if (typeName[g] != NULL)
+ size += xkmPutCountedString(file, typeName[g]);
+ }
+ }
+ if (XkbNumGroups(wireMap.num_groups) > 0) {
+ KeySym *sym;
+
+ sym = XkbKeySymsPtr(xkb, i);
+ for (n = XkbKeyNumSyms(xkb, i); n > 0; n--, sym++) {
+ size += xkmPutCARD32(file, (CARD32) *sym);
+ }
+ if (wireMap.flags & XkmKeyHasActions) {
+ XkbAction *act;
+
+ act = XkbKeyActionsPtr(xkb, i);
+ for (n = XkbKeyNumActions(xkb, i); n > 0; n--, act++) {
+ tmp = fwrite(act, SIZEOF(xkmActionDesc), 1, file);
+ size += tmp * SIZEOF(xkmActionDesc);
+ }
+ }
+ }
+ if (wireMap.flags & XkmKeyHasBehavior) {
+ xkmBehaviorDesc b;
+
+ b.type = xkb->server->behaviors[i].type;
+ b.data = xkb->server->behaviors[i].data;
+ tmp = fwrite(&b, SIZEOF(xkmBehaviorDesc), 1, file);
+ size += tmp * SIZEOF(xkmBehaviorDesc);
+ }
}
- if (info->total_vmodmaps>0) {
- xkmVModMapDesc v;
- for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) {
- if (xkb->server->vmodmap[i]!=0) {
- v.key= i;
- v.vmods= xkb->server->vmodmap[i];
- tmp= fwrite(&v,SIZEOF(xkmVModMapDesc),1,file);
- size+= tmp*SIZEOF(xkmVModMapDesc);
- }
- }
+ if (info->total_vmodmaps > 0) {
+ xkmVModMapDesc v;
+
+ for (i = xkb->min_key_code; i <= xkb->max_key_code; i++) {
+ if (xkb->server->vmodmap[i] != 0) {
+ v.key = i;
+ v.vmods = xkb->server->vmodmap[i];
+ tmp = fwrite(&v, SIZEOF(xkmVModMapDesc), 1, file);
+ size += tmp * SIZEOF(xkmVModMapDesc);
+ }
+ }
}
return size;
}
@@ -638,90 +664,96 @@ unsigned tmp,size= 0;
/***====================================================================***/
static unsigned
-SizeXKMIndicators(XkbFileInfo *result,XkmInfo *info,xkmSectionInfo *toc,
- int *offset_inout)
+SizeXKMIndicators(XkbFileInfo *result, XkmInfo *info,
+ xkmSectionInfo *toc, int *offset_inout)
{
-Display * dpy;
-XkbDescPtr xkb;
-unsigned size;
-register unsigned i,nLEDs;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- if ((xkb==NULL)||(xkb->indicators==NULL)) {
+ Display *dpy;
+ XkbDescPtr xkb;
+ unsigned size;
+ register unsigned i, nLEDs;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ if ((xkb == NULL) || (xkb->indicators == NULL)) {
/* _XkbLibError(_XkbErrMissingIndicators,"SizeXKMIndicators",0);*/
- return 0;
+ return 0;
}
- nLEDs=0;
- size= 8; /* number of indicator maps/physical indicators */
- if (xkb->indicators!=NULL) {
- 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) ||
- (xkb->names && (xkb->names->indicators[i]!=None))) {
- char *name;
- if (xkb->names && xkb->names->indicators[i]!=None) {
- name= XkbAtomGetString(dpy,xkb->names->indicators[i]);
- }
- else name= NULL;
- size+= xkmSizeCountedString(name);
- size+= SIZEOF(xkmIndicatorMapDesc);
- nLEDs++;
- }
- }
+ nLEDs = 0;
+ size = 8; /* number of indicator maps/physical indicators */
+ if (xkb->indicators != NULL) {
+ 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) ||
+ (xkb->names && (xkb->names->indicators[i] != None))) {
+ char *name;
+
+ if (xkb->names && xkb->names->indicators[i] != None) {
+ name = XkbAtomGetString(dpy, xkb->names->indicators[i]);
+ }
+ else
+ name = NULL;
+ size += xkmSizeCountedString(name);
+ size += SIZEOF(xkmIndicatorMapDesc);
+ nLEDs++;
+ }
+ }
}
- info->num_leds= nLEDs;
- toc->type= XkmIndicatorsIndex;
- toc->format= MSBFirst;
- toc->size= size+SIZEOF(xkmSectionInfo);
- toc->offset= (*offset_inout);
- (*offset_inout)+= toc->size;
+ info->num_leds = nLEDs;
+ toc->type = XkmIndicatorsIndex;
+ toc->format = MSBFirst;
+ toc->size = size + SIZEOF(xkmSectionInfo);
+ toc->offset = (*offset_inout);
+ (*offset_inout) += toc->size;
return 1;
}
static unsigned
-WriteXKMIndicators(FILE *file,XkbFileInfo *result,XkmInfo *info)
+WriteXKMIndicators(FILE *file, XkbFileInfo *result, XkmInfo *info)
{
-Display * dpy;
-XkbDescPtr xkb;
-register unsigned i;
-xkmIndicatorMapDesc wire;
-unsigned tmp,size= 0;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- size+= xkmPutCARD8(file,info->num_leds);
- size+= xkmPutPadding(file,3);
- size+= xkmPutCARD32(file,xkb->indicators->phys_indicators);
- if (xkb->indicators!=NULL) {
- 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) ||
- (xkb->names && (xkb->names->indicators[i]!=None))) {
- char *name;
- if (xkb->names && xkb->names->indicators[i]!=None) {
- name= XkbAtomGetString(dpy,xkb->names->indicators[i]);
- }
- else name= NULL;
- size+= xkmPutCountedString(file,name);
- wire.indicator= i+1;
- wire.flags= map->flags;
- wire.which_mods= map->which_mods;
- wire.real_mods= map->mods.real_mods;
- wire.vmods= map->mods.vmods;
- wire.which_groups= map->which_groups;
- wire.groups= map->groups;
- wire.ctrls= map->ctrls;
- tmp= fwrite(&wire,SIZEOF(xkmIndicatorMapDesc),1,file);
- size+= tmp*SIZEOF(xkmIndicatorMapDesc);
- }
- }
+ Display *dpy;
+ XkbDescPtr xkb;
+ register unsigned i;
+ xkmIndicatorMapDesc wire;
+ unsigned tmp, size = 0;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ size += xkmPutCARD8(file, info->num_leds);
+ size += xkmPutPadding(file, 3);
+ size += xkmPutCARD32(file, xkb->indicators->phys_indicators);
+ if (xkb->indicators != NULL) {
+ 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) || (xkb->names &&
+ (xkb->names->indicators[i] != None))) {
+ char *name;
+
+ if (xkb->names && xkb->names->indicators[i] != None) {
+ name = XkbAtomGetString(dpy, xkb->names->indicators[i]);
+ }
+ else
+ name = NULL;
+ size += xkmPutCountedString(file, name);
+ wire.indicator = i + 1;
+ wire.flags = map->flags;
+ wire.which_mods = map->which_mods;
+ wire.real_mods = map->mods.real_mods;
+ wire.vmods = map->mods.vmods;
+ wire.which_groups = map->which_groups;
+ wire.groups = map->groups;
+ wire.ctrls = map->ctrls;
+ tmp = fwrite(&wire, SIZEOF(xkmIndicatorMapDesc), 1, file);
+ size += tmp * SIZEOF(xkmIndicatorMapDesc);
+ }
+ }
}
return size;
}
@@ -729,373 +761,408 @@ unsigned tmp,size= 0;
/***====================================================================***/
static unsigned
-SizeXKMGeomDoodad(XkbFileInfo *result,XkbDoodadPtr doodad)
+SizeXKMGeomDoodad(XkbFileInfo *result, XkbDoodadPtr doodad)
{
-unsigned size;
+ unsigned size;
- size= SIZEOF(xkmAnyDoodadDesc);
- size+= xkmSizeCountedAtomString(result->xkb->dpy,doodad->any.name);
- if (doodad->any.type==XkbTextDoodad) {
- size+= xkmSizeCountedString(doodad->text.text);
- size+= xkmSizeCountedString(doodad->text.font);
+ size = SIZEOF(xkmAnyDoodadDesc);
+ size += xkmSizeCountedAtomString(result->xkb->dpy, doodad->any.name);
+ if (doodad->any.type == XkbTextDoodad) {
+ size += xkmSizeCountedString(doodad->text.text);
+ size += xkmSizeCountedString(doodad->text.font);
}
- else if (doodad->any.type==XkbLogoDoodad) {
- size+= xkmSizeCountedString(doodad->logo.logo_name);
+ else if (doodad->any.type == XkbLogoDoodad) {
+ size += xkmSizeCountedString(doodad->logo.logo_name);
}
return size;
}
static unsigned
-SizeXKMGeomSection(XkbFileInfo *result,XkbSectionPtr section)
+SizeXKMGeomSection(XkbFileInfo *result, XkbSectionPtr section)
{
-register int i;
-unsigned size;
+ register int i;
+ unsigned size;
- size= SIZEOF(xkmSectionDesc);
- size+= xkmSizeCountedAtomString(result->xkb->dpy,section->name);
+ size = SIZEOF(xkmSectionDesc);
+ size += xkmSizeCountedAtomString(result->xkb->dpy, section->name);
if (section->rows) {
- XkbRowPtr row;
- for (row=section->rows,i=0;i<section->num_rows;i++,row++) {
- size+= SIZEOF(xkmRowDesc);
- size+= row->num_keys*SIZEOF(xkmKeyDesc);
- }
+ XkbRowPtr row;
+
+ for (row = section->rows, i = 0; i < section->num_rows; i++, row++) {
+ size += SIZEOF(xkmRowDesc);
+ size += row->num_keys * SIZEOF(xkmKeyDesc);
+ }
}
if (section->doodads) {
- XkbDoodadPtr doodad;
- for (doodad=section->doodads,i=0;i<section->num_doodads;i++,doodad++) {
- size+= SizeXKMGeomDoodad(result,doodad);
- }
+ XkbDoodadPtr doodad;
+
+ for (doodad = section->doodads, i = 0; i < section->num_doodads;
+ i++, doodad++) {
+ size += SizeXKMGeomDoodad(result, doodad);
+ }
}
if (section->overlays) {
- XkbOverlayPtr ol;
- for (ol=section->overlays,i=0;i<section->num_overlays;i++,ol++) {
- register int r;
- XkbOverlayRowPtr row;
- size+= xkmSizeCountedAtomString(result->xkb->dpy,ol->name);
- size+= SIZEOF(xkmOverlayDesc);
- for (r=0,row=ol->rows;r<ol->num_rows;r++,row++) {
- size+= SIZEOF(xkmOverlayRowDesc);
- size+= row->num_keys*SIZEOF(xkmOverlayKeyDesc);
- }
- }
+ XkbOverlayPtr ol;
+
+ for (ol = section->overlays, i = 0; i < section->num_overlays;
+ i++, ol++) {
+ register int r;
+ XkbOverlayRowPtr row;
+
+ size += xkmSizeCountedAtomString(result->xkb->dpy, ol->name);
+ size += SIZEOF(xkmOverlayDesc);
+ for (r = 0, row = ol->rows; r < ol->num_rows; r++, row++) {
+ size += SIZEOF(xkmOverlayRowDesc);
+ size += row->num_keys * SIZEOF(xkmOverlayKeyDesc);
+ }
+ }
}
return size;
}
static unsigned
-SizeXKMGeometry(XkbFileInfo *result,xkmSectionInfo *toc,int *offset_inout)
+SizeXKMGeometry(XkbFileInfo *result, xkmSectionInfo *toc, int *offset_inout)
{
-register int i;
-Display * dpy;
-XkbDescPtr xkb;
-XkbGeometryPtr geom;
-unsigned size;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- if ((!xkb)||(!xkb->geom))
- return 0;
- geom= xkb->geom;
- size= xkmSizeCountedAtomString(dpy,geom->name);
- size+= SIZEOF(xkmGeometryDesc);
- size+= xkmSizeCountedString(geom->label_font);
+ register int i;
+ Display *dpy;
+ XkbDescPtr xkb;
+ XkbGeometryPtr geom;
+ unsigned size;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ if ((!xkb) || (!xkb->geom))
+ return 0;
+ geom = xkb->geom;
+ size = xkmSizeCountedAtomString(dpy, geom->name);
+ size += SIZEOF(xkmGeometryDesc);
+ size += xkmSizeCountedString(geom->label_font);
if (geom->properties) {
- XkbPropertyPtr prop;
- for (i=0,prop=geom->properties;i<geom->num_properties;i++,prop++) {
- size+= xkmSizeCountedString(prop->name);
- size+= xkmSizeCountedString(prop->value);
- }
+ XkbPropertyPtr prop;
+
+ for (i = 0, prop = geom->properties; i < geom->num_properties;
+ i++, prop++) {
+ size += xkmSizeCountedString(prop->name);
+ size += xkmSizeCountedString(prop->value);
+ }
}
if (geom->colors) {
- XkbColorPtr color;
- for (i=0,color=geom->colors;i<geom->num_colors;i++,color++) {
- size+= xkmSizeCountedString(color->spec);
- }
+ XkbColorPtr color;
+
+ for (i = 0, color = geom->colors; i < geom->num_colors; i++, color++) {
+ size += xkmSizeCountedString(color->spec);
+ }
}
if (geom->shapes) {
- XkbShapePtr shape;
- for (i=0,shape=geom->shapes;i<geom->num_shapes;i++,shape++) {
- register int n;
- register XkbOutlinePtr ol;
- size+= xkmSizeCountedAtomString(dpy,shape->name);
- size+= SIZEOF(xkmShapeDesc);
- for (n=0,ol=shape->outlines;n<shape->num_outlines;n++,ol++) {
- size+= SIZEOF(xkmOutlineDesc);
- size+= ol->num_points*SIZEOF(xkmPointDesc);
- }
- }
+ XkbShapePtr shape;
+
+ for (i = 0, shape = geom->shapes; i < geom->num_shapes; i++, shape++) {
+ register int n;
+ register XkbOutlinePtr ol;
+
+ size += xkmSizeCountedAtomString(dpy, shape->name);
+ size += SIZEOF(xkmShapeDesc);
+ for (n = 0, ol = shape->outlines; n < shape->num_outlines;
+ n++, ol++) {
+ size += SIZEOF(xkmOutlineDesc);
+ size += ol->num_points * SIZEOF(xkmPointDesc);
+ }
+ }
}
if (geom->sections) {
- XkbSectionPtr section;
- for (i=0,section=geom->sections;i<geom->num_sections;i++,section++) {
- size+= SizeXKMGeomSection(result,section);
- }
+ XkbSectionPtr section;
+
+ for (i = 0, section = geom->sections; i < geom->num_sections;
+ i++, section++) {
+ size += SizeXKMGeomSection(result, section);
+ }
}
- if (geom->doodads) {
- XkbDoodadPtr doodad;
- for (i=0,doodad=geom->doodads;i<geom->num_doodads;i++,doodad++) {
- size+= SizeXKMGeomDoodad(result,doodad);
- }
+ if (geom->doodads) {
+ XkbDoodadPtr doodad;
+
+ for (i = 0, doodad = geom->doodads; i < geom->num_doodads;
+ i++, doodad++) {
+ size += SizeXKMGeomDoodad(result, doodad);
+ }
}
if (geom->key_aliases) {
- size+= geom->num_key_aliases*(XkbKeyNameLength*2);
+ size += geom->num_key_aliases * (XkbKeyNameLength * 2);
}
- toc->type= XkmGeometryIndex;
- toc->format= MSBFirst;
- toc->size= size+SIZEOF(xkmSectionInfo);
- toc->offset= (*offset_inout);
- (*offset_inout)+= toc->size;
+ toc->type = XkmGeometryIndex;
+ toc->format = MSBFirst;
+ toc->size = size + SIZEOF(xkmSectionInfo);
+ toc->offset = (*offset_inout);
+ (*offset_inout) += toc->size;
return 1;
}
static unsigned
-WriteXKMGeomDoodad(FILE *file,XkbFileInfo *result,XkbDoodadPtr doodad)
+WriteXKMGeomDoodad(FILE *file, XkbFileInfo *result, XkbDoodadPtr doodad)
{
-Display * dpy;
-XkbDescPtr xkb;
-xkmDoodadDesc doodadWire;
-unsigned tmp,size= 0;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- bzero((char *)&doodadWire,sizeof(doodadWire));
- doodadWire.any.type= doodad->any.type;
- doodadWire.any.priority= doodad->any.priority;
- doodadWire.any.top= doodad->any.top;
- doodadWire.any.left= doodad->any.left;
+ Display *dpy;
+ XkbDescPtr xkb;
+ xkmDoodadDesc doodadWire;
+ unsigned tmp, size = 0;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ bzero((char *) &doodadWire, sizeof(doodadWire));
+ doodadWire.any.type = doodad->any.type;
+ doodadWire.any.priority = doodad->any.priority;
+ doodadWire.any.top = doodad->any.top;
+ doodadWire.any.left = doodad->any.left;
switch (doodad->any.type) {
- case XkbOutlineDoodad:
- case XkbSolidDoodad:
- doodadWire.shape.angle= doodad->shape.angle;
- doodadWire.shape.color_ndx= doodad->shape.color_ndx;
- doodadWire.shape.shape_ndx= doodad->shape.shape_ndx;
- break;
- case XkbTextDoodad:
- doodadWire.text.angle= doodad->text.angle;
- doodadWire.text.width= doodad->text.width;
- doodadWire.text.height= doodad->text.height;
- doodadWire.text.color_ndx= doodad->text.color_ndx;
- break;
- case XkbIndicatorDoodad:
- doodadWire.indicator.shape_ndx= doodad->indicator.shape_ndx;
- doodadWire.indicator.on_color_ndx= doodad->indicator.on_color_ndx;
- doodadWire.indicator.off_color_ndx= doodad->indicator.off_color_ndx;
- break;
- case XkbLogoDoodad:
- doodadWire.logo.angle= doodad->logo.angle;
- doodadWire.logo.color_ndx= doodad->logo.color_ndx;
- doodadWire.logo.shape_ndx= doodad->logo.shape_ndx;
- break;
- default:
- _XkbLibError(_XkbErrIllegalDoodad,"WriteXKMGeomDoodad",
- doodad->any.type);
- return 0;
+ case XkbOutlineDoodad:
+ case XkbSolidDoodad:
+ doodadWire.shape.angle = doodad->shape.angle;
+ doodadWire.shape.color_ndx = doodad->shape.color_ndx;
+ doodadWire.shape.shape_ndx = doodad->shape.shape_ndx;
+ break;
+ case XkbTextDoodad:
+ doodadWire.text.angle = doodad->text.angle;
+ doodadWire.text.width = doodad->text.width;
+ doodadWire.text.height = doodad->text.height;
+ doodadWire.text.color_ndx = doodad->text.color_ndx;
+ break;
+ case XkbIndicatorDoodad:
+ doodadWire.indicator.shape_ndx = doodad->indicator.shape_ndx;
+ doodadWire.indicator.on_color_ndx = doodad->indicator.on_color_ndx;
+ doodadWire.indicator.off_color_ndx = doodad->indicator.off_color_ndx;
+ break;
+ case XkbLogoDoodad:
+ doodadWire.logo.angle = doodad->logo.angle;
+ doodadWire.logo.color_ndx = doodad->logo.color_ndx;
+ doodadWire.logo.shape_ndx = doodad->logo.shape_ndx;
+ break;
+ default:
+ _XkbLibError(_XkbErrIllegalDoodad, "WriteXKMGeomDoodad",
+ doodad->any.type);
+ return 0;
}
- size+= xkmPutCountedAtomString(dpy,file,doodad->any.name);
- tmp= fwrite(&doodadWire,SIZEOF(xkmDoodadDesc),1,file);
- size+= tmp*SIZEOF(xkmDoodadDesc);
- if (doodad->any.type==XkbTextDoodad) {
- size+= xkmPutCountedString(file,doodad->text.text);
- size+= xkmPutCountedString(file,doodad->text.font);
+ size += xkmPutCountedAtomString(dpy, file, doodad->any.name);
+ tmp = fwrite(&doodadWire, SIZEOF(xkmDoodadDesc), 1, file);
+ size += tmp * SIZEOF(xkmDoodadDesc);
+ if (doodad->any.type == XkbTextDoodad) {
+ size += xkmPutCountedString(file, doodad->text.text);
+ size += xkmPutCountedString(file, doodad->text.font);
}
- else if (doodad->any.type==XkbLogoDoodad) {
- size+= xkmPutCountedString(file,doodad->logo.logo_name);
+ else if (doodad->any.type == XkbLogoDoodad) {
+ size += xkmPutCountedString(file, doodad->logo.logo_name);
}
return size;
}
static unsigned
-WriteXKMGeomOverlay(FILE *file,XkbFileInfo *result,XkbOverlayPtr ol)
+WriteXKMGeomOverlay(FILE *file, XkbFileInfo *result, XkbOverlayPtr ol)
{
-register int r,k;
-Display * dpy;
-XkbDescPtr xkb;
-XkbOverlayRowPtr row;
-xkmOverlayDesc olWire;
-xkmOverlayRowDesc rowWire;
-xkmOverlayKeyDesc keyWire;
-unsigned tmp,size= 0;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- bzero((char *)&olWire,sizeof(olWire));
- bzero((char *)&rowWire,sizeof(rowWire));
- bzero((char *)&keyWire,sizeof(keyWire));
- size+= xkmPutCountedAtomString(dpy,file,ol->name);
- olWire.num_rows= ol->num_rows;
- tmp= fwrite(&olWire,SIZEOF(xkmOverlayDesc),1,file);
- size+= tmp*SIZEOF(xkmOverlayDesc);
- for (r=0,row=ol->rows;r<ol->num_rows;r++,row++) {
- XkbOverlayKeyPtr key;
- rowWire.row_under= row->row_under;
- rowWire.num_keys= row->num_keys;
- tmp= fwrite(&rowWire,SIZEOF(xkmOverlayRowDesc),1,file);
- size+= tmp*SIZEOF(xkmOverlayRowDesc);
- for (k=0,key=row->keys;k<row->num_keys;k++,key++) {
- memcpy(keyWire.over,key->over.name,XkbKeyNameLength);
- memcpy(keyWire.under,key->under.name,XkbKeyNameLength);
- tmp= fwrite(&keyWire,SIZEOF(xkmOverlayKeyDesc),1,file);
- size+= tmp*SIZEOF(xkmOverlayKeyDesc);
- }
+ register int r, k;
+ Display *dpy;
+ XkbDescPtr xkb;
+ XkbOverlayRowPtr row;
+ xkmOverlayDesc olWire;
+ xkmOverlayRowDesc rowWire;
+ xkmOverlayKeyDesc keyWire;
+ unsigned tmp, size = 0;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ bzero((char *) &olWire, sizeof(olWire));
+ bzero((char *) &rowWire, sizeof(rowWire));
+ bzero((char *) &keyWire, sizeof(keyWire));
+ size += xkmPutCountedAtomString(dpy, file, ol->name);
+ olWire.num_rows = ol->num_rows;
+ tmp = fwrite(&olWire, SIZEOF(xkmOverlayDesc), 1, file);
+ size += tmp * SIZEOF(xkmOverlayDesc);
+ for (r = 0, row = ol->rows; r < ol->num_rows; r++, row++) {
+ XkbOverlayKeyPtr key;
+
+ rowWire.row_under = row->row_under;
+ rowWire.num_keys = row->num_keys;
+ tmp = fwrite(&rowWire, SIZEOF(xkmOverlayRowDesc), 1, file);
+ size += tmp * SIZEOF(xkmOverlayRowDesc);
+ for (k = 0, key = row->keys; k < row->num_keys; k++, key++) {
+ memcpy(keyWire.over, key->over.name, XkbKeyNameLength);
+ memcpy(keyWire.under, key->under.name, XkbKeyNameLength);
+ tmp = fwrite(&keyWire, SIZEOF(xkmOverlayKeyDesc), 1, file);
+ size += tmp * SIZEOF(xkmOverlayKeyDesc);
+ }
}
return size;
}
static unsigned
-WriteXKMGeomSection(FILE *file,XkbFileInfo *result,XkbSectionPtr section)
+WriteXKMGeomSection(FILE *file, XkbFileInfo *result, XkbSectionPtr section)
{
-register int i;
-Display * dpy;
-XkbDescPtr xkb;
-xkmSectionDesc sectionWire;
-unsigned tmp,size= 0;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- size+= xkmPutCountedAtomString(dpy,file,section->name);
- sectionWire.top= section->top;
- sectionWire.left= section->left;
- sectionWire.width= section->width;
- sectionWire.height= section->height;
- sectionWire.angle= section->angle;
- sectionWire.priority= section->priority;
- sectionWire.num_rows= section->num_rows;
- sectionWire.num_doodads= section->num_doodads;
- sectionWire.num_overlays= section->num_overlays;
- tmp= fwrite(&sectionWire,SIZEOF(xkmSectionDesc),1,file);
- size+= tmp*SIZEOF(xkmSectionDesc);
+ register int i;
+ Display *dpy;
+ XkbDescPtr xkb;
+ xkmSectionDesc sectionWire;
+ unsigned tmp, size = 0;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ size += xkmPutCountedAtomString(dpy, file, section->name);
+ sectionWire.top = section->top;
+ sectionWire.left = section->left;
+ sectionWire.width = section->width;
+ sectionWire.height = section->height;
+ sectionWire.angle = section->angle;
+ sectionWire.priority = section->priority;
+ sectionWire.num_rows = section->num_rows;
+ sectionWire.num_doodads = section->num_doodads;
+ sectionWire.num_overlays = section->num_overlays;
+ tmp = fwrite(&sectionWire, SIZEOF(xkmSectionDesc), 1, file);
+ size += tmp * SIZEOF(xkmSectionDesc);
if (section->rows) {
- register unsigned k;
- XkbRowPtr row;
- xkmRowDesc rowWire;
- XkbKeyPtr key;
- xkmKeyDesc keyWire;
- for (i=0,row=section->rows;i<section->num_rows;i++,row++) {
- rowWire.top= row->top;
- rowWire.left= row->left;
- rowWire.num_keys= row->num_keys;
- rowWire.vertical= row->vertical;
- tmp= fwrite(&rowWire,SIZEOF(xkmRowDesc),1,file);
- size+= tmp*SIZEOF(xkmRowDesc);
- for (k=0,key=row->keys;k<row->num_keys;k++,key++) {
- memcpy(keyWire.name,key->name.name,XkbKeyNameLength);
- keyWire.gap= key->gap;
- keyWire.shape_ndx= key->shape_ndx;
- keyWire.color_ndx= key->color_ndx;
- tmp= fwrite(&keyWire,SIZEOF(xkmKeyDesc),1,file);
- size+= tmp*SIZEOF(xkmKeyDesc);
- }
- }
+ register unsigned k;
+ XkbRowPtr row;
+ xkmRowDesc rowWire;
+ XkbKeyPtr key;
+ xkmKeyDesc keyWire;
+
+ for (i = 0, row = section->rows; i < section->num_rows; i++, row++) {
+ rowWire.top = row->top;
+ rowWire.left = row->left;
+ rowWire.num_keys = row->num_keys;
+ rowWire.vertical = row->vertical;
+ tmp = fwrite(&rowWire, SIZEOF(xkmRowDesc), 1, file);
+ size += tmp * SIZEOF(xkmRowDesc);
+ for (k = 0, key = row->keys; k < row->num_keys; k++, key++) {
+ memcpy(keyWire.name, key->name.name, XkbKeyNameLength);
+ keyWire.gap = key->gap;
+ keyWire.shape_ndx = key->shape_ndx;
+ keyWire.color_ndx = key->color_ndx;
+ tmp = fwrite(&keyWire, SIZEOF(xkmKeyDesc), 1, file);
+ size += tmp * SIZEOF(xkmKeyDesc);
+ }
+ }
}
if (section->doodads) {
- XkbDoodadPtr doodad;
- for (i=0,doodad=section->doodads;i<section->num_doodads;i++,doodad++) {
- size+= WriteXKMGeomDoodad(file,result,doodad);
- }
+ XkbDoodadPtr doodad;
+
+ for (i = 0, doodad = section->doodads; i < section->num_doodads;
+ i++, doodad++) {
+ size += WriteXKMGeomDoodad(file, result, doodad);
+ }
}
if (section->overlays) {
- XkbOverlayPtr ol;
- for (i=0,ol=section->overlays;i<section->num_overlays;i++,ol++) {
- size+= WriteXKMGeomOverlay(file,result,ol);
- }
+ XkbOverlayPtr ol;
+
+ for (i = 0, ol = section->overlays; i < section->num_overlays;
+ i++, ol++) {
+ size += WriteXKMGeomOverlay(file, result, ol);
+ }
}
return size;
}
static unsigned
-WriteXKMGeometry(FILE *file,XkbFileInfo *result)
+WriteXKMGeometry(FILE *file, XkbFileInfo *result)
{
-register int i;
-Display * dpy;
-XkbDescPtr xkb;
-XkbGeometryPtr geom;
-xkmGeometryDesc wire;
-unsigned tmp,size= 0;
-
- xkb= result->xkb;
- dpy= xkb->dpy;
- if ((!xkb)||(!xkb->geom))
- return 0;
- geom= xkb->geom;
- wire.width_mm= geom->width_mm;
- wire.height_mm= geom->height_mm;
- wire.base_color_ndx= XkbGeomColorIndex(geom,geom->base_color);
- wire.label_color_ndx= XkbGeomColorIndex(geom,geom->label_color);
- wire.num_properties= geom->num_properties;
- wire.num_colors= geom->num_colors;
- wire.num_shapes= geom->num_shapes;
- wire.num_sections= geom->num_sections;
- wire.num_doodads= geom->num_doodads;
- wire.num_key_aliases= geom->num_key_aliases;
- size+= xkmPutCountedAtomString(dpy,file,geom->name);
- tmp= fwrite(&wire,SIZEOF(xkmGeometryDesc),1,file);
- size+= tmp*SIZEOF(xkmGeometryDesc);
- size+= xkmPutCountedString(file,geom->label_font);
+ register int i;
+ Display *dpy;
+ XkbDescPtr xkb;
+ XkbGeometryPtr geom;
+ xkmGeometryDesc wire;
+ unsigned tmp, size = 0;
+
+ xkb = result->xkb;
+ dpy = xkb->dpy;
+ if ((!xkb) || (!xkb->geom))
+ return 0;
+ geom = xkb->geom;
+ wire.width_mm = geom->width_mm;
+ wire.height_mm = geom->height_mm;
+ wire.base_color_ndx = XkbGeomColorIndex(geom, geom->base_color);
+ wire.label_color_ndx = XkbGeomColorIndex(geom, geom->label_color);
+ wire.num_properties = geom->num_properties;
+ wire.num_colors = geom->num_colors;
+ wire.num_shapes = geom->num_shapes;
+ wire.num_sections = geom->num_sections;
+ wire.num_doodads = geom->num_doodads;
+ wire.num_key_aliases = geom->num_key_aliases;
+ size += xkmPutCountedAtomString(dpy, file, geom->name);
+ tmp = fwrite(&wire, SIZEOF(xkmGeometryDesc), 1, file);
+ size += tmp * SIZEOF(xkmGeometryDesc);
+ size += xkmPutCountedString(file, geom->label_font);
if (geom->properties) {
- XkbPropertyPtr prop;
- for (i=0,prop=geom->properties;i<geom->num_properties;i++,prop++) {
- size+= xkmPutCountedString(file,prop->name);
- size+= xkmPutCountedString(file,prop->value);
- }
+ XkbPropertyPtr prop;
+
+ for (i = 0, prop = geom->properties; i < geom->num_properties;
+ i++, prop++) {
+ size += xkmPutCountedString(file, prop->name);
+ size += xkmPutCountedString(file, prop->value);
+ }
}
if (geom->colors) {
- XkbColorPtr color;
- for (i=0,color=geom->colors;i<geom->num_colors;i++,color++) {
- size+= xkmPutCountedString(file,color->spec);
- }
+ XkbColorPtr color;
+
+ for (i = 0, color = geom->colors; i < geom->num_colors; i++, color++) {
+ size += xkmPutCountedString(file, color->spec);
+ }
}
if (geom->shapes) {
- XkbShapePtr shape;
- xkmShapeDesc shapeWire;
-
- for (i=0,shape=geom->shapes;i<geom->num_shapes;i++,shape++) {
- register int n;
- XkbOutlinePtr ol;
- xkmOutlineDesc olWire;
- bzero((char *)&shapeWire,sizeof(xkmShapeDesc));
- size+= xkmPutCountedAtomString(dpy,file,shape->name);
- shapeWire.num_outlines= shape->num_outlines;
- if (shape->primary!=NULL)
- shapeWire.primary_ndx= XkbOutlineIndex(shape,shape->primary);
- else shapeWire.primary_ndx= XkbNoShape;
- if (shape->approx!=NULL)
- shapeWire.approx_ndx= XkbOutlineIndex(shape,shape->approx);
- else shapeWire.approx_ndx= XkbNoShape;
- tmp= fwrite(&shapeWire,SIZEOF(xkmShapeDesc),1,file);
- size+= tmp*SIZEOF(xkmShapeDesc);
- for (n=0,ol=shape->outlines;n<shape->num_outlines;n++,ol++) {
- register int p;
- XkbPointPtr pt;
- xkmPointDesc ptWire;
- olWire.num_points= ol->num_points;
- olWire.corner_radius= ol->corner_radius;
- tmp= fwrite(&olWire,SIZEOF(xkmOutlineDesc),1,file);
- size+= tmp*SIZEOF(xkmOutlineDesc);
- for (p=0,pt=ol->points;p<ol->num_points;p++,pt++) {
- ptWire.x= pt->x;
- ptWire.y= pt->y;
- tmp= fwrite(&ptWire,SIZEOF(xkmPointDesc),1,file);
- size+= tmp*SIZEOF(xkmPointDesc);
- }
- }
- }
+ XkbShapePtr shape;
+ xkmShapeDesc shapeWire;
+
+ for (i = 0, shape = geom->shapes; i < geom->num_shapes; i++, shape++) {
+ register int n;
+ XkbOutlinePtr ol;
+ xkmOutlineDesc olWire;
+
+ bzero((char *) &shapeWire, sizeof(xkmShapeDesc));
+ size += xkmPutCountedAtomString(dpy, file, shape->name);
+ shapeWire.num_outlines = shape->num_outlines;
+ if (shape->primary != NULL)
+ shapeWire.primary_ndx = XkbOutlineIndex(shape, shape->primary);
+ else
+ shapeWire.primary_ndx = XkbNoShape;
+ if (shape->approx != NULL)
+ shapeWire.approx_ndx = XkbOutlineIndex(shape, shape->approx);
+ else
+ shapeWire.approx_ndx = XkbNoShape;
+ tmp = fwrite(&shapeWire, SIZEOF(xkmShapeDesc), 1, file);
+ size += tmp * SIZEOF(xkmShapeDesc);
+ for (n = 0, ol = shape->outlines; n < shape->num_outlines;
+ n++, ol++) {
+ register int p;
+ XkbPointPtr pt;
+ xkmPointDesc ptWire;
+
+ olWire.num_points = ol->num_points;
+ olWire.corner_radius = ol->corner_radius;
+ tmp = fwrite(&olWire, SIZEOF(xkmOutlineDesc), 1, file);
+ size += tmp * SIZEOF(xkmOutlineDesc);
+ for (p = 0, pt = ol->points; p < ol->num_points; p++, pt++) {
+ ptWire.x = pt->x;
+ ptWire.y = pt->y;
+ tmp = fwrite(&ptWire, SIZEOF(xkmPointDesc), 1, file);
+ size += tmp * SIZEOF(xkmPointDesc);
+ }
+ }
+ }
}
if (geom->sections) {
- XkbSectionPtr section;
- for (i=0,section=geom->sections;i<geom->num_sections;i++,section++) {
- size+= WriteXKMGeomSection(file,result,section);
- }
+ XkbSectionPtr section;
+
+ for (i = 0, section = geom->sections; i < geom->num_sections;
+ i++, section++) {
+ size += WriteXKMGeomSection(file, result, section);
+ }
}
if (geom->doodads) {
- XkbDoodadPtr doodad;
- for (i=0,doodad=geom->doodads;i<geom->num_doodads;i++,doodad++) {
- size+= WriteXKMGeomDoodad(file,result,doodad);
- }
+ XkbDoodadPtr doodad;
+
+ for (i = 0, doodad = geom->doodads; i < geom->num_doodads;
+ i++, doodad++) {
+ size += WriteXKMGeomDoodad(file, result, doodad);
+ }
}
if (geom->key_aliases) {
- tmp= fwrite(geom->key_aliases,2*XkbKeyNameLength,geom->num_key_aliases,
- file);
- size+= tmp*(2*XkbKeyNameLength);
+ tmp =
+ fwrite(geom->key_aliases, 2 * XkbKeyNameLength,
+ geom->num_key_aliases, file);
+ size += tmp * (2 * XkbKeyNameLength);
}
return size;
}
@@ -1104,197 +1171,181 @@ unsigned tmp,size= 0;
/*ARGSUSED*/
static int
-GetXKMKeyNamesTOC( XkbFileInfo * result,
- XkmInfo * info,
- int max_toc,
- xkmSectionInfo *toc_rtrn)
+GetXKMKeyNamesTOC(XkbFileInfo *result, XkmInfo *info,
+ int max_toc, xkmSectionInfo *toc_rtrn)
{
-int num_toc;
-int total_size;
-
- total_size= num_toc=0;
- if (SizeXKMKeycodes(result,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMIndicators(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
+ int num_toc;
+ int total_size;
+
+ total_size = num_toc = 0;
+ if (SizeXKMKeycodes(result, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMIndicators(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
return num_toc;
}
/*ARGSUSED*/
static int
-GetXKMTypesTOC( XkbFileInfo * result,
- XkmInfo * info,
- int max_toc,
- xkmSectionInfo *toc_rtrn)
+GetXKMTypesTOC(XkbFileInfo *result, XkmInfo *info,
+ int max_toc, xkmSectionInfo *toc_rtrn)
{
-int num_toc;
-int total_size;
-
- total_size= num_toc=0;
- if (SizeXKMVirtualMods(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMKeyTypes(result,&toc_rtrn[num_toc],&total_size))
- num_toc++;
+ int num_toc;
+ int total_size;
+
+ total_size = num_toc = 0;
+ if (SizeXKMVirtualMods(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMKeyTypes(result, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
return num_toc;
}
/*ARGSUSED*/
static int
-GetXKMCompatMapTOC( XkbFileInfo * result,
- XkmInfo * info,
- int max_toc,
- xkmSectionInfo *toc_rtrn)
+GetXKMCompatMapTOC(XkbFileInfo *result, XkmInfo *info,
+ int max_toc, xkmSectionInfo *toc_rtrn)
{
-int num_toc;
-int total_size;
-
- total_size= num_toc=0;
- if (SizeXKMVirtualMods(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMCompatMap(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMIndicators(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
+ int num_toc;
+ int total_size;
+
+ total_size = num_toc = 0;
+ if (SizeXKMVirtualMods(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMCompatMap(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMIndicators(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
return num_toc;
}
/*ARGSUSED*/
static int
-GetXKMSemanticsTOC( XkbFileInfo * result,
- XkmInfo * info,
- int max_toc,
- xkmSectionInfo *toc_rtrn)
+GetXKMSemanticsTOC(XkbFileInfo *result, XkmInfo *info,
+ int max_toc, xkmSectionInfo *toc_rtrn)
{
-int num_toc;
-int total_size;
-
- total_size= num_toc=0;
- if (SizeXKMVirtualMods(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMKeyTypes(result,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMCompatMap(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMIndicators(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
+ int num_toc;
+ int total_size;
+
+ total_size = num_toc = 0;
+ if (SizeXKMVirtualMods(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMKeyTypes(result, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMCompatMap(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMIndicators(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
return num_toc;
}
/*ARGSUSED*/
static int
-GetXKMLayoutTOC( XkbFileInfo * result,
- XkmInfo * info,
- int max_toc,
- xkmSectionInfo *toc_rtrn)
+GetXKMLayoutTOC(XkbFileInfo *result, XkmInfo *info,
+ int max_toc, xkmSectionInfo *toc_rtrn)
{
-int num_toc;
-int total_size;
-
- total_size= num_toc=0;
- if (SizeXKMVirtualMods(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMKeycodes(result,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMKeyTypes(result,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMSymbols(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMIndicators(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMGeometry(result,&toc_rtrn[num_toc],&total_size))
- num_toc++;
+ int num_toc;
+ int total_size;
+
+ total_size = num_toc = 0;
+ if (SizeXKMVirtualMods(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMKeycodes(result, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMKeyTypes(result, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMSymbols(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMIndicators(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMGeometry(result, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
return num_toc;
}
/*ARGSUSED*/
static int
-GetXKMKeymapTOC( XkbFileInfo * result,
- XkmInfo * info,
- int max_toc,
- xkmSectionInfo *toc_rtrn)
+GetXKMKeymapTOC(XkbFileInfo *result, XkmInfo *info,
+ int max_toc, xkmSectionInfo *toc_rtrn)
{
-int num_toc;
-int total_size;
-
- total_size= num_toc=0;
- if (SizeXKMVirtualMods(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMKeycodes(result,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMKeyTypes(result,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMCompatMap(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMSymbols(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMIndicators(result,info,&toc_rtrn[num_toc],&total_size))
- num_toc++;
- if (SizeXKMGeometry(result,&toc_rtrn[num_toc],&total_size))
- num_toc++;
+ int num_toc;
+ int total_size;
+
+ total_size = num_toc = 0;
+ if (SizeXKMVirtualMods(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMKeycodes(result, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMKeyTypes(result, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMCompatMap(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMSymbols(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMIndicators(result, info, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
+ if (SizeXKMGeometry(result, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
return num_toc;
}
/*ARGSUSED*/
static int
-GetXKMGeometryTOC( XkbFileInfo * result,
- XkmInfo * info,
- int max_toc,
- xkmSectionInfo *toc_rtrn)
+GetXKMGeometryTOC(XkbFileInfo *result, XkmInfo *info,
+ int max_toc, xkmSectionInfo *toc_rtrn)
{
-int num_toc;
-int total_size;
+ int num_toc;
+ int total_size;
- total_size= num_toc=0;
- if (SizeXKMGeometry(result,&toc_rtrn[num_toc],&total_size))
- num_toc++;
+ total_size = num_toc = 0;
+ if (SizeXKMGeometry(result, &toc_rtrn[num_toc], &total_size))
+ num_toc++;
return num_toc;
}
static Bool
-WriteXKMFile( FILE * file,
- XkbFileInfo * result,
- int num_toc,
- xkmSectionInfo *toc,
- XkmInfo * info)
+WriteXKMFile(FILE *file, XkbFileInfo *result,
+ int num_toc, xkmSectionInfo *toc, XkmInfo *info)
{
-register int i;
-unsigned tmp,size,total= 0;
-
- for (i=0;i<num_toc;i++) {
- tmp= fwrite(&toc[i],SIZEOF(xkmSectionInfo),1,file);
- total+= tmp*SIZEOF(xkmSectionInfo);
- switch (toc[i].type) {
- case XkmTypesIndex:
- size= WriteXKMKeyTypes(file,result);
- break;
- case XkmCompatMapIndex:
- size= WriteXKMCompatMap(file,result,info);
- break;
- case XkmSymbolsIndex:
- size= WriteXKMSymbols(file,result,info);
- break;
- case XkmIndicatorsIndex:
- size= WriteXKMIndicators(file,result,info);
- break;
- case XkmKeyNamesIndex:
- size= WriteXKMKeycodes(file,result);
- break;
- case XkmGeometryIndex:
- size= WriteXKMGeometry(file,result);
- break;
- case XkmVirtualModsIndex:
- size= WriteXKMVirtualMods(file,result,info);
- break;
- default:
- _XkbLibError(_XkbErrIllegalTOCType,"WriteXKMFile",toc[i].type);
- return False;
- }
- size+= SIZEOF(xkmSectionInfo);
- if (size!=toc[i].size) {
- _XkbLibError(_XkbErrBadLength,XkbConfigText(toc[i].type,XkbMessage),
- size-toc[i].size);
- return False;
- }
+ register int i;
+ unsigned tmp, size, total = 0;
+
+ for (i = 0; i < num_toc; i++) {
+ tmp = fwrite(&toc[i], SIZEOF(xkmSectionInfo), 1, file);
+ total += tmp * SIZEOF(xkmSectionInfo);
+ switch (toc[i].type) {
+ case XkmTypesIndex:
+ size = WriteXKMKeyTypes(file, result);
+ break;
+ case XkmCompatMapIndex:
+ size = WriteXKMCompatMap(file, result, info);
+ break;
+ case XkmSymbolsIndex:
+ size = WriteXKMSymbols(file, result, info);
+ break;
+ case XkmIndicatorsIndex:
+ size = WriteXKMIndicators(file, result, info);
+ break;
+ case XkmKeyNamesIndex:
+ size = WriteXKMKeycodes(file, result);
+ break;
+ case XkmGeometryIndex:
+ size = WriteXKMGeometry(file, result);
+ break;
+ case XkmVirtualModsIndex:
+ size = WriteXKMVirtualMods(file, result, info);
+ break;
+ default:
+ _XkbLibError(_XkbErrIllegalTOCType, "WriteXKMFile", toc[i].type);
+ return False;
+ }
+ size += SIZEOF(xkmSectionInfo);
+ if (size != toc[i].size) {
+ _XkbLibError(_XkbErrBadLength,
+ XkbConfigText(toc[i].type, XkbMessage),
+ size - toc[i].size);
+ return False;
+ }
}
return True;
}
@@ -1303,85 +1354,85 @@ unsigned tmp,size,total= 0;
#define MAX_TOC 16
Bool
-XkbWriteXKMFile(FILE *out,XkbFileInfo *result)
+XkbWriteXKMFile(FILE *out, XkbFileInfo *result)
{
-Bool ok;
-XkbDescPtr xkb;
-XkmInfo info;
-int size_toc,i;
-unsigned hdr,present;
-xkmFileInfo fileInfo;
-xkmSectionInfo toc[MAX_TOC];
-int (*getTOC)(
- XkbFileInfo * /* result */,
- XkmInfo * /* info */,
- int /* max_to */,
- xkmSectionInfo */* toc_rtrn */
-);
+ Bool ok;
+ XkbDescPtr xkb;
+ XkmInfo info;
+ int size_toc, i;
+ unsigned hdr, present;
+ xkmFileInfo fileInfo;
+ xkmSectionInfo toc[MAX_TOC];
+
+ int (*getTOC) (XkbFileInfo * /* result */ ,
+ XkmInfo * /* info */ ,
+ int /* max_to */ ,
+ xkmSectionInfo * /* toc_rtrn */
+ );
switch (result->type) {
- case XkmKeyNamesIndex:
- getTOC= GetXKMKeyNamesTOC;
- break;
- case XkmTypesIndex:
- getTOC= GetXKMTypesTOC;
- break;
- case XkmCompatMapIndex:
- getTOC= GetXKMCompatMapTOC;
- break;
- case XkmSemanticsFile:
- getTOC= GetXKMSemanticsTOC;
- break;
- case XkmLayoutFile:
- getTOC= GetXKMLayoutTOC;
- break;
- case XkmKeymapFile:
- getTOC= GetXKMKeymapTOC;
- break;
- case XkmGeometryFile:
- case XkmGeometryIndex:
- getTOC= GetXKMGeometryTOC;
- break;
- default:
- _XkbLibError(_XkbErrIllegalContents,
- XkbConfigText(result->type,XkbMessage),0);
- return False;
+ case XkmKeyNamesIndex:
+ getTOC = GetXKMKeyNamesTOC;
+ break;
+ case XkmTypesIndex:
+ getTOC = GetXKMTypesTOC;
+ break;
+ case XkmCompatMapIndex:
+ getTOC = GetXKMCompatMapTOC;
+ break;
+ case XkmSemanticsFile:
+ getTOC = GetXKMSemanticsTOC;
+ break;
+ case XkmLayoutFile:
+ getTOC = GetXKMLayoutTOC;
+ break;
+ case XkmKeymapFile:
+ getTOC = GetXKMKeymapTOC;
+ break;
+ case XkmGeometryFile:
+ case XkmGeometryIndex:
+ getTOC = GetXKMGeometryTOC;
+ break;
+ default:
+ _XkbLibError(_XkbErrIllegalContents,
+ XkbConfigText(result->type, XkbMessage), 0);
+ return False;
}
- xkb= result->xkb;
+ xkb = result->xkb;
- bzero((char *)&info,sizeof(XkmInfo));
- size_toc= (*getTOC)(result,&info,MAX_TOC,toc);
- if (size_toc<1) {
- _XkbLibError(_XkbErrEmptyFile,"XkbWriteXKMFile",0);
- return False;
+ bzero((char *) &info, sizeof(XkmInfo));
+ size_toc = (*getTOC) (result, &info, MAX_TOC, toc);
+ if (size_toc < 1) {
+ _XkbLibError(_XkbErrEmptyFile, "XkbWriteXKMFile", 0);
+ return False;
}
- if (out==NULL) {
- _XkbLibError(_XkbErrFileCannotOpen,"XkbWriteXKMFile",0);
- return False;
+ if (out == NULL) {
+ _XkbLibError(_XkbErrFileCannotOpen, "XkbWriteXKMFile", 0);
+ return False;
}
- for (i=present=0;i<size_toc;i++) {
- toc[i].offset+= 4+SIZEOF(xkmFileInfo);
- toc[i].offset+= (size_toc*SIZEOF(xkmSectionInfo));
- if (toc[i].type<=XkmLastIndex) {
- present|= (1<<toc[i].type);
- }
+ for (i = present = 0; i < size_toc; i++) {
+ toc[i].offset += 4 + SIZEOF(xkmFileInfo);
+ toc[i].offset += (size_toc * SIZEOF(xkmSectionInfo));
+ if (toc[i].type <= XkmLastIndex) {
+ present |= (1 << toc[i].type);
+ }
#ifdef DEBUG
- else {
- fprintf(stderr,"Illegal section type %d\n",toc[i].type);
- fprintf(stderr,"Ignored\n");
- }
+ else {
+ fprintf(stderr, "Illegal section type %d\n", toc[i].type);
+ fprintf(stderr, "Ignored\n");
+ }
#endif
}
- hdr= (('x'<<24)|('k'<<16)|('m'<<8)|XkmFileVersion);
- xkmPutCARD32(out,(unsigned long)hdr);
- fileInfo.type= result->type;
- fileInfo.min_kc= xkb->min_key_code;
- fileInfo.max_kc= xkb->max_key_code;
- fileInfo.num_toc= size_toc;
- fileInfo.present= present;
- fileInfo.pad= 0;
- fwrite(&fileInfo,SIZEOF(xkmFileInfo),1,out);
- fwrite(toc,SIZEOF(xkmSectionInfo),size_toc,out);
- ok= WriteXKMFile(out,result,size_toc,toc,&info);
+ hdr = (('x' << 24) | ('k' << 16) | ('m' << 8) | XkmFileVersion);
+ xkmPutCARD32(out, (unsigned long) hdr);
+ fileInfo.type = result->type;
+ fileInfo.min_kc = xkb->min_key_code;
+ fileInfo.max_kc = xkb->max_key_code;
+ fileInfo.num_toc = size_toc;
+ fileInfo.present = present;
+ fileInfo.pad = 0;
+ fwrite(&fileInfo, SIZEOF(xkmFileInfo), 1, out);
+ fwrite(toc, SIZEOF(xkmSectionInfo), size_toc, out);
+ ok = WriteXKMFile(out, result, size_toc, toc, &info);
return ok;
}