Module Name:    xsrc
Committed By:   mrg
Date:           Sun Jul 19 05:52:54 UTC 2015

Modified Files:
        xsrc/external/mit/libFS/dist/src: FSlibInt.c
        xsrc/external/mit/libFS/include: config.h
        xsrc/external/mit/libXvMC/dist/src: XvMC.c
        xsrc/external/mit/libxkbfile/dist/src: cout.c

Log Message:
merge liBFS 1.0.7, libXvMC 1.0.9 and libxkbfile 1.0.9.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 xsrc/external/mit/libFS/dist/src/FSlibInt.c
cvs rdiff -u -r1.5 -r1.6 xsrc/external/mit/libFS/include/config.h
cvs rdiff -u -r1.4 -r1.5 xsrc/external/mit/libXvMC/dist/src/XvMC.c
cvs rdiff -u -r1.2 -r1.3 xsrc/external/mit/libxkbfile/dist/src/cout.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/libFS/dist/src/FSlibInt.c
diff -u xsrc/external/mit/libFS/dist/src/FSlibInt.c:1.4 xsrc/external/mit/libFS/dist/src/FSlibInt.c:1.5
--- xsrc/external/mit/libFS/dist/src/FSlibInt.c:1.4	Fri Jul 11 18:55:24 2014
+++ xsrc/external/mit/libFS/dist/src/FSlibInt.c	Sun Jul 19 05:52:53 2015
@@ -316,7 +316,7 @@ _FSReadPad(
 
     if (size == 0)
 	return;
-    iov[0].iov_len = (int) size;
+    iov[0].iov_len = size;
     iov[0].iov_base = data;
     /*
      * The following hack is used to provide 32 bit long-word aligned padding.
@@ -462,7 +462,7 @@ _FSSend(
 #ifdef undef
 /*
  * _FSAllocID - normal resource ID allocation routine.  A client
- * can roll his own and instatantiate it if he wants, but must
+ * can roll their own and instantiate it if they want, but must
  * follow the rules.
  */
 FSID
@@ -707,7 +707,7 @@ _FSEnq(
 }
 
 /*
- * EventToWire in seperate file in that often not needed.
+ * EventToWire in separate file that is often not needed.
  */
 
 /*ARGSUSED*/

Index: xsrc/external/mit/libFS/include/config.h
diff -u xsrc/external/mit/libFS/include/config.h:1.5 xsrc/external/mit/libFS/include/config.h:1.6
--- xsrc/external/mit/libFS/include/config.h:1.5	Fri Jul 11 18:55:24 2014
+++ xsrc/external/mit/libFS/include/config.h	Sun Jul 19 05:52:53 2015
@@ -63,7 +63,7 @@
 #define PACKAGE_NAME "libFS"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libFS 1.0.6"
+#define PACKAGE_STRING "libFS 1.0.7"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "libFS"
@@ -72,7 +72,7 @@
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.0.6"
+#define PACKAGE_VERSION "1.0.7"
 
 /* Major version of this package */
 #define PACKAGE_VERSION_MAJOR 1
@@ -81,7 +81,7 @@
 #define PACKAGE_VERSION_MINOR 0
 
 /* Patch version of this package */
-#define PACKAGE_VERSION_PATCHLEVEL 6
+#define PACKAGE_VERSION_PATCHLEVEL 7
 
 /* Define as the return type of signal handlers (`int' or `void'). */
 #define RETSIGTYPE void
@@ -96,4 +96,4 @@
 #define UNIXCONN 1
 
 /* Version number of package */
-#define VERSION "1.0.6"
+#define VERSION "1.0.7"

Index: xsrc/external/mit/libXvMC/dist/src/XvMC.c
diff -u xsrc/external/mit/libXvMC/dist/src/XvMC.c:1.4 xsrc/external/mit/libXvMC/dist/src/XvMC.c:1.5
--- xsrc/external/mit/libXvMC/dist/src/XvMC.c:1.4	Sun Mar 16 22:39:09 2014
+++ xsrc/external/mit/libXvMC/dist/src/XvMC.c	Sun Jul 19 05:52:54 2015
@@ -18,17 +18,6 @@
 #include <X11/extensions/extutil.h>
 #include <limits.h>
 
-#ifndef HAVE__XEATDATAWORDS
-static inline void _XEatDataWords(Display *dpy, unsigned long n)
-{
-# ifndef LONG64
-    if (n >= (ULONG_MAX >> 2))
-        _XIOError(dpy);
-# endif
-    _XEatData (dpy, n << 2);
-}
-#endif
-
 static XExtensionInfo _xvmc_info_data;
 static XExtensionInfo *xvmc_info = &_xvmc_info_data;
 static const char *xvmc_extension_name = XvMCName;

Index: xsrc/external/mit/libxkbfile/dist/src/cout.c
diff -u xsrc/external/mit/libxkbfile/dist/src/cout.c:1.2 xsrc/external/mit/libxkbfile/dist/src/cout.c:1.3
--- xsrc/external/mit/libxkbfile/dist/src/cout.c:1.2	Fri Jan 16 14:24:02 2015
+++ xsrc/external/mit/libxkbfile/dist/src/cout.c	Sun Jul 19 05:52:54 2015
@@ -38,1013 +38,1077 @@
 #include "XKMformat.h"
 #include "XKBfileInt.h"
 
-#define	lowbit(x)	((x) & (-(x)))
+#define lowbit(x)       ((x) & (-(x)))
 
 static Bool
-WriteCHdrVMods(FILE *file,Display *dpy,XkbDescPtr xkb)
+WriteCHdrVMods(FILE *file, Display *dpy, XkbDescPtr xkb)
 {
-register int i,nOut;
+    register int i, nOut;
 
-    if ((!xkb)||(!xkb->names))
-	return False;
-    for (i=nOut=0;i<XkbNumVirtualMods;i++) {
-	if (xkb->names->vmods[i]!=None) {
-	    fprintf(file,"%s#define	vmod_%s	%d\n",(nOut<1?"\n":""),
-				XkbAtomText(dpy,xkb->names->vmods[i],XkbCFile),
-				i);
-	    nOut++;
-	}
-    }
-    for (i=nOut=0;i<XkbNumVirtualMods;i++) {
-	if (xkb->names->vmods[i]!=None) {
-	    fprintf(file,"%s#define	vmod_%sMask	(1<<%d)\n",
-				(nOut<1?"\n":""),
-				XkbAtomText(dpy,xkb->names->vmods[i],XkbCFile)
-				,i);
-	    nOut++;
-	}
-    }
-    if (nOut>0)
-	fprintf(file,"\n");
+    if ((!xkb) || (!xkb->names))
+        return False;
+    for (i = nOut = 0; i < XkbNumVirtualMods; i++) {
+        if (xkb->names->vmods[i] != None) {
+            fprintf(file, "%s#define	vmod_%s	%d\n",
+                    (nOut < 1 ? "\n" : ""),
+                    XkbAtomText(dpy, xkb->names->vmods[i], XkbCFile), i);
+            nOut++;
+        }
+    }
+    for (i = nOut = 0; i < XkbNumVirtualMods; i++) {
+        if (xkb->names->vmods[i] != None) {
+            fprintf(file, "%s#define	vmod_%sMask	(1<<%d)\n",
+                    (nOut < 1 ? "\n" : ""),
+                    XkbAtomText(dpy, xkb->names->vmods[i], XkbCFile), i);
+            nOut++;
+        }
+    }
+    if (nOut > 0)
+        fprintf(file, "\n");
     return True;
 }
 
 static Bool
-WriteCHdrKeycodes(FILE *file,XkbDescPtr xkb)
-{
-Atom			kcName;
-register unsigned 	i;
-char 			buf[8];
-
-    if ((!xkb)||(!xkb->names)||(!xkb->names->keys)) {
-	_XkbLibError(_XkbErrMissingNames,"WriteCHdrKeycodes",0);
-	return False;
-    }
-    kcName= xkb->names->keycodes;
-    buf[4]= '\0';
-    if (xkb->names->keycodes!=None)
-	 fprintf(file,"/* keycodes name is \"%s\" */\n",
- 				XkbAtomText(xkb->dpy,kcName,XkbMessage));
-    fprintf(file,"static XkbKeyNameRec	keyNames[NUM_KEYS]= {\n");
-    for (i=0;i<=xkb->max_key_code;i++) {
-	sprintf(buf,"\"%s\"",XkbKeyNameText(xkb->names->keys[i].name,XkbCFile));
-	if (i!=xkb->max_key_code)  {
-	    fprintf(file,"    {  %6s  },",buf);
-	    if ((i&3)==3)
-		fprintf(file,"\n");
-	}
-	else {
-	    fprintf(file,"    {  %6s  }\n",buf);
-	}
+WriteCHdrKeycodes(FILE * file, XkbDescPtr xkb)
+{
+    Atom                kcName;
+    register unsigned   i;
+    char                buf[8];
+
+    if ((!xkb) || (!xkb->names) || (!xkb->names->keys)) {
+        _XkbLibError(_XkbErrMissingNames, "WriteCHdrKeycodes", 0);
+        return False;
+    }
+    kcName = xkb->names->keycodes;
+    buf[4] = '\0';
+    if (xkb->names->keycodes != None)
+        fprintf(file, "/* keycodes name is \"%s\" */\n",
+                XkbAtomText(xkb->dpy, kcName, XkbMessage));
+    fprintf(file, "static XkbKeyNameRec	keyNames[NUM_KEYS]= {\n");
+    for (i = 0; i <= xkb->max_key_code; i++) {
+        snprintf(buf, sizeof(buf), "\"%s\"",
+                 XkbKeyNameText(xkb->names->keys[i].name, XkbCFile));
+        if (i != xkb->max_key_code) {
+            fprintf(file, "    {  %6s  },", buf);
+            if ((i & 3) == 3)
+                fprintf(file, "\n");
+        }
+        else {
+            fprintf(file, "    {  %6s  }\n", buf);
+        }
     }
-    fprintf(file,"};\n");
+    fprintf(file, "};\n");
     return True;
 }
 
 static void
-WriteTypePreserve(	FILE *		file,
-			Display *	dpy,
-			char *		prefix,
-			XkbDescPtr	xkb,
-			XkbKeyTypePtr	type)
-{
-register unsigned	i;
-XkbModsPtr		pre;
-
-    fprintf(file,"static XkbModsRec preserve_%s[%d]= {\n",prefix,
-							type->map_count);
-    for (i=0,pre=type->preserve;i<type->map_count;i++,pre++) {
-	if (i!=0)
-	    fprintf(file,",\n");
-	fprintf(file,"    {   %15s, ",XkbModMaskText(pre->mask,XkbCFile));
-	fprintf(file,"%15s, ",XkbModMaskText(pre->real_mods,XkbCFile));
-	fprintf(file,"%15s }",XkbVModMaskText(dpy,xkb,0,pre->vmods,XkbCFile));
+WriteTypePreserve(FILE *        file,
+                  Display *     dpy,
+                  char *        prefix,
+                  XkbDescPtr    xkb,
+                  XkbKeyTypePtr type)
+{
+    register unsigned i;
+    XkbModsPtr pre;
+
+    fprintf(file, "static XkbModsRec preserve_%s[%d]= {\n", prefix,
+            type->map_count);
+    for (i = 0, pre = type->preserve; i < type->map_count; i++, pre++) {
+        if (i != 0)
+            fprintf(file, ",\n");
+        fprintf(file, "    {   %15s, ", XkbModMaskText(pre->mask, XkbCFile));
+        fprintf(file, "%15s, ", XkbModMaskText(pre->real_mods, XkbCFile));
+        fprintf(file, "%15s }",
+                XkbVModMaskText(dpy, xkb, 0, pre->vmods, XkbCFile));
     }
-    fprintf(file,"\n};\n");
+    fprintf(file, "\n};\n");
     return;
 }
 
 static void
-WriteTypeInitFunc(FILE *file,Display *dpy,XkbDescPtr xkb)
+WriteTypeInitFunc(FILE *file, Display *dpy, XkbDescPtr xkb)
 {
-register unsigned 	i,n;
-XkbKeyTypePtr		type;
-Atom *			names;
-char *			prefix = NULL;
-
-    fprintf(file,"\n\nstatic void\n");
-    fprintf(file,"initTypeNames(DPYTYPE dpy)\n");
-    fprintf(file,"{\n");
-    for (i=0,type=xkb->map->types;i<xkb->map->num_types;i++,type++) {
-	if (!(prefix = strdup(XkbAtomText(dpy,type->name,XkbCFile)))) {
-		_XkbLibError(_XkbErrBadAlloc,"WriteTypeInitFunc",0);
-		fprintf(file,"#error XkbErrBadAlloc WriteTypeInitFunc\n");
-		break;
-	}
-	if (type->name!=None)
-	    fprintf(file,"    dflt_types[%d].name= GET_ATOM(dpy,\"%s\");\n",i,
-					XkbAtomText(dpy,type->name,XkbCFile));
-	names= type->level_names;
-	if (names!=NULL) {
-	    char *tmp;
-	    for (n=0;n<type->num_levels;n++) {
-		if (names[n]==None)
-		    continue;
-		tmp= XkbAtomText(dpy,names[n],XkbCFile);
-		if (tmp==NULL)
-		    continue;
-		fprintf(file,"    lnames_%s[%d]=	",prefix,n);
-		fprintf(file,"GET_ATOM(dpy,\"%s\");\n",tmp);
-	    }
-	}
-	free(prefix);
-	prefix = NULL;
+    register unsigned   i, n;
+    XkbKeyTypePtr       type;
+    Atom *              names;
+    char *              prefix = NULL;
+
+    fprintf(file, "\n\nstatic void\n");
+    fprintf(file, "initTypeNames(DPYTYPE dpy)\n");
+    fprintf(file, "{\n");
+    for (i = 0, type = xkb->map->types; i < xkb->map->num_types; i++, type++) {
+        if (!(prefix = strdup(XkbAtomText(dpy, type->name, XkbCFile)))) {
+            _XkbLibError(_XkbErrBadAlloc, "WriteTypeInitFunc", 0);
+            fprintf(file, "#error XkbErrBadAlloc WriteTypeInitFunc\n");
+            break;
+        }
+        if (type->name != None)
+            fprintf(file, "    dflt_types[%d].name= GET_ATOM(dpy,\"%s\");\n",
+                    i, XkbAtomText(dpy, type->name, XkbCFile));
+        names = type->level_names;
+        if (names != NULL) {
+            char *tmp;
+
+            for (n = 0; n < type->num_levels; n++) {
+                if (names[n] == None)
+                    continue;
+                tmp = XkbAtomText(dpy, names[n], XkbCFile);
+                if (tmp == NULL)
+                    continue;
+                fprintf(file, "    lnames_%s[%d]=	", prefix, n);
+                fprintf(file, "GET_ATOM(dpy,\"%s\");\n", tmp);
+            }
+        }
+        free(prefix);
+        prefix = NULL;
     }
-    fprintf(file,"}\n");
+    fprintf(file, "}\n");
     return;
 }
 
 static Bool
-WriteCHdrKeyTypes(FILE *file,Display *dpy,XkbDescPtr xkb)
+WriteCHdrKeyTypes(FILE *file, Display *dpy, XkbDescPtr xkb)
 {
-register unsigned	i,n;
-XkbClientMapPtr		map;
-XkbKeyTypePtr		type;
-char * 			prefix = NULL;
-
-    if ((!xkb)||(!xkb->map)||(!xkb->map->types)) {
-	_XkbLibError(_XkbErrMissingTypes,"WriteCHdrKeyTypes",0);
-	return False;
-    }
-    if (xkb->map->num_types<XkbNumRequiredTypes) {
-	_XkbLibError(_XkbErrMissingReqTypes,"WriteCHdrKeyTypes",0);
-	return 0;
-    }
-    map= xkb->map;
-    if ((xkb->names!=NULL)&&(xkb->names->types!=None)) {
-	fprintf(file,"/* types name is \"%s\" */\n",
-				XkbAtomText(dpy,xkb->names->types,XkbCFile));
-    }
-    for (i=0,type=map->types;i<map->num_types;i++,type++) {
-	if (!(prefix = strdup(XkbAtomText(dpy,type->name,XkbCFile)))) {
-		_XkbLibError(_XkbErrBadAlloc,"WriteCHdrKeyTypes",0);
-		return False;
-	}
-
-	if (type->map_count>0) {
-	    XkbKTMapEntryPtr	entry;
-	    entry= type->map;
-	    fprintf(file,"static XkbKTMapEntryRec map_%s[%d]= {\n",prefix,
-							type->map_count);
-	    for (n=0;n<(unsigned)type->map_count;n++,entry++) {
-		if (n!=0)
-		    fprintf(file,",\n");
-		fprintf(file,"    { %d, %6d, { %15s, %15s, %15s } }",
-			entry->active,
-			entry->level,
-			XkbModMaskText(entry->mods.mask,XkbCFile),
-			XkbModMaskText(entry->mods.real_mods,XkbCFile),
-			XkbVModMaskText(dpy,xkb,0,entry->mods.vmods,XkbCFile));
-	    }
-	    fprintf(file,"\n};\n");
-
-	    if (type->preserve)
-		WriteTypePreserve(file,dpy,prefix,xkb,type);
-	}
-	if (type->level_names!=NULL) {
-	    fprintf(file,"static Atom lnames_%s[%d];\n",prefix,
-							 type->num_levels);
-	}
-	fprintf(file,"\n");
-	free(prefix);
-	prefix = NULL;
-    }
-    fprintf(file,"static XkbKeyTypeRec dflt_types[]= {\n");
-    for (i=0,type=map->types;i<(unsigned)map->num_types;i++,type++) {
-	if (!(prefix = strdup(XkbAtomText(dpy,type->name,XkbCFile)))) {
-		_XkbLibError(_XkbErrBadAlloc,"WriteCHdrKeyTypes",0);
-		return False;
-	}
-	if (i!=0)	fprintf(file,",\n");
-	fprintf(file,"    {\n	{ %15s, %15s, %15s },\n",
-			XkbModMaskText(type->mods.mask,XkbCFile),
-			XkbModMaskText(type->mods.real_mods,XkbCFile),
-			XkbVModMaskText(dpy,xkb,0,type->mods.vmods,XkbCFile));
-	fprintf(file,"	%d,\n",type->num_levels);
-	fprintf(file,"	%d,",type->map_count);
-	if (type->map_count>0)
-	     fprintf(file,"	map_%s,",prefix);
-	else fprintf(file,"	NULL,");
-	if (type->preserve)
-	     fprintf(file,"	preserve_%s,\n",prefix);
-	else fprintf(file,"	NULL,\n");
-	if (type->level_names!=NULL)
-	     fprintf(file,"	None,	lnames_%s\n    }",prefix);
-	else fprintf(file,"	None,	NULL\n    }");
-	free(prefix);
-	prefix = NULL;
-    }
-    fprintf(file,"\n};\n");
-    fprintf(file,"#define num_dflt_types (sizeof(dflt_types)/sizeof(XkbKeyTypeRec))\n");
-    WriteTypeInitFunc(file,dpy,xkb);
-    return True;
-}
-
-static Bool
-WriteCHdrCompatMap(FILE *file,Display *dpy,XkbDescPtr xkb)
-{
-register unsigned	i;
-XkbCompatMapPtr		compat;
-XkbSymInterpretPtr	interp;
-
-    if ((!xkb)||(!xkb->compat)||(!xkb->compat->sym_interpret)) {
-	_XkbLibError(_XkbErrMissingSymInterps,"WriteCHdrInterp",0);
-	return False;
-    }
-    compat= xkb->compat;
-    if ((xkb->names!=NULL)&&(xkb->names->compat!=None)) {
-	fprintf(file,"/* compat name is \"%s\" */\n",
-				XkbAtomText(dpy,xkb->names->compat,XkbCFile));
-    }
-    fprintf(file,"static XkbSymInterpretRec dfltSI[%d]= {\n",
-						compat->num_si);
-    interp= compat->sym_interpret;
-    for (i=0;i<compat->num_si;i++,interp++) {
-	XkbAction *act;
-	act= (XkbAction *)&interp->act;
-	if (i!=0)	fprintf(file,",\n");
-	fprintf(file,"    {    %s, ",XkbKeysymText(interp->sym,XkbCFile));
-	fprintf(file,"0x%04x,\n",interp->flags);
-	fprintf(file,"         %s, ",XkbSIMatchText(interp->match,XkbCFile));
-	fprintf(file,"%s,\n",XkbModMaskText(interp->mods,XkbCFile));
-	fprintf(file,"         %d,\n",interp->virtual_mod);
-	fprintf(file,"       %s }",XkbActionText(dpy,xkb,act,XkbCFile));
+    register unsigned   i, n;
+    XkbClientMapPtr     map;
+    XkbKeyTypePtr       type;
+    char *              prefix = NULL;
+
+    if ((!xkb) || (!xkb->map) || (!xkb->map->types)) {
+        _XkbLibError(_XkbErrMissingTypes, "WriteCHdrKeyTypes", 0);
+        return False;
+    }
+    if (xkb->map->num_types < XkbNumRequiredTypes) {
+        _XkbLibError(_XkbErrMissingReqTypes, "WriteCHdrKeyTypes", 0);
+        return 0;
+    }
+    map = xkb->map;
+    if ((xkb->names != NULL) && (xkb->names->types != None)) {
+        fprintf(file, "/* types name is \"%s\" */\n",
+                XkbAtomText(dpy, xkb->names->types, XkbCFile));
+    }
+    for (i = 0, type = map->types; i < map->num_types; i++, type++) {
+        if (!(prefix = strdup(XkbAtomText(dpy, type->name, XkbCFile)))) {
+            _XkbLibError(_XkbErrBadAlloc, "WriteCHdrKeyTypes", 0);
+            return False;
+        }
+
+        if (type->map_count > 0) {
+            XkbKTMapEntryPtr entry;
+
+            entry = type->map;
+            fprintf(file, "static XkbKTMapEntryRec map_%s[%d]= {\n", prefix,
+                    type->map_count);
+            for (n = 0; n < (unsigned) type->map_count; n++, entry++) {
+                if (n != 0)
+                    fprintf(file, ",\n");
+                fprintf(file, "    { %d, %6d, { %15s, %15s, %15s } }",
+                        entry->active,
+                        entry->level,
+                        XkbModMaskText(entry->mods.mask, XkbCFile),
+                        XkbModMaskText(entry->mods.real_mods, XkbCFile),
+                        XkbVModMaskText(dpy, xkb, 0, entry->mods.vmods,
+                                        XkbCFile));
+            }
+            fprintf(file, "\n};\n");
+
+            if (type->preserve)
+                WriteTypePreserve(file, dpy, prefix, xkb, type);
+        }
+        if (type->level_names != NULL) {
+            fprintf(file, "static Atom lnames_%s[%d];\n", prefix,
+                    type->num_levels);
+        }
+        fprintf(file, "\n");
+        free(prefix);
+        prefix = NULL;
+    }
+    fprintf(file, "static XkbKeyTypeRec dflt_types[]= {\n");
+    for (i = 0, type = map->types; i < (unsigned) map->num_types; i++, type++) {
+        if (!(prefix = strdup(XkbAtomText(dpy, type->name, XkbCFile)))) {
+            _XkbLibError(_XkbErrBadAlloc, "WriteCHdrKeyTypes", 0);
+            return False;
+        }
+        if (i != 0)
+            fprintf(file, ",\n");
+        fprintf(file, "    {\n	{ %15s, %15s, %15s },\n",
+                XkbModMaskText(type->mods.mask, XkbCFile),
+                XkbModMaskText(type->mods.real_mods, XkbCFile),
+                XkbVModMaskText(dpy, xkb, 0, type->mods.vmods, XkbCFile));
+        fprintf(file, "	%d,\n", type->num_levels);
+        fprintf(file, "	%d,", type->map_count);
+        if (type->map_count > 0)
+            fprintf(file, "	map_%s,", prefix);
+        else
+            fprintf(file, "	NULL,");
+        if (type->preserve)
+            fprintf(file, "	preserve_%s,\n", prefix);
+        else
+            fprintf(file, "	NULL,\n");
+        if (type->level_names != NULL)
+            fprintf(file, "	None,	lnames_%s\n    }", prefix);
+        else
+            fprintf(file, "	None,	NULL\n    }");
+        free(prefix);
+        prefix = NULL;
     }
-    fprintf(file,"\n};\n");
+    fprintf(file, "\n};\n");
     fprintf(file,
-	   "#define num_dfltSI (sizeof(dfltSI)/sizeof(XkbSymInterpretRec))\n");
-    fprintf(file,"\nstatic XkbCompatMapRec compatMap= {\n");
-    fprintf(file,"    dfltSI,\n");
-    fprintf(file,"    {   /* group compatibility */\n        ");
-    for (i=0;i<XkbNumKbdGroups;i++) {
-	XkbModsPtr gc;
-	gc= &xkb->compat->groups[i];
-	fprintf(file,"%s{ %12s, %12s, %12s }",
-			((i==0)?"":",\n        "),
-			XkbModMaskText(gc->mask,XkbCFile),
-			XkbModMaskText(gc->real_mods,XkbCFile),
-			XkbVModMaskText(xkb->dpy,xkb,0,gc->vmods,XkbCFile));
-    }
-    fprintf(file,"\n    },\n");
-    fprintf(file,"    num_dfltSI, num_dfltSI\n");
-    fprintf(file,"};\n\n");
-    return True;
-}
-
-static Bool
-WriteCHdrSymbols(FILE *file,XkbDescPtr xkb)
-{
-register unsigned i;
-
-    if ((!xkb)||(!xkb->map)||(!xkb->map->syms)||(!xkb->map->key_sym_map)) {
-	_XkbLibError(_XkbErrMissingSymbols,"WriteCHdrSymbols",0);
-	return False;
-    }
-    fprintf(file,"#define NUM_SYMBOLS	%d\n",xkb->map->num_syms);
-    if (xkb->map->num_syms>0) {
-	register KeySym *sym;
-	sym= xkb->map->syms;
-	fprintf(file,"static KeySym	symCache[NUM_SYMBOLS]= {\n");
-	for (i=0;i<xkb->map->num_syms;i++,sym++) {
-	    if (i==0)		fprintf(file,"    ");
-	    else if (i%4==0)	fprintf(file,",\n    ");
-	    else		fprintf(file,", ");
-	    fprintf(file,"%15s",XkbKeysymText(*sym,XkbCFile));
-	}
-	fprintf(file,"\n};\n");
-    }
-    if (xkb->max_key_code>0) {
-	register XkbSymMapPtr	map;
-	map= xkb->map->key_sym_map;
-	fprintf(file,"static XkbSymMapRec	symMap[NUM_KEYS]= {\n");
-	for (i=0;i<=xkb->max_key_code;i++,map++) {
-	    if (i==0)		fprintf(file,"    ");
-	    else if ((i&3)==0)	fprintf(file,",\n    ");
-	    else			fprintf(file,", ");
-	    fprintf(file, "{ %2d, 0x%x, %3d }",
-		    map->kt_index[0], map->group_info, map->offset);
-	}
-	fprintf(file,"\n};\n");
+            "#define num_dflt_types (sizeof(dflt_types)/sizeof(XkbKeyTypeRec))\n");
+    WriteTypeInitFunc(file, dpy, xkb);
+    return True;
+}
+
+static Bool
+WriteCHdrCompatMap(FILE *file, Display *dpy, XkbDescPtr xkb)
+{
+    register unsigned   i;
+    XkbCompatMapPtr     compat;
+    XkbSymInterpretPtr  interp;
+
+    if ((!xkb) || (!xkb->compat) || (!xkb->compat->sym_interpret)) {
+        _XkbLibError(_XkbErrMissingSymInterps, "WriteCHdrInterp", 0);
+        return False;
+    }
+    compat = xkb->compat;
+    if ((xkb->names != NULL) && (xkb->names->compat != None)) {
+        fprintf(file, "/* compat name is \"%s\" */\n",
+                XkbAtomText(dpy, xkb->names->compat, XkbCFile));
+    }
+    fprintf(file, "static XkbSymInterpretRec dfltSI[%d]= {\n", compat->num_si);
+    interp = compat->sym_interpret;
+    for (i = 0; i < compat->num_si; i++, interp++) {
+        XkbAction *act;
+
+        act = (XkbAction *) &interp->act;
+        if (i != 0)
+            fprintf(file, ",\n");
+        fprintf(file, "    {    %s, ", XkbKeysymText(interp->sym, XkbCFile));
+        fprintf(file, "0x%04x,\n", interp->flags);
+        fprintf(file, "         %s, ", XkbSIMatchText(interp->match, XkbCFile));
+        fprintf(file, "%s,\n", XkbModMaskText(interp->mods, XkbCFile));
+        fprintf(file, "         %d,\n", interp->virtual_mod);
+        fprintf(file, "       %s }", XkbActionText(dpy, xkb, act, XkbCFile));
     }
+    fprintf(file, "\n};\n");
+    fprintf(file,
+            "#define num_dfltSI (sizeof(dfltSI)/sizeof(XkbSymInterpretRec))\n");
+    fprintf(file, "\nstatic XkbCompatMapRec compatMap= {\n");
+    fprintf(file, "    dfltSI,\n");
+    fprintf(file, "    {   /* group compatibility */\n        ");
+    for (i = 0; i < XkbNumKbdGroups; i++) {
+        XkbModsPtr gc;
+
+        gc = &xkb->compat->groups[i];
+        fprintf(file, "%s{ %12s, %12s, %12s }",
+                ((i == 0) ? "" : ",\n        "),
+                XkbModMaskText(gc->mask, XkbCFile),
+                XkbModMaskText(gc->real_mods, XkbCFile),
+                XkbVModMaskText(xkb->dpy, xkb, 0, gc->vmods, XkbCFile));
+    }
+    fprintf(file, "\n    },\n");
+    fprintf(file, "    num_dfltSI, num_dfltSI\n");
+    fprintf(file, "};\n\n");
+    return True;
+}
+
+static Bool
+WriteCHdrSymbols(FILE *file, XkbDescPtr xkb)
+{
+    register unsigned i;
+
+    if ((!xkb) || (!xkb->map) || (!xkb->map->syms) || (!xkb->map->key_sym_map)) {
+        _XkbLibError(_XkbErrMissingSymbols, "WriteCHdrSymbols", 0);
+        return False;
+    }
+    fprintf(file, "#define NUM_SYMBOLS	%d\n", xkb->map->num_syms);
+    if (xkb->map->num_syms > 0) {
+        register KeySym *sym;
+
+        sym = xkb->map->syms;
+        fprintf(file, "static KeySym	symCache[NUM_SYMBOLS]= {\n");
+        for (i = 0; i < xkb->map->num_syms; i++, sym++) {
+            if (i == 0)
+                fprintf(file, "    ");
+            else if (i % 4 == 0)
+                fprintf(file, ",\n    ");
+            else
+                fprintf(file, ", ");
+            fprintf(file, "%15s", XkbKeysymText(*sym, XkbCFile));
+        }
+        fprintf(file, "\n};\n");
+    }
+    if (xkb->max_key_code > 0) {
+        register XkbSymMapPtr map;
+
+        map = xkb->map->key_sym_map;
+        fprintf(file, "static XkbSymMapRec	symMap[NUM_KEYS]= {\n");
+        for (i = 0; i <= xkb->max_key_code; i++, map++) {
+            if (i == 0)
+                fprintf(file, "    ");
+            else if ((i & 3) == 0)
+                fprintf(file, ",\n    ");
+            else
+                fprintf(file, ", ");
+            fprintf(file, "{ %2d, 0x%x, %3d }",
+                    map->kt_index[0], map->group_info, map->offset);
+        }
+        fprintf(file, "\n};\n");
+    }
+    return True;
+}
+
+static Bool
+WriteCHdrClientMap(FILE *file, Display *dpy, XkbDescPtr xkb)
+{
+    if ((!xkb) || (!xkb->map) || (!xkb->map->syms) || (!xkb->map->key_sym_map)) {
+        _XkbLibError(_XkbErrMissingSymbols, "WriteCHdrClientMap", 0);
+        return False;
+    }
+    if (!WriteCHdrKeyTypes(file, dpy, xkb))
+        return False;
+    if (!WriteCHdrSymbols(file, xkb))
+        return False;
+    fprintf(file, "static XkbClientMapRec clientMap= {\n");
+    fprintf(file, "    NUM_TYPES,   NUM_TYPES,   types, \n");
+    fprintf(file, "    NUM_SYMBOLS, NUM_SYMBOLS, symCache, symMap\n");
+    fprintf(file, "};\n\n");
     return True;
 }
 
 static Bool
-WriteCHdrClientMap(FILE *file,Display *dpy,XkbDescPtr xkb)
-{
-    if ((!xkb)||(!xkb->map)||(!xkb->map->syms)||(!xkb->map->key_sym_map)) {
-	_XkbLibError(_XkbErrMissingSymbols,"WriteCHdrClientMap",0);
-	return False;
-    }
-    if (!WriteCHdrKeyTypes(file,dpy,xkb))
-	return False;
-    if (!WriteCHdrSymbols(file,xkb))
-	return False;
-    fprintf(file,"static XkbClientMapRec clientMap= {\n");
-    fprintf(file,"    NUM_TYPES,   NUM_TYPES,   types, \n");
-    fprintf(file,"    NUM_SYMBOLS, NUM_SYMBOLS, symCache, symMap\n");
-    fprintf(file,"};\n\n");
-    return True;
-}
-
-static Bool
-WriteCHdrServerMap(FILE *file,Display *dpy,XkbDescPtr xkb)
-{
-register unsigned i;
-
-    if ((!xkb)||(!xkb->map)||(!xkb->map->syms)||(!xkb->map->key_sym_map)) {
-	_XkbLibError(_XkbErrMissingSymbols,"WriteCHdrServerMap",0);
-	return False;
-    }
-    if (xkb->server->num_acts>0) {
-	register XkbAnyAction *act;
-	act= (XkbAnyAction *)xkb->server->acts;
-	fprintf(file,"#define NUM_ACTIONS	%d\n",xkb->server->num_acts);
-	fprintf(file,"static XkbAnyAction 	actionCache[NUM_ACTIONS]= {\n");
-	for (i=0;i<xkb->server->num_acts;i++,act++) {
-	    if (i==0)	fprintf(file,"    ");
-	    else	fprintf(file,",\n    ");
-	    fprintf(file,"%s",XkbActionText(dpy,xkb,(XkbAction *)act,XkbCFile));
-	}
-	fprintf(file,"\n};\n");
-    }
-    fprintf(file,"static unsigned short	keyActions[NUM_KEYS]= {\n");
-    for (i=0;i<=xkb->max_key_code;i++) {
-	if (i==0)		fprintf(file,"    ");
-	else if ((i&0xf)==0)	fprintf(file,",\n    ");
-	else			fprintf(file,", ");
-	fprintf(file,"%2d",xkb->server->key_acts[i]);
-    }
-    fprintf(file,"\n};\n");
-    fprintf(file,"static XkbBehavior behaviors[NUM_KEYS]= {\n");
-    for (i=0;i<=xkb->max_key_code;i++) {
-	if (i==0)		fprintf(file,"    ");
-	else if ((i&0x3)==0)	fprintf(file,",\n    ");
-	else			fprintf(file,", ");
-	if (xkb->server->behaviors) {
-	     fprintf(file,"%s",
-		XkbBehaviorText(xkb,&xkb->server->behaviors[i],XkbCFile));
-	}
-	else fprintf(file,"{    0,    0 }");
-    }
-    fprintf(file,"\n};\n");
-    fprintf(file,"static unsigned char explicit_parts[NUM_KEYS]= {\n");
-    for (i=0;i<=xkb->max_key_code;i++) {
-	if (i==0)		fprintf(file,"    ");
-	else if ((i&0x7)==0)	fprintf(file,",\n    ");
-	else			fprintf(file,", ");
-	if ((xkb->server->explicit==NULL)||(xkb->server->explicit[i]==0))
-	     fprintf(file,"   0");
-	else fprintf(file,"0x%02x",xkb->server->explicit[i]);
-    }
-    fprintf(file,"\n};\n");
-    fprintf(file,"static unsigned short vmodmap[NUM_KEYS]= {\n");
-    for (i=0;i<xkb->max_key_code;i++) {
-	if (i==0)		fprintf(file,"    ");
-	else if ((i&0x7)==0)	fprintf(file,",\n    ");
-	else			fprintf(file,", ");
-	if ((xkb->server->vmodmap==NULL)||(xkb->server->vmodmap[i]==0))
-	     fprintf(file,"     0");
-	else fprintf(file,"0x%04x",xkb->server->vmodmap[i]);
-    }
-    fprintf(file,"};\n");
-    fprintf(file,"static XkbServerMapRec serverMap= {\n");
-    fprintf(file,"    %d, %d, (XkbAction *)actionCache,\n",
-				xkb->server->num_acts,xkb->server->num_acts);
-    fprintf(file,"    behaviors, keyActions, explicit_parts,\n");
-    for (i=0;i<XkbNumVirtualMods;i++) {
-	if (i==0)	fprintf(file,"    { ");
-	else if (i==8)	fprintf(file,",\n      ");
-	else		fprintf(file,", ");
-	fprintf(file,"%3d",xkb->server->vmods[i]);
-    }
-    fprintf(file," },\n");
-    fprintf(file,"    vmodmap\n");
-    fprintf(file,"};\n\n");
+WriteCHdrServerMap(FILE *file, Display *dpy, XkbDescPtr xkb)
+{
+    register unsigned i;
+
+    if ((!xkb) || (!xkb->map) || (!xkb->map->syms) || (!xkb->map->key_sym_map)) {
+        _XkbLibError(_XkbErrMissingSymbols, "WriteCHdrServerMap", 0);
+        return False;
+    }
+    if (xkb->server->num_acts > 0) {
+        register XkbAnyAction *act;
+
+        act = (XkbAnyAction *) xkb->server->acts;
+        fprintf(file, "#define NUM_ACTIONS	%d\n", xkb->server->num_acts);
+        fprintf(file, "static XkbAnyAction 	actionCache[NUM_ACTIONS]= {\n");
+        for (i = 0; i < xkb->server->num_acts; i++, act++) {
+            if (i == 0)
+                fprintf(file, "    ");
+            else
+                fprintf(file, ",\n    ");
+            fprintf(file, "%s",
+                    XkbActionText(dpy, xkb, (XkbAction *) act, XkbCFile));
+        }
+        fprintf(file, "\n};\n");
+    }
+    fprintf(file, "static unsigned short	keyActions[NUM_KEYS]= {\n");
+    for (i = 0; i <= xkb->max_key_code; i++) {
+        if (i == 0)
+            fprintf(file, "    ");
+        else if ((i & 0xf) == 0)
+            fprintf(file, ",\n    ");
+        else
+            fprintf(file, ", ");
+        fprintf(file, "%2d", xkb->server->key_acts[i]);
+    }
+    fprintf(file, "\n};\n");
+    fprintf(file, "static XkbBehavior behaviors[NUM_KEYS]= {\n");
+    for (i = 0; i <= xkb->max_key_code; i++) {
+        if (i == 0)
+            fprintf(file, "    ");
+        else if ((i & 0x3) == 0)
+            fprintf(file, ",\n    ");
+        else
+            fprintf(file, ", ");
+        if (xkb->server->behaviors) {
+            fprintf(file, "%s",
+                    XkbBehaviorText(xkb, &xkb->server->behaviors[i], XkbCFile));
+        }
+        else
+            fprintf(file, "{    0,    0 }");
+    }
+    fprintf(file, "\n};\n");
+    fprintf(file, "static unsigned char explicit_parts[NUM_KEYS]= {\n");
+    for (i = 0; i <= xkb->max_key_code; i++) {
+        if (i == 0)
+            fprintf(file, "    ");
+        else if ((i & 0x7) == 0)
+            fprintf(file, ",\n    ");
+        else
+            fprintf(file, ", ");
+        if ((xkb->server->explicit == NULL) || (xkb->server->explicit[i] == 0))
+            fprintf(file, "   0");
+        else
+            fprintf(file, "0x%02x", xkb->server->explicit[i]);
+    }
+    fprintf(file, "\n};\n");
+    fprintf(file, "static unsigned short vmodmap[NUM_KEYS]= {\n");
+    for (i = 0; i < xkb->max_key_code; i++) {
+        if (i == 0)
+            fprintf(file, "    ");
+        else if ((i & 0x7) == 0)
+            fprintf(file, ",\n    ");
+        else
+            fprintf(file, ", ");
+        if ((xkb->server->vmodmap == NULL) || (xkb->server->vmodmap[i] == 0))
+            fprintf(file, "     0");
+        else
+            fprintf(file, "0x%04x", xkb->server->vmodmap[i]);
+    }
+    fprintf(file, "};\n");
+    fprintf(file, "static XkbServerMapRec serverMap= {\n");
+    fprintf(file, "    %d, %d, (XkbAction *)actionCache,\n",
+            xkb->server->num_acts, xkb->server->num_acts);
+    fprintf(file, "    behaviors, keyActions, explicit_parts,\n");
+    for (i = 0; i < XkbNumVirtualMods; i++) {
+        if (i == 0)
+            fprintf(file, "    { ");
+        else if (i == 8)
+            fprintf(file, ",\n      ");
+        else
+            fprintf(file, ", ");
+        fprintf(file, "%3d", xkb->server->vmods[i]);
+    }
+    fprintf(file, " },\n");
+    fprintf(file, "    vmodmap\n");
+    fprintf(file, "};\n\n");
     return True;
 }
 
 static Bool
-WriteCHdrIndicators(FILE *file,Display *dpy,XkbDescPtr xkb)
+WriteCHdrIndicators(FILE *file, Display *dpy, XkbDescPtr xkb)
 {
-register int 		i,nNames;
-XkbIndicatorMapPtr	imap;
+    register int i, nNames;
+    XkbIndicatorMapPtr imap;
 
-    if (xkb->indicators==NULL)
-	return True;
+    if (xkb->indicators == NULL)
+        return True;
     fprintf(file, "static XkbIndicatorRec indicators= {\n");
     fprintf(file, "    0x%lx,\n    {\n",
-	    (long)xkb->indicators->phys_indicators);
-    for (imap=xkb->indicators->maps,i=nNames=0;i<XkbNumIndicators;i++,imap++) {
-	fprintf(file,"%s        { 0x%02x, %s, 0x%02x, %s, { %s, ",
-			(i!=0?",\n":""),
-			imap->flags,
-			XkbIMWhichStateMaskText(imap->which_groups,XkbCFile),
-			imap->groups,
-			XkbIMWhichStateMaskText(imap->which_mods,XkbCFile),
-			XkbModMaskText(imap->mods.mask,XkbCFile));
-	fprintf(file," %s, %s }, %s }",
-			XkbModMaskText(imap->mods.real_mods,XkbCFile),
-			XkbVModMaskText(dpy,xkb,0,imap->mods.vmods,XkbCFile),
-			XkbControlsMaskText(imap->ctrls,XkbCFile));
-	if (xkb->names && (xkb->names->indicators[i]!=None))
-	    nNames++;
-    }
-    fprintf(file,"\n    }\n};\n");
-    if (nNames>0) {
-	fprintf(file,"static void\n");
-	fprintf(file,"initIndicatorNames(DPYTYPE dpy,XkbDescPtr xkb)\n");
-	fprintf(file,"{\n");
-	for (i=0;i<XkbNumIndicators;i++) {
-	    Atom name;
-	    if (xkb->names->indicators[i]==None)
-		continue;
-	    name= xkb->names->indicators[i];
-	    fprintf(file,"    xkb->names->indicators[%2d]=	",i);
-	    fprintf(file,"GET_ATOM(dpy,\"%s\");\n",
-						XkbAtomText(dpy,name,XkbCFile));
-	}
-	fprintf(file,"}\n");
+            (long) xkb->indicators->phys_indicators);
+    for (imap = xkb->indicators->maps, i = nNames = 0; i < XkbNumIndicators;
+         i++, imap++) {
+        fprintf(file, "%s        { 0x%02x, %s, 0x%02x, %s, { %s, ",
+                (i != 0 ? ",\n" : ""), imap->flags,
+                XkbIMWhichStateMaskText(imap->which_groups, XkbCFile),
+                imap->groups, XkbIMWhichStateMaskText(imap->which_mods,
+                                                      XkbCFile),
+                XkbModMaskText(imap->mods.mask, XkbCFile));
+        fprintf(file, " %s, %s }, %s }",
+                XkbModMaskText(imap->mods.real_mods, XkbCFile),
+                XkbVModMaskText(dpy, xkb, 0, imap->mods.vmods, XkbCFile),
+                XkbControlsMaskText(imap->ctrls, XkbCFile));
+        if (xkb->names && (xkb->names->indicators[i] != None))
+            nNames++;
+    }
+    fprintf(file, "\n    }\n};\n");
+    if (nNames > 0) {
+        fprintf(file, "static void\n");
+        fprintf(file, "initIndicatorNames(DPYTYPE dpy,XkbDescPtr xkb)\n");
+        fprintf(file, "{\n");
+        for (i = 0; i < XkbNumIndicators; i++) {
+            Atom name;
+
+            if (xkb->names->indicators[i] == None)
+                continue;
+            name = xkb->names->indicators[i];
+            fprintf(file, "    xkb->names->indicators[%2d]=	", i);
+            fprintf(file, "GET_ATOM(dpy,\"%s\");\n",
+                    XkbAtomText(dpy, name, XkbCFile));
+        }
+        fprintf(file, "}\n");
     }
     return True;
 }
 
 static Bool
-WriteCHdrGeomProps(FILE *file,XkbDescPtr xkb,XkbGeometryPtr geom)
-{
-    if (geom->num_properties>0) {
-	register int i;
-	fprintf(file,"\nstatic XkbPropertyRec g_props[%d]= {\n",
-							geom->num_properties);
-	for (i=0;i<geom->num_properties;i++) {
-	    fprintf(file,"%s	{	\"%s\", \"%s\"	}",(i==0?"":",\n"),
-			XkbStringText(geom->properties[i].name,XkbCFile),
-			XkbStringText(geom->properties[i].value,XkbCFile));
-	}
-	fprintf(file,"\n};\n");
+WriteCHdrGeomProps(FILE *file, XkbDescPtr xkb, XkbGeometryPtr geom)
+{
+    if (geom->num_properties > 0) {
+        register int i;
+
+        fprintf(file, "\nstatic XkbPropertyRec g_props[%d]= {\n",
+                geom->num_properties);
+        for (i = 0; i < geom->num_properties; i++) {
+            fprintf(file, "%s	{	\"%s\", \"%s\"	}",
+                    (i == 0 ? "" : ",\n"),
+                    XkbStringText(geom->properties[i].name, XkbCFile),
+                    XkbStringText(geom->properties[i].value, XkbCFile));
+        }
+        fprintf(file, "\n};\n");
     }
     return True;
 }
 
 static Bool
-WriteCHdrGeomColors(FILE *file,XkbDescPtr xkb,XkbGeometryPtr geom)
-{
-    if (geom->num_colors>0) {
-	register int i;
-	fprintf(file,"\nstatic XkbColorRec g_colors[%d]= {\n",geom->num_colors);
-	for (i=0;i<geom->num_colors;i++) {
-	    fprintf(file,"%s	{	%3d, \"%s\"	}",(i==0?"":",\n"),
-			geom->colors[i].pixel,
-			XkbStringText(geom->colors[i].spec,XkbCFile));
-	}
-	fprintf(file,"\n};\n");
+WriteCHdrGeomColors(FILE *file, XkbDescPtr xkb, XkbGeometryPtr geom)
+{
+    if (geom->num_colors > 0) {
+        register int i;
+
+        fprintf(file, "\nstatic XkbColorRec g_colors[%d]= {\n",
+                geom->num_colors);
+        for (i = 0; i < geom->num_colors; i++) {
+            fprintf(file, "%s	{	%3d, \"%s\"	}",
+                    (i == 0 ? "" : ",\n"), geom->colors[i].pixel,
+                    XkbStringText(geom->colors[i].spec, XkbCFile));
+        }
+        fprintf(file, "\n};\n");
     }
     return True;
 }
 
 static Bool
-WriteCHdrGeomOutlines(FILE *file,int nOL,XkbOutlinePtr ol,int shapeNdx)
-{
-register int o,p;
-
-
-    for (o=0;o<nOL;o++) {
-	fprintf(file,"\nstatic XkbPointRec pts_sh%02do%02d[]= {\n",shapeNdx,o);
-	for (p=0;p<ol[o].num_points;p++) {
-	    if (p==0)			fprintf(file,"	");
-	    else if ((p&0x3)==0)	fprintf(file,",\n	");
-	    else 			fprintf(file,", ");
-	    fprintf(file,"{ %4d, %4d }",
-				ol[o].points[p].x,ol[o].points[p].y);
-	}
-	fprintf(file,"\n};");
-    }
-    fprintf(file,"\n\nstatic XkbOutlineRec ol_sh%02d[]= {\n",shapeNdx);
-    for (o=0;o<nOL;o++) {
-	fprintf(file,"%s	{ %d,	%d,	%d,	pts_sh%02do%02d	}",
-					(o==0?"":",\n"),
-					ol[o].num_points,ol[o].num_points,
-					ol[o].corner_radius,shapeNdx,o);
-    }
-    fprintf(file,"\n};\n");
-    return True;
-}
-
-static Bool
-WriteCHdrGeomShapes(FILE *file,XkbDescPtr xkb,XkbGeometryPtr geom)
-{
-register int 		s;
-register XkbShapePtr	shape;
-
-    for (s=0,shape=geom->shapes;s<geom->num_shapes;s++,shape++) {
-	WriteCHdrGeomOutlines(file,shape->num_outlines,shape->outlines,s);
-    }
-    fprintf(file,"\n\nstatic XkbShapeRec g_shapes[%d]= {\n",geom->num_shapes);
-    for (s=0,shape=geom->shapes;s<geom->num_shapes;s++,shape++) {
-	fprintf(file,"%s	{ None, %3d, %3d, ol_sh%02d, ",
-					(s==0?"":",\n"),shape->num_outlines,
-					shape->num_outlines,s);
-	if (shape->approx) {
-	    fprintf(file,"&ol_sh%02d[%2d],	",s,
-					XkbOutlineIndex(shape,shape->approx));
-	}
-	else fprintf(file,"        NULL,	");
-	if (shape->primary) {
-	    fprintf(file,"&ol_sh%02d[%2d],\n",s,
-					XkbOutlineIndex(shape,shape->primary));
-	}
-	else fprintf(file,"        NULL,\n");
-	fprintf(file,"					{ %4d, %4d, %4d, %4d } }",
-					shape->bounds.x1,shape->bounds.y1,
-					shape->bounds.x2,shape->bounds.y2);
-    }
-    fprintf(file,"\n};\n");
-    return True;
-}
-
-static Bool
-WriteCHdrGeomDoodads(	FILE *		file,
-			XkbDescPtr	xkb,
-			XkbGeometryPtr	geom,
-			XkbSectionPtr	section,
-			int		section_num)
-{
-int		nd,d;
-XkbDoodadPtr	doodad;
-Display *	dpy;
-
-    dpy= xkb->dpy;
-    if (section==NULL) {
-	if (geom->num_doodads>0) {
-	    fprintf(file,"static XkbDoodadRec g_doodads[%d];\n",
-							geom->num_doodads);
-	}
-	fprintf(file,"static void\n");
-	fprintf(file,"_InitGeomDoodads(DPYTYPE dpy,XkbGeometryPtr geom)\n");
-	fprintf(file,"{\n");
-	fprintf(file,"register XkbDoodadPtr doodads;\n\n");
-	fprintf(file,"    doodads= geom->doodads;\n");
-	nd= geom->num_doodads;
-	doodad= geom->doodads;
+WriteCHdrGeomOutlines(FILE *file, int nOL, XkbOutlinePtr ol, int shapeNdx)
+{
+    register int o, p;
+
+    for (o = 0; o < nOL; o++) {
+        fprintf(file, "\nstatic XkbPointRec pts_sh%02do%02d[]= {\n", shapeNdx,
+                o);
+        for (p = 0; p < ol[o].num_points; p++) {
+            if (p == 0)
+                fprintf(file, "	");
+            else if ((p & 0x3) == 0)
+                fprintf(file, ",\n	");
+            else
+                fprintf(file, ", ");
+            fprintf(file, "{ %4d, %4d }", ol[o].points[p].x, ol[o].points[p].y);
+        }
+        fprintf(file, "\n};");
+    }
+    fprintf(file, "\n\nstatic XkbOutlineRec ol_sh%02d[]= {\n", shapeNdx);
+    for (o = 0; o < nOL; o++) {
+        fprintf(file, "%s	{ %d,	%d,	%d,	pts_sh%02do%02d	}",
+                (o == 0 ? "" : ",\n"),
+                ol[o].num_points, ol[o].num_points,
+                ol[o].corner_radius, shapeNdx, o);
+    }
+    fprintf(file, "\n};\n");
+    return True;
+}
+
+static Bool
+WriteCHdrGeomShapes(FILE *file, XkbDescPtr xkb, XkbGeometryPtr geom)
+{
+    register int s;
+    register XkbShapePtr shape;
+
+    for (s = 0, shape = geom->shapes; s < geom->num_shapes; s++, shape++) {
+        WriteCHdrGeomOutlines(file, shape->num_outlines, shape->outlines, s);
+    }
+    fprintf(file, "\n\nstatic XkbShapeRec g_shapes[%d]= {\n", geom->num_shapes);
+    for (s = 0, shape = geom->shapes; s < geom->num_shapes; s++, shape++) {
+        fprintf(file, "%s	{ None, %3d, %3d, ol_sh%02d, ",
+                (s == 0 ? "" : ",\n"), shape->num_outlines,
+                shape->num_outlines, s);
+        if (shape->approx) {
+            fprintf(file, "&ol_sh%02d[%2d],	", s,
+                    XkbOutlineIndex(shape, shape->approx));
+        }
+        else
+            fprintf(file, "        NULL,	");
+        if (shape->primary) {
+            fprintf(file, "&ol_sh%02d[%2d],\n", s,
+                    XkbOutlineIndex(shape, shape->primary));
+        }
+        else
+            fprintf(file, "        NULL,\n");
+        fprintf(file,
+                "					{ %4d, %4d, %4d, %4d } }",
+                shape->bounds.x1, shape->bounds.y1,
+                shape->bounds.x2, shape->bounds.y2);
+    }
+    fprintf(file, "\n};\n");
+    return True;
+}
+
+static Bool
+WriteCHdrGeomDoodads(FILE *             file,
+                     XkbDescPtr         xkb,
+                     XkbGeometryPtr     geom,
+                     XkbSectionPtr      section,
+                     int                section_num)
+{
+    int                 nd, d;
+    XkbDoodadPtr        doodad;
+    Display *           dpy;
+
+    dpy = xkb->dpy;
+    if (section == NULL) {
+        if (geom->num_doodads > 0) {
+            fprintf(file, "static XkbDoodadRec g_doodads[%d];\n",
+                    geom->num_doodads);
+        }
+        fprintf(file, "static void\n");
+        fprintf(file, "_InitGeomDoodads(DPYTYPE dpy,XkbGeometryPtr geom)\n");
+        fprintf(file, "{\n");
+        fprintf(file, "register XkbDoodadPtr doodads;\n\n");
+        fprintf(file, "    doodads= geom->doodads;\n");
+        nd = geom->num_doodads;
+        doodad = geom->doodads;
     }
     else {
-	if (section->num_doodads>0) {
-	    fprintf(file,"static XkbDoodadRec doodads_s%02d[%d];\n",
-					section_num,section->num_doodads);
-	}
-	fprintf(file,"static void\n");
-	fprintf(file,"_InitS%02dDoodads(",section_num);
-	fprintf(file,"    DPYTYPE		dpy,\n");
-	fprintf(file,"    XkbGeometryPtr 	geom,\n");
-	fprintf(file,"    XkbSectionPtr 	section)\n");
-	fprintf(file,"{\n");
-	fprintf(file,"register XkbDoodadPtr doodads;\n\n");
-	fprintf(file,"    doodads= section->doodads;\n");
-	nd= geom->num_doodads;
-	doodad= geom->doodads;
-    }
-    for (d=0;d<nd;d++,doodad++) {
-	if (d!=0)	fprintf(file,"\n");
-	fprintf(file,"    doodads[%d].any.name= GET_ATOM(dpy,\"%s\");\n",d,
-			XkbAtomText(dpy,doodad->any.name,XkbCFile));
-	fprintf(file,"    doodads[%d].any.type= %s;\n",d,
-			XkbDoodadTypeText(doodad->any.type,XkbCFile));
-	fprintf(file,"    doodads[%d].any.priority= %d;\n",d,
-			doodad->any.priority);
-	fprintf(file,"    doodads[%d].any.top= %d;\n",d,doodad->any.top);
-	fprintf(file,"    doodads[%d].any.left= %d;\n",d,doodad->any.left);
-	fprintf(file,"    doodads[%d].any.angle= %d;\n",d,doodad->any.angle);
-	switch (doodad->any.type) {
-	    case XkbOutlineDoodad:
-	    case XkbSolidDoodad:
-		fprintf(file,"    doodads[%d].shape.color_ndx= %d;\n",d,
-					doodad->shape.color_ndx);
-		fprintf(file,"    doodads[%d].shape.shape_ndx= %d;\n",d,
-					doodad->shape.shape_ndx);
-		break;
-	    case XkbTextDoodad:
-		fprintf(file,"    doodads[%d].text.width= %d;\n",d,
-					doodad->text.width);
-		fprintf(file,"    doodads[%d].text.height= %d;\n",d,
-					doodad->text.height);
-		fprintf(file,"    doodads[%d].text.color_ndx= %d;\n",d,
-					doodad->text.color_ndx);
-		fprintf(file,"    doodads[%d].text.text= \"%s\";\n",d,
-				XkbStringText(doodad->text.text,XkbCFile));
-		fprintf(file,"    doodads[%d].text.font= \"%s\";\n",d,
-				XkbStringText(doodad->text.font,XkbCFile));
-		break;
-	    case XkbIndicatorDoodad:
-		fprintf(file,"    doodads[%d].indicator.shape_ndx= %d;\n",d,
-					doodad->indicator.shape_ndx);
-		fprintf(file,"    doodads[%d].indicator.on_color_ndx= %d;\n",d,
-					doodad->indicator.on_color_ndx);
-		fprintf(file,"    doodads[%d].indicator.off_color_ndx= %d;\n",d,
-					doodad->indicator.off_color_ndx);
-		break;
-	    case XkbLogoDoodad:
-		fprintf(file,"    doodads[%d].logo.color_ndx= %d;\n",d,
-					doodad->logo.color_ndx);
-		fprintf(file,"    doodads[%d].logo.shape_ndx= %d;\n",d,
-					doodad->logo.shape_ndx);
-		fprintf(file,"    doodads[%d].logo.logo_name= \"%s\";\n",d,
-				XkbStringText(doodad->logo.logo_name,XkbCFile));
-		break;
-	}
-    }
-    fprintf(file,"}\n");
-    return True;
-}
-
-static Bool
-WriteCHdrGeomOverlays(	FILE *		file,
-			XkbDescPtr	xkb,
-			XkbSectionPtr	section,
-			int		section_num)
-{
-register int		o,r,k;
-XkbOverlayPtr		ol;
-XkbOverlayRowPtr	row;
-XkbOverlayKeyPtr	key;
-
-    if (section->num_overlays<1)
-	return True;
-    for (o=0,ol=section->overlays;o<section->num_overlays;o++,ol++) {
-	for (r=0,row=ol->rows;r<ol->num_rows;r++,row++) {
-	    fprintf(file,"static XkbOverlayKeyRec olkeys_s%02dr%02d[%d]= {\n",
-						section_num,r,row->num_keys);
-	    for (k=0,key=row->keys;k<row->num_keys;k++,key++) {
-		fprintf(file,"%s	{ {\"%s\"},	{\"%s\"}	}",
-				(k==0?"":",\n"),
-				XkbKeyNameText(key->over.name,XkbCFile),
-				XkbKeyNameText(key->under.name,XkbCFile));
-	    }
-	    fprintf(file,"\n};\n");
-	}
-	fprintf(file,"static XkbOverlayRowRec olrows_s%02d[%d]= {\n",
-						section_num,section->num_rows);
-	for (r=0,row=ol->rows;r<ol->num_rows;r++,row++) {
-	    fprintf(file,"%s	{ %4d, %4d, %4d, olkeys_s%02dr%02d }",
-				(r==0?"":",\n"),
-				row->row_under,row->num_keys,row->num_keys,
-				section_num,r);
-	}
-	fprintf(file,"\n};\n");
-    }
-    fprintf(file,"static XkbOverlayRec overlays_s%02d[%d]= {\n",section_num,
-							section->num_overlays);
-    for (o=0,ol=section->overlays;o<section->num_overlays;o++,ol++) {
-	fprintf(file,"%s	{\n",(o==0?"":",\n"));
-	fprintf(file,"	    None, 	/* name */\n");
-	fprintf(file,"	    NULL,	/* section_under */\n");
-	fprintf(file,"	    %4d,	/* num_rows */\n",ol->num_rows);
-	fprintf(file,"	    %4d,	/* sz_rows */\n",ol->num_rows);
-	fprintf(file,"	    olrows_s%02d,\n",section_num);
-	fprintf(file,"	    NULL	/* bounds */\n");
-	fprintf(file,"	}");
-    }
-    fprintf(file,"\n};\n");
-    fprintf(file,"static void\n");
-    fprintf(file,"_InitS%02dOverlay(",section_num);
-    fprintf(file,"    DPYTYPE		dpy,\n");
-    fprintf(file,"    XkbGeometryPtr 	geom,\n");
-    fprintf(file,"    XkbSectionPtr 	section)\n");
-    fprintf(file,"{\n");
-    fprintf(file,"XkbOverlayPtr	ol;\n\n");
-    fprintf(file,"    ol= section->overlays;\n");
-    for (o=0,ol=section->overlays;o<section->num_overlays;o++,ol++) {
-	fprintf(file,"    ol[%2d].name= GET_ATOM(dpy,\"%s\");\n",o,
-				XkbAtomText(xkb->dpy,ol->name,XkbCFile));
-	fprintf(file,"    ol[%2d].section_under= section;\n",o);
-    }
-    fprintf(file,"}\n");
-    return True;
-}
-
-static Bool
-WriteCHdrGeomRows(	FILE *		file,
-			XkbDescPtr	xkb,
-			XkbSectionPtr	section,
-			int		section_num)
-{
-register int 		k,r;
-register XkbRowPtr	row;
-register XkbKeyPtr	key;
-
-    for (r=0,row=section->rows;r<section->num_rows;r++,row++) {
-	fprintf(file,"static XkbKeyRec keys_s%02dr%02d[]= {\n",section_num,r);
-	for (k=0,key=row->keys;k<row->num_keys;k++,key++) {
-	    fprintf(file,"%s	{ { \"%s\" },	%4d, %4d, %4d }",
-				(k==0?"":",\n"),
-				XkbKeyNameText(key->name.name,XkbCFile),
-				key->gap,key->shape_ndx,key->color_ndx);
-	}
-	fprintf(file,"\n};\n");
-    }
-    fprintf(file,"static XkbRowRec rows_s%02d[]= {\n",section_num);
-    for (r=0,row=section->rows;r<section->num_rows;r++,row++) {
-	fprintf(file,"%s	{ %4d, %4d, %2d, %2d, %1d, keys_s%02dr%02d, ",
-				(r==0?"":",\n"),
-				row->top,row->left,row->num_keys,row->num_keys,
-				(row->vertical!=0),
-				section_num,r);
-	fprintf(file," { %4d, %4d, %4d, %4d } }",
-				row->bounds.x1,row->bounds.y1,
-				row->bounds.x2,row->bounds.y2);
-    }
-    fprintf(file,"\n};\n");
+        if (section->num_doodads > 0) {
+            fprintf(file, "static XkbDoodadRec doodads_s%02d[%d];\n",
+                    section_num, section->num_doodads);
+        }
+        fprintf(file, "static void\n");
+        fprintf(file, "_InitS%02dDoodads(", section_num);
+        fprintf(file, "    DPYTYPE		dpy,\n");
+        fprintf(file, "    XkbGeometryPtr 	geom,\n");
+        fprintf(file, "    XkbSectionPtr 	section)\n");
+        fprintf(file, "{\n");
+        fprintf(file, "register XkbDoodadPtr doodads;\n\n");
+        fprintf(file, "    doodads= section->doodads;\n");
+        nd = geom->num_doodads;
+        doodad = geom->doodads;
+    }
+    for (d = 0; d < nd; d++, doodad++) {
+        if (d != 0)
+            fprintf(file, "\n");
+        fprintf(file, "    doodads[%d].any.name= GET_ATOM(dpy,\"%s\");\n",
+                d, XkbAtomText(dpy, doodad->any.name, XkbCFile));
+        fprintf(file, "    doodads[%d].any.type= %s;\n",
+                d, XkbDoodadTypeText(doodad->any.type, XkbCFile));
+        fprintf(file, "    doodads[%d].any.priority= %d;\n",
+                d, doodad->any.priority);
+        fprintf(file, "    doodads[%d].any.top= %d;\n", d, doodad->any.top);
+        fprintf(file, "    doodads[%d].any.left= %d;\n", d, doodad->any.left);
+        fprintf(file, "    doodads[%d].any.angle= %d;\n", d, doodad->any.angle);
+        switch (doodad->any.type) {
+        case XkbOutlineDoodad:
+        case XkbSolidDoodad:
+            fprintf(file, "    doodads[%d].shape.color_ndx= %d;\n",
+                    d, doodad->shape.color_ndx);
+            fprintf(file, "    doodads[%d].shape.shape_ndx= %d;\n",
+                    d, doodad->shape.shape_ndx);
+            break;
+        case XkbTextDoodad:
+            fprintf(file, "    doodads[%d].text.width= %d;\n",
+                    d, doodad->text.width);
+            fprintf(file, "    doodads[%d].text.height= %d;\n",
+                    d, doodad->text.height);
+            fprintf(file, "    doodads[%d].text.color_ndx= %d;\n",
+                    d, doodad->text.color_ndx);
+            fprintf(file, "    doodads[%d].text.text= \"%s\";\n",
+                    d, XkbStringText(doodad->text.text, XkbCFile));
+            fprintf(file, "    doodads[%d].text.font= \"%s\";\n",
+                    d, XkbStringText(doodad->text.font, XkbCFile));
+            break;
+        case XkbIndicatorDoodad:
+            fprintf(file, "    doodads[%d].indicator.shape_ndx= %d;\n",
+                    d, doodad->indicator.shape_ndx);
+            fprintf(file, "    doodads[%d].indicator.on_color_ndx= %d;\n",
+                    d, doodad->indicator.on_color_ndx);
+            fprintf(file, "    doodads[%d].indicator.off_color_ndx= %d;\n",
+                    d, doodad->indicator.off_color_ndx);
+            break;
+        case XkbLogoDoodad:
+            fprintf(file, "    doodads[%d].logo.color_ndx= %d;\n",
+                    d, doodad->logo.color_ndx);
+            fprintf(file, "    doodads[%d].logo.shape_ndx= %d;\n",
+                    d, doodad->logo.shape_ndx);
+            fprintf(file, "    doodads[%d].logo.logo_name= \"%s\";\n",
+                    d, XkbStringText(doodad->logo.logo_name, XkbCFile));
+            break;
+        }
+    }
+    fprintf(file, "}\n");
     return True;
 }
 
 static Bool
-WriteCHdrGeomSections(FILE *file,XkbDescPtr xkb,XkbGeometryPtr geom)
+WriteCHdrGeomOverlays(FILE *            file,
+                      XkbDescPtr        xkb,
+                      XkbSectionPtr     section,
+                      int               section_num)
+{
+    register int        o, r, k;
+    XkbOverlayPtr       ol;
+    XkbOverlayRowPtr    row;
+    XkbOverlayKeyPtr    key;
+
+    if (section->num_overlays < 1)
+        return True;
+    for (o = 0, ol = section->overlays; o < section->num_overlays; o++, ol++) {
+        for (r = 0, row = ol->rows; r < ol->num_rows; r++, row++) {
+            fprintf(file, "static XkbOverlayKeyRec olkeys_s%02dr%02d[%d]= {\n",
+                    section_num, r, row->num_keys);
+            for (k = 0, key = row->keys; k < row->num_keys; k++, key++) {
+                fprintf(file, "%s	{ {\"%s\"},	{\"%s\"}	}",
+                        (k == 0 ? "" : ",\n"),
+                        XkbKeyNameText(key->over.name, XkbCFile),
+                        XkbKeyNameText(key->under.name, XkbCFile));
+            }
+            fprintf(file, "\n};\n");
+        }
+        fprintf(file, "static XkbOverlayRowRec olrows_s%02d[%d]= {\n",
+                section_num, section->num_rows);
+        for (r = 0, row = ol->rows; r < ol->num_rows; r++, row++) {
+            fprintf(file, "%s	{ %4d, %4d, %4d, olkeys_s%02dr%02d }",
+                    (r == 0 ? "" : ",\n"),
+                    row->row_under, row->num_keys, row->num_keys,
+                    section_num, r);
+        }
+        fprintf(file, "\n};\n");
+    }
+    fprintf(file, "static XkbOverlayRec overlays_s%02d[%d]= {\n", section_num,
+            section->num_overlays);
+    for (o = 0, ol = section->overlays; o < section->num_overlays; o++, ol++) {
+        fprintf(file, "%s	{\n", (o == 0 ? "" : ",\n"));
+        fprintf(file, "	    None, 	/* name */\n");
+        fprintf(file, "	    NULL,	/* section_under */\n");
+        fprintf(file, "	    %4d,	/* num_rows */\n", ol->num_rows);
+        fprintf(file, "	    %4d,	/* sz_rows */\n", ol->num_rows);
+        fprintf(file, "	    olrows_s%02d,\n", section_num);
+        fprintf(file, "	    NULL	/* bounds */\n");
+        fprintf(file, "	}");
+    }
+    fprintf(file, "\n};\n");
+    fprintf(file, "static void\n");
+    fprintf(file, "_InitS%02dOverlay(", section_num);
+    fprintf(file, "    DPYTYPE		dpy,\n");
+    fprintf(file, "    XkbGeometryPtr 	geom,\n");
+    fprintf(file, "    XkbSectionPtr 	section)\n");
+    fprintf(file, "{\n");
+    fprintf(file, "XkbOverlayPtr	ol;\n\n");
+    fprintf(file, "    ol= section->overlays;\n");
+    for (o = 0, ol = section->overlays; o < section->num_overlays; o++, ol++) {
+        fprintf(file, "    ol[%2d].name= GET_ATOM(dpy,\"%s\");\n",
+                o, XkbAtomText(xkb->dpy, ol->name, XkbCFile));
+        fprintf(file, "    ol[%2d].section_under= section;\n", o);
+    }
+    fprintf(file, "}\n");
+    return True;
+}
+
+static Bool
+WriteCHdrGeomRows(FILE *        file,
+                  XkbDescPtr    xkb,
+                  XkbSectionPtr section,
+                  int           section_num)
+{
+    register int        k, r;
+    register XkbRowPtr  row;
+    register XkbKeyPtr  key;
+
+    for (r = 0, row = section->rows; r < section->num_rows; r++, row++) {
+        fprintf(file, "static XkbKeyRec keys_s%02dr%02d[]= {\n",
+                section_num, r);
+        for (k = 0, key = row->keys; k < row->num_keys; k++, key++) {
+            fprintf(file, "%s	{ { \"%s\" },	%4d, %4d, %4d }",
+                    (k == 0 ? "" : ",\n"),
+                    XkbKeyNameText(key->name.name, XkbCFile),
+                    key->gap, key->shape_ndx, key->color_ndx);
+        }
+        fprintf(file, "\n};\n");
+    }
+    fprintf(file, "static XkbRowRec rows_s%02d[]= {\n", section_num);
+    for (r = 0, row = section->rows; r < section->num_rows; r++, row++) {
+        fprintf(file, "%s	{ %4d, %4d, %2d, %2d, %1d, keys_s%02dr%02d, ",
+                (r == 0 ? "" : ",\n"),
+                row->top, row->left, row->num_keys, row->num_keys,
+                (row->vertical != 0), section_num, r);
+        fprintf(file, " { %4d, %4d, %4d, %4d } }",
+                row->bounds.x1, row->bounds.y1, row->bounds.x2, row->bounds.y2);
+    }
+    fprintf(file, "\n};\n");
+    return True;
+}
+
+static Bool
+WriteCHdrGeomSections(FILE *file, XkbDescPtr xkb, XkbGeometryPtr geom)
 {
-register int		s;
-register XkbSectionPtr	section;
+    register int s;
+    register XkbSectionPtr section;
 
-    for (s=0,section=geom->sections;s<geom->num_sections;s++,section++) {
-	WriteCHdrGeomRows(file,xkb,section,s);
+    for (s = 0, section = geom->sections; s < geom->num_sections;
+         s++, section++) {
+        WriteCHdrGeomRows(file, xkb, section, s);
 #ifdef NOTYET
-	if (section->num_doodads>0)
-	    WriteCHdrGeomDoodads(file,xkb,geom,section,s);
+        if (section->num_doodads > 0)
+            WriteCHdrGeomDoodads(file, xkb, geom, section, s);
 #endif
-	if (section->num_overlays>0)
-	    WriteCHdrGeomOverlays(file,xkb,section,s);
+        if (section->num_overlays > 0)
+            WriteCHdrGeomOverlays(file, xkb, section, s);
+    }
+    fprintf(file, "\nstatic XkbSectionRec g_sections[%d]= {\n",
+            geom->num_sections);
+    for (s = 0, section = geom->sections; s < geom->num_sections;
+         s++, section++) {
+        if (s != 0)
+            fprintf(file, ",\n");
+        fprintf(file, "	{\n	    None, /* name */\n");
+        fprintf(file, "	    %4d, /* priority */\n", section->priority);
+        fprintf(file, "	    %4d, /* top */\n", section->top);
+        fprintf(file, "	    %4d, /* left */\n", section->left);
+        fprintf(file, "	    %4d, /* width */\n", section->width);
+        fprintf(file, "	    %4d, /* height */\n", section->height);
+        fprintf(file, "	    %4d, /* angle */\n", section->angle);
+        fprintf(file, "	    %4d, /* num_rows */\n", section->num_rows);
+        fprintf(file, "	    %4d, /* num_doodads */\n", section->num_doodads);
+        fprintf(file, "	    %4d, /* num_overlays */\n", section->num_overlays);
+        fprintf(file, "	    %4d, /* sz_rows */\n", section->num_rows);
+        fprintf(file, "	    %4d, /* sz_doodads */\n", section->num_doodads);
+        fprintf(file, "	    %4d, /* sz_overlays */\n", section->num_overlays);
+        if (section->num_rows > 0)
+            fprintf(file, "	    rows_s%02d,\n", s);
+        else
+            fprintf(file, "	    NULL, /* rows */\n");
+        if (section->num_doodads > 0)
+            fprintf(file, "	    doodads_s%02d,\n", s);
+        else
+            fprintf(file, "	    NULL, /* doodads */\n");
+        fprintf(file, "	    { %4d, %4d, %4d, %4d }, /* bounds */\n",
+                section->bounds.x1, section->bounds.y1,
+                section->bounds.x2, section->bounds.y2);
+        if (section->num_overlays > 0)
+            fprintf(file, "	    overlays_s%02d\n", s);
+        else
+            fprintf(file, "	    NULL /* overlays */\n");
+        fprintf(file, "	}");
+    }
+    fprintf(file, "\n};\n");
+    fprintf(file, "\nstatic Bool\n");
+    fprintf(file, "_InitSections(DPYTYPE dpy,XkbGeometryPtr geom)\n");
+    fprintf(file, "{\nXkbSectionPtr	sections;\n\n");
+    fprintf(file, "    sections= geom->sections;\n");
+    for (s = 0, section = geom->sections; s < geom->num_sections;
+         s++, section++) {
+        if (section->num_doodads > 0) {
+            fprintf(file, "    _InitS%02dDoodads(dpy,geom,&sections[%d]);\n",
+                    s, s);
+        }
+        if (section->num_overlays > 0) {
+            fprintf(file, "    _InitS%02dOverlays(dpy,geom,&sections[%d]);\n",
+                    s, s);
+        }
     }
-    fprintf(file,"\nstatic XkbSectionRec g_sections[%d]= {\n",
-							geom->num_sections);
-    for (s=0,section=geom->sections;s<geom->num_sections;s++,section++) {
-	if (s!=0) fprintf(file,",\n");
-	fprintf(file,"	{\n	    None, /* name */\n");
-	fprintf(file,"	    %4d, /* priority */\n",section->priority);
-	fprintf(file,"	    %4d, /* top */\n",section->top);
-	fprintf(file,"	    %4d, /* left */\n",section->left);
-	fprintf(file,"	    %4d, /* width */\n",section->width);
-	fprintf(file,"	    %4d, /* height */\n",section->height);
-	fprintf(file,"	    %4d, /* angle */\n",section->angle);
-	fprintf(file,"	    %4d, /* num_rows */\n",section->num_rows);
-	fprintf(file,"	    %4d, /* num_doodads */\n",section->num_doodads);
-	fprintf(file,"	    %4d, /* num_overlays */\n",section->num_overlays);
-	fprintf(file,"	    %4d, /* sz_rows */\n",section->num_rows);
-	fprintf(file,"	    %4d, /* sz_doodads */\n",section->num_doodads);
-	fprintf(file,"	    %4d, /* sz_overlays */\n",section->num_overlays);
-	if (section->num_rows>0)
-	     fprintf(file,"	    rows_s%02d,\n",s);
-	else fprintf(file,"	    NULL, /* rows */\n");
-	if (section->num_doodads>0)
-	     fprintf(file,"	    doodads_s%02d,\n",s);
-	else fprintf(file,"	    NULL, /* doodads */\n");
-	fprintf(file,"	    { %4d, %4d, %4d, %4d }, /* bounds */\n",
-					section->bounds.x1,section->bounds.y1,
-					section->bounds.x2,section->bounds.y2);
-	if (section->num_overlays>0)
-	     fprintf(file,"	    overlays_s%02d\n",s);
-	else fprintf(file,"	    NULL /* overlays */\n");
-	fprintf(file,"	}");
-    }
-    fprintf(file,"\n};\n");
-    fprintf(file,"\nstatic Bool\n");
-    fprintf(file,"_InitSections(DPYTYPE dpy,XkbGeometryPtr geom)\n");
-    fprintf(file,"{\nXkbSectionPtr	sections;\n\n");
-    fprintf(file,"    sections= geom->sections;\n");
-    for (s=0,section=geom->sections;s<geom->num_sections;s++,section++) {
-	if (section->num_doodads>0) {
-	    fprintf(file,"    _InitS%02dDoodads(dpy,geom,&sections[%d]);\n",
-									s,s);
-	}
-	if (section->num_overlays>0) {
-	    fprintf(file,"    _InitS%02dOverlays(dpy,geom,&sections[%d]);\n",
-									s,s);
-	}
-    }
-    fprintf(file,"}\n");
-    return True;
-}
-
-static Bool
-WriteCHdrGeomAliases(FILE *file,XkbDescPtr xkb,XkbGeometryPtr geom)
-{
-    if (geom->num_key_aliases>0) {
-	register int i;
-	fprintf(file,"\nstatic XkbKeyAliasRec g_aliases[%d]= {\n",
-						geom->num_key_aliases);
-	for (i=0;i<geom->num_key_aliases;i++) {
-	    fprintf(file,"%s	{	\"%s\", \"%s\"	}",(i==0?"":",\n"),
-			XkbKeyNameText(geom->key_aliases[i].real,XkbCFile),
-			XkbKeyNameText(geom->key_aliases[i].alias,XkbCFile));
-	}
-	fprintf(file,"\n};\n");
+    fprintf(file, "}\n");
+    return True;
+}
+
+static Bool
+WriteCHdrGeomAliases(FILE *file, XkbDescPtr xkb, XkbGeometryPtr geom)
+{
+    if (geom->num_key_aliases > 0) {
+        register int i;
+
+        fprintf(file, "\nstatic XkbKeyAliasRec g_aliases[%d]= {\n",
+                geom->num_key_aliases);
+        for (i = 0; i < geom->num_key_aliases; i++) {
+            fprintf(file, "%s	{	\"%s\", \"%s\"	}",
+                    (i == 0 ? "" : ",\n"),
+                    XkbKeyNameText(geom->key_aliases[i].real, XkbCFile),
+                    XkbKeyNameText(geom->key_aliases[i].alias, XkbCFile));
+        }
+        fprintf(file, "\n};\n");
     }
     return True;
 }
 
 static Bool
-WriteCHdrGeometry(FILE *file,XkbDescPtr xkb)
-{
-XkbGeometryPtr	geom;
-register int	i;
-
-    if ((!xkb)||(!xkb->geom)) {
-	_XkbLibError(_XkbErrMissingGeometry,"WriteCHdrGeometry",0);
-	return False;
-    }
-    geom= xkb->geom;
-    WriteCHdrGeomProps(file,xkb,geom);
-    WriteCHdrGeomColors(file,xkb,geom);
-    WriteCHdrGeomShapes(file,xkb,geom);
-    WriteCHdrGeomSections(file,xkb,geom);
-    WriteCHdrGeomDoodads(file,xkb,geom,NULL,0);
-    WriteCHdrGeomAliases(file,xkb,geom);
-    fprintf(file,"\nstatic XkbGeometryRec	geom= {\n");
-    fprintf(file,"	None,			/* name */\n");
-    fprintf(file,"	%d, %d,		/* width, height */\n",geom->width_mm,
-							geom->height_mm);
-    if (geom->label_font) {
-	 fprintf(file,"	\"%s\",/* label font */\n",
-				XkbStringText(geom->label_font,XkbCFile));
-    }
-    else fprintf(file,"	NULL,		/* label font */\n");
-    if (geom->label_color) {
-	fprintf(file,"	&g_colors[%d],		/* label color */\n",
-				XkbGeomColorIndex(geom,geom->label_color));
-    }
-    else fprintf(file,"	NULL,			/* label color */\n");
-    if (geom->base_color) {
-	fprintf(file,"	&g_colors[%d],		/* base color */\n",
-				XkbGeomColorIndex(geom,geom->base_color));
-    }
-    else fprintf(file,"	NULL,			/* base color */\n");
-    fprintf(file,"	%d,	%d,	%d,	/*  sz: props, colors, shapes */\n",
-				geom->num_properties,geom->num_colors,
-				geom->num_shapes);
-    fprintf(file,"	%d,	%d,	%d,	/*  sz: sections, doodads, aliases */\n",
-				geom->num_sections,geom->num_doodads,
-				geom->num_key_aliases);
-    fprintf(file,"	%d,	%d,	%d,	/* num: props, colors, shapes */\n",
-				geom->num_properties,geom->num_colors,
-				geom->num_shapes);
-    fprintf(file,"	%d,	%d,	%d,	/* num: sections, doodads, aliases */\n",
-				geom->num_sections,geom->num_doodads,
-				geom->num_key_aliases);
-    fprintf(file,"	%s,	%s,	%s,\n",
-				(geom->num_properties>0?"g_props":"NULL"),
-				(geom->num_colors>0?"g_colors":"NULL"),
-				(geom->num_shapes>0?"g_shapes":"NULL"));
-    fprintf(file,"	%s,	%s,	%s\n",
-				(geom->num_sections>0?"g_sections":"NULL"),
-				(geom->num_doodads>0?"g_doodads":"NULL"),
-				(geom->num_key_aliases>0?"g_aliases":"NULL"));
-    fprintf(file,"};\n\n");
-    fprintf(file,"static Bool\n");
-    fprintf(file,"_InitHdrGeom(DPYTYPE dpy,XkbGeometryPtr geom)\n");
-    fprintf(file,"{\n");
-    if (geom->name!=None) {
-	fprintf(file,"    geom->name= GET_ATOM(dpy,\"%s\");\n",
-				XkbAtomText(xkb->dpy,geom->name,XkbCFile));
-    }
-    for (i=0;i<geom->num_shapes;i++) {
-	fprintf(file,"    geom->shapes[%2d].name= GET_ATOM(dpy,\"%s\");\n",i,
-			XkbAtomText(xkb->dpy,geom->shapes[i].name,XkbCFile));
-    }
-    if (geom->num_doodads>0)
-	fprintf(file,"    _InitGeomDoodads(dpy,geom);\n");
-    fprintf(file,"    _InitSections(dpy,geom);\n");
-    fprintf(file,"}\n\n");
+WriteCHdrGeometry(FILE *file, XkbDescPtr xkb)
+{
+    XkbGeometryPtr geom;
+    register int i;
+
+    if ((!xkb) || (!xkb->geom)) {
+        _XkbLibError(_XkbErrMissingGeometry, "WriteCHdrGeometry", 0);
+        return False;
+    }
+    geom = xkb->geom;
+    WriteCHdrGeomProps(file, xkb, geom);
+    WriteCHdrGeomColors(file, xkb, geom);
+    WriteCHdrGeomShapes(file, xkb, geom);
+    WriteCHdrGeomSections(file, xkb, geom);
+    WriteCHdrGeomDoodads(file, xkb, geom, NULL, 0);
+    WriteCHdrGeomAliases(file, xkb, geom);
+    fprintf(file, "\nstatic XkbGeometryRec	geom= {\n");
+    fprintf(file, "	None,			/* name */\n");
+    fprintf(file, "	%d, %d,		/* width, height */\n",
+            geom->width_mm, geom->height_mm);
+    if (geom->label_font)
+        fprintf(file, "	\"%s\",/* label font */\n",
+                XkbStringText(geom->label_font, XkbCFile));
+    else
+        fprintf(file, "	NULL,		/* label font */\n");
+    if (geom->label_color)
+        fprintf(file, "	&g_colors[%d],		/* label color */\n",
+                XkbGeomColorIndex(geom, geom->label_color));
+    else
+        fprintf(file, "	NULL,			/* label color */\n");
+    if (geom->base_color)
+        fprintf(file, "	&g_colors[%d],		/* base color */\n",
+                XkbGeomColorIndex(geom, geom->base_color));
+    else
+        fprintf(file, "	NULL,			/* base color */\n");
+    fprintf(file,
+            "	%d,	%d,	%d,	/*  sz: props, colors, shapes */\n",
+            geom->num_properties, geom->num_colors, geom->num_shapes);
+    fprintf(file,
+            "	%d,	%d,	%d,	/*  sz: sections, doodads, aliases */\n",
+            geom->num_sections, geom->num_doodads, geom->num_key_aliases);
+    fprintf(file,
+            "	%d,	%d,	%d,	/* num: props, colors, shapes */\n",
+            geom->num_properties, geom->num_colors, geom->num_shapes);
+    fprintf(file,
+            "	%d,	%d,	%d,	/* num: sections, doodads, aliases */\n",
+            geom->num_sections, geom->num_doodads, geom->num_key_aliases);
+    fprintf(file, "	%s,	%s,	%s,\n",
+            (geom->num_properties > 0 ? "g_props" : "NULL"),
+            (geom->num_colors > 0 ? "g_colors" : "NULL"),
+            (geom->num_shapes > 0 ? "g_shapes" : "NULL"));
+    fprintf(file, "	%s,	%s,	%s\n",
+            (geom->num_sections > 0 ? "g_sections" : "NULL"),
+            (geom->num_doodads > 0 ? "g_doodads" : "NULL"),
+            (geom->num_key_aliases > 0 ? "g_aliases" : "NULL"));
+    fprintf(file, "};\n\n");
+    fprintf(file, "static Bool\n");
+    fprintf(file, "_InitHdrGeom(DPYTYPE dpy,XkbGeometryPtr geom)\n");
+    fprintf(file, "{\n");
+    if (geom->name != None) {
+        fprintf(file, "    geom->name= GET_ATOM(dpy,\"%s\");\n",
+                XkbAtomText(xkb->dpy, geom->name, XkbCFile));
+    }
+    for (i = 0; i < geom->num_shapes; i++) {
+        fprintf(file, "    geom->shapes[%2d].name= GET_ATOM(dpy,\"%s\");\n", i,
+                XkbAtomText(xkb->dpy, geom->shapes[i].name, XkbCFile));
+    }
+    if (geom->num_doodads > 0)
+        fprintf(file, "    _InitGeomDoodads(dpy,geom);\n");
+    fprintf(file, "    _InitSections(dpy,geom);\n");
+    fprintf(file, "}\n\n");
     return True;
 }
 
 static Bool
-WriteCHdrGeomFile(FILE *file,XkbFileInfo *result)
+WriteCHdrGeomFile(FILE *file, XkbFileInfo *result)
 {
-Bool		ok;
+    Bool ok;
 
-    ok= WriteCHdrGeometry(file,result->xkb);
+    ok = WriteCHdrGeometry(file, result->xkb);
     return ok;
 }
 
 static Bool
-WriteCHdrLayout(FILE *file,XkbFileInfo *result)
+WriteCHdrLayout(FILE *file, XkbFileInfo *result)
 {
-Bool		ok;
-XkbDescPtr	xkb;
+    Bool ok;
+    XkbDescPtr xkb;
 
-    xkb= result->xkb;
-    ok= WriteCHdrVMods(file,xkb->dpy,xkb);
-    ok= WriteCHdrKeycodes(file,xkb)&&ok;
-    ok= WriteCHdrSymbols(file,xkb)&&ok;
-    ok= WriteCHdrGeometry(file,xkb)&&ok;
+    xkb = result->xkb;
+    ok = WriteCHdrVMods(file, xkb->dpy, xkb);
+    ok = WriteCHdrKeycodes(file, xkb) && ok;
+    ok = WriteCHdrSymbols(file, xkb) && ok;
+    ok = WriteCHdrGeometry(file, xkb) && ok;
     return ok;
 }
 
 static Bool
-WriteCHdrSemantics(FILE *file,XkbFileInfo *result)
+WriteCHdrSemantics(FILE *file, XkbFileInfo *result)
 {
-Bool		ok;
-XkbDescPtr	xkb;
+    Bool ok;
+    XkbDescPtr xkb;
 
-    xkb= result->xkb;
-    ok= WriteCHdrVMods(file,xkb->dpy,xkb);
-    ok= WriteCHdrKeyTypes(file,xkb->dpy,xkb)&&ok;
-    ok= WriteCHdrCompatMap(file,xkb->dpy,xkb)&&ok;
-    ok= WriteCHdrIndicators(file,xkb->dpy,xkb)&&ok;
+    xkb = result->xkb;
+    ok = WriteCHdrVMods(file, xkb->dpy, xkb);
+    ok = WriteCHdrKeyTypes(file, xkb->dpy, xkb) && ok;
+    ok = WriteCHdrCompatMap(file, xkb->dpy, xkb) && ok;
+    ok = WriteCHdrIndicators(file, xkb->dpy, xkb) && ok;
     return ok;
 }
 
 static Bool
-WriteCHdrKeymap(FILE *file,XkbFileInfo *result)
+WriteCHdrKeymap(FILE *file, XkbFileInfo *result)
 {
-Bool		ok;
-XkbDescPtr	xkb;
+    Bool ok;
+    XkbDescPtr xkb;
 
-    xkb= result->xkb;
-    ok= WriteCHdrVMods(file,xkb->dpy,xkb);
-    ok= ok&&WriteCHdrKeycodes(file,xkb);
-    ok= ok&&WriteCHdrClientMap(file,xkb->dpy,xkb);
-    ok= ok&&WriteCHdrServerMap(file,xkb->dpy,xkb);
-    ok= ok&&WriteCHdrCompatMap(file,xkb->dpy,xkb);
-    ok= WriteCHdrIndicators(file,xkb->dpy,xkb)&&ok;
-    ok= ok&&WriteCHdrGeometry(file,xkb);
+    xkb = result->xkb;
+    ok = WriteCHdrVMods(file, xkb->dpy, xkb);
+    ok = ok && WriteCHdrKeycodes(file, xkb);
+    ok = ok && WriteCHdrClientMap(file, xkb->dpy, xkb);
+    ok = ok && WriteCHdrServerMap(file, xkb->dpy, xkb);
+    ok = ok && WriteCHdrCompatMap(file, xkb->dpy, xkb);
+    ok = WriteCHdrIndicators(file, xkb->dpy, xkb) && ok;
+    ok = ok && WriteCHdrGeometry(file, xkb);
     return ok;
 }
 
 Bool
-XkbWriteCFile(FILE *out,char *name,XkbFileInfo *result)
+XkbWriteCFile(FILE *out, char *name, XkbFileInfo *result)
 {
-Bool	 		ok;
-XkbDescPtr		xkb;
-Bool			(*func)(
-	FILE *		/* file*/,
-	XkbFileInfo *	/* result */
-);
+    Bool ok;
+    XkbDescPtr xkb;
+
+    Bool (*func) (FILE *        /* file */,
+                  XkbFileInfo * /* result */
+        );
 
     switch (result->type) {
-	case XkmSemanticsFile:
-	    func= WriteCHdrSemantics;
-	    break;
-	case XkmLayoutFile:
-	    func= WriteCHdrLayout;
-	    break;
-	case XkmKeymapFile:
-	    func= WriteCHdrKeymap;
-	    break;
-        case XkmGeometryIndex:
-        case XkmGeometryFile:
-	    func= WriteCHdrGeomFile;
-	    break;
-	default:
-	    _XkbLibError(_XkbErrIllegalContents,"XkbWriteCFile",result->type);
-	    return False;
-    }
-    xkb= result->xkb;
-    if (out==NULL) {
-	_XkbLibError(_XkbErrFileCannotOpen,"XkbWriteCFile",0);
-	ok= False;
+    case XkmSemanticsFile:
+        func = WriteCHdrSemantics;
+        break;
+    case XkmLayoutFile:
+        func = WriteCHdrLayout;
+        break;
+    case XkmKeymapFile:
+        func = WriteCHdrKeymap;
+        break;
+    case XkmGeometryIndex:
+    case XkmGeometryFile:
+        func = WriteCHdrGeomFile;
+        break;
+    default:
+        _XkbLibError(_XkbErrIllegalContents, "XkbWriteCFile", result->type);
+        return False;
+    }
+    xkb = result->xkb;
+    if (out == NULL) {
+        _XkbLibError(_XkbErrFileCannotOpen, "XkbWriteCFile", 0);
+        ok = False;
     }
     else {
-	char *tmp,*hdrdef;
-	tmp= (char *)strrchr(name,'/');
-	if (tmp==NULL)
-	     tmp= name;
-	else tmp++;
-	hdrdef= (char *)_XkbCalloc(strlen(tmp)+1,sizeof(char));
-	if (hdrdef) {
-	    strcpy(hdrdef,tmp);
-	    tmp= hdrdef;
-	    while (*tmp) {
-		if (islower(*tmp))		*tmp= toupper(*tmp);
-		else if (!isalnum(*tmp))	*tmp= '_';
-		tmp++;
-	    }
-	    fprintf(out,"/* This file generated automatically by xkbcomp */\n");
-	    fprintf(out,"/* DO  NOT EDIT */\n");
-	    fprintf(out,"#ifndef %s\n",hdrdef);
-	    fprintf(out,"#define %s 1\n\n",hdrdef);
-	}
-	fprintf(out,"#ifndef XKB_IN_SERVER\n");
-	fprintf(out,"#define GET_ATOM(d,s)	XInternAtom(d,s,0)\n");
-	fprintf(out,"#define DPYTYPE	Display *\n");
-	fprintf(out,"#else\n");
-	fprintf(out,"#define GET_ATOM(d,s)	MakeAtom(s,strlen(s),1)\n");
-	fprintf(out,"#define DPYTYPE	char *\n");
-	fprintf(out,"#endif\n");
-	fprintf(out,"#define NUM_KEYS	%d\n",xkb->max_key_code+1);
-	ok= (*func)(out,result);
-	if (hdrdef)
-	    fprintf(out,"#endif /* %s */\n",hdrdef);
+        char *tmp, *hdrdef;
+
+        tmp = (char *) strrchr(name, '/');
+        if (tmp == NULL)
+            tmp = name;
+        else
+            tmp++;
+        hdrdef = (char *) _XkbCalloc(strlen(tmp) + 1, sizeof(char));
+        if (hdrdef) {
+            strcpy(hdrdef, tmp);
+            tmp = hdrdef;
+            while (*tmp) {
+                if (islower(*tmp))
+                    *tmp = toupper(*tmp);
+                else if (!isalnum(*tmp))
+                    *tmp = '_';
+                tmp++;
+            }
+            fprintf(out, "/* This file generated automatically by xkbcomp */\n");
+            fprintf(out, "/* DO  NOT EDIT */\n");
+            fprintf(out, "#ifndef %s\n", hdrdef);
+            fprintf(out, "#define %s 1\n\n", hdrdef);
+        }
+        fprintf(out, "#ifndef XKB_IN_SERVER\n");
+        fprintf(out, "#define GET_ATOM(d,s)	XInternAtom(d,s,0)\n");
+        fprintf(out, "#define DPYTYPE	Display *\n");
+        fprintf(out, "#else\n");
+        fprintf(out, "#define GET_ATOM(d,s)	MakeAtom(s,strlen(s),1)\n");
+        fprintf(out, "#define DPYTYPE	char *\n");
+        fprintf(out, "#endif\n");
+        fprintf(out, "#define NUM_KEYS	%d\n", xkb->max_key_code + 1);
+        ok = (*func) (out, result);
+        if (hdrdef)
+            fprintf(out, "#endif /* %s */\n", hdrdef);
     }
 
     if (!ok) {
-	return False;
+        return False;
     }
     return True;
 }

Reply via email to