Revert xkb changes that broke XkbGetKeyboard()
This commit is contained in:
		
							parent
							
								
									79016d4036
								
							
						
					
					
						commit
						654619d76c
					
				| 
						 | 
				
			
			@ -30,8 +30,10 @@ DIX_SRCS = \
 | 
			
		|||
XKBFILE_SRCS = \
 | 
			
		||||
        maprules.c \
 | 
			
		||||
        xkmread.c \
 | 
			
		||||
        xkbtext.c \
 | 
			
		||||
        xkbfmisc.c \
 | 
			
		||||
        xkberrs.c
 | 
			
		||||
        xkberrs.c \
 | 
			
		||||
        xkbout.c
 | 
			
		||||
 | 
			
		||||
X11_SRCS = \
 | 
			
		||||
        XKBMisc.c \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										429
									
								
								xkb/xkbfmisc.c
								
								
								
								
							
							
						
						
									
										429
									
								
								xkb/xkbfmisc.c
								
								
								
								
							| 
						 | 
				
			
			@ -48,16 +48,185 @@
 | 
			
		|||
#include <X11/extensions/XKBgeom.h>
 | 
			
		||||
#include "xkb.h"
 | 
			
		||||
 | 
			
		||||
unsigned
 | 
			
		||||
_XkbKSCheckCase(KeySym ks)
 | 
			
		||||
{
 | 
			
		||||
unsigned	set,rtrn;
 | 
			
		||||
 | 
			
		||||
    set= (ks & (~0xff)) >> 8;
 | 
			
		||||
    rtrn= 0;
 | 
			
		||||
    switch (set) {
 | 
			
		||||
	case 0:		/* latin 1 */
 | 
			
		||||
	    if (((ks>=XK_A)&&(ks<=XK_Z))||
 | 
			
		||||
		((ks>=XK_Agrave)&&(ks<=XK_THORN)&&(ks!=XK_multiply))) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (((ks>=XK_a)&&(ks<=XK_z))||
 | 
			
		||||
		((ks>=XK_agrave)&&(ks<=XK_ydiaeresis))) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case 1:		/* latin 2 */
 | 
			
		||||
	    if (((ks>=XK_Aogonek)&&(ks<=XK_Zabovedot)&&(ks!=XK_breve))||
 | 
			
		||||
		((ks>=XK_Racute)&&(ks<=XK_Tcedilla))) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (((ks>=XK_aogonek)&&(ks<=XK_zabovedot)&&(ks!=XK_caron))||
 | 
			
		||||
		((ks>=XK_racute)&&(ks<=XK_tcedilla))) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case 2:		/* latin 3 */
 | 
			
		||||
	    if (((ks>=XK_Hstroke)&&(ks<=XK_Jcircumflex))||
 | 
			
		||||
		((ks>=XK_Cabovedot)&&(ks<=XK_Scircumflex))) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (((ks>=XK_hstroke)&&(ks<=XK_jcircumflex))||
 | 
			
		||||
		((ks>=XK_cabovedot)&&(ks<=XK_scircumflex))) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case 3:		/* latin 4 */
 | 
			
		||||
	    if (((ks>=XK_Rcedilla)&&(ks<=XK_Tslash))||
 | 
			
		||||
	        (ks==XK_ENG)||
 | 
			
		||||
		((ks>=XK_Amacron)&&(ks<=XK_Umacron))) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (((ks>=XK_rcedilla)&&(ks<=XK_tslash))||
 | 
			
		||||
	        (ks==XK_eng)||
 | 
			
		||||
		((ks>=XK_amacron)&&(ks<=XK_umacron))) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case 18:		/* latin 8 */
 | 
			
		||||
	    if ((ks==XK_Babovedot)||
 | 
			
		||||
                ((ks>=XK_Dabovedot)&&(ks<=XK_Wacute))||
 | 
			
		||||
		((ks>=XK_Ygrave)&&(ks<=XK_Fabovedot))||
 | 
			
		||||
	        (ks==XK_Mabovedot)||
 | 
			
		||||
	        (ks==XK_Pabovedot)||
 | 
			
		||||
	        (ks==XK_Sabovedot)||
 | 
			
		||||
	        (ks==XK_Wdiaeresis)||
 | 
			
		||||
		((ks>=XK_Wcircumflex)&&(ks<=XK_Ycircumflex))) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if ((ks==XK_babovedot)||
 | 
			
		||||
	        (ks==XK_dabovedot)||
 | 
			
		||||
	        (ks==XK_fabovedot)||
 | 
			
		||||
	        (ks==XK_mabovedot)||
 | 
			
		||||
                ((ks>=XK_wgrave)&&(ks<=XK_wacute))||
 | 
			
		||||
	        (ks==XK_ygrave)||
 | 
			
		||||
		((ks>=XK_wdiaeresis)&&(ks<=XK_ycircumflex))) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case 19:		/* latin 9 */
 | 
			
		||||
	    if ((ks==XK_OE)||(ks==XK_Ydiaeresis)) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (ks==XK_oe) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
    }
 | 
			
		||||
    return rtrn;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***===================================================================***/
 | 
			
		||||
 | 
			
		||||
Bool
 | 
			
		||||
XkbLookupGroupAndLevel(	XkbDescPtr 	xkb,
 | 
			
		||||
			int 		key,
 | 
			
		||||
			int *		mods_inout,
 | 
			
		||||
			int *		grp_inout,
 | 
			
		||||
			int *		lvl_rtrn)
 | 
			
		||||
{
 | 
			
		||||
int		nG,eG;
 | 
			
		||||
 | 
			
		||||
    if ((!xkb)||(!XkbKeycodeInRange(xkb,key))||(!grp_inout))
 | 
			
		||||
	return False;
 | 
			
		||||
 | 
			
		||||
    nG= XkbKeyNumGroups(xkb,key);
 | 
			
		||||
    eG= *grp_inout;
 | 
			
		||||
 | 
			
		||||
    if ( nG==0 ) {
 | 
			
		||||
	*grp_inout= 0;
 | 
			
		||||
	if (lvl_rtrn!=NULL)
 | 
			
		||||
	    *lvl_rtrn= 0;
 | 
			
		||||
	return False;
 | 
			
		||||
    }
 | 
			
		||||
    else if ( nG==1 ) {
 | 
			
		||||
	eG= 0;
 | 
			
		||||
    }
 | 
			
		||||
    else if ( eG>=nG ) {
 | 
			
		||||
	unsigned gI= XkbKeyGroupInfo(xkb,key);
 | 
			
		||||
	switch (XkbOutOfRangeGroupAction(gI)) {
 | 
			
		||||
	    default:
 | 
			
		||||
		eG %= nG;
 | 
			
		||||
		break;
 | 
			
		||||
	    case XkbClampIntoRange:
 | 
			
		||||
		eG = nG-1;
 | 
			
		||||
		break;
 | 
			
		||||
	    case XkbRedirectIntoRange:
 | 
			
		||||
		eG = XkbOutOfRangeGroupNumber(gI);
 | 
			
		||||
		if (eG>=nG)
 | 
			
		||||
		    eG= 0;
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    *grp_inout= eG;
 | 
			
		||||
    if (mods_inout!=NULL) {
 | 
			
		||||
	XkbKeyTypePtr	type;
 | 
			
		||||
	int		preserve;
 | 
			
		||||
 | 
			
		||||
	type = XkbKeyKeyType(xkb,key,eG);
 | 
			
		||||
	if (lvl_rtrn!=NULL)
 | 
			
		||||
	    *lvl_rtrn= 0;
 | 
			
		||||
	preserve= 0;
 | 
			
		||||
	if (type->map) { /* find the shift level */
 | 
			
		||||
	    register int i;
 | 
			
		||||
	    register XkbKTMapEntryPtr entry;
 | 
			
		||||
	    for (i=0,entry=type->map;i<type->map_count;i++,entry++) {
 | 
			
		||||
		if ((entry->active)&&
 | 
			
		||||
			(((*mods_inout)&type->mods.mask)==entry->mods.mask)){
 | 
			
		||||
		    if (lvl_rtrn!=NULL)
 | 
			
		||||
			*lvl_rtrn= entry->level;
 | 
			
		||||
		    if (type->preserve)
 | 
			
		||||
			preserve= type->preserve[i].mask;
 | 
			
		||||
		    break;
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
	(*mods_inout)&= ~(type->mods.mask&(~preserve));
 | 
			
		||||
    }
 | 
			
		||||
    return True;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***===================================================================***/
 | 
			
		||||
 | 
			
		||||
static Bool
 | 
			
		||||
XkbWriteSectionFromName(FILE *file,char *sectionName,char *name)
 | 
			
		||||
{
 | 
			
		||||
    fprintf(file,"    xkb_%-20s { include \"%s\" };\n",sectionName,name);
 | 
			
		||||
    ErrorF("    xkb_%-20s { include \"%s\" };\n",sectionName,name);
 | 
			
		||||
    return True;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define	NEED_DESC(n) ((!n)||((n)[0]=='+')||((n)[0]=='|')||(strchr((n),'%')))
 | 
			
		||||
#define	COMPLETE(n)  ((n)&&(!NEED_DESC(n)))
 | 
			
		||||
 | 
			
		||||
/* ARGSUSED */
 | 
			
		||||
static void
 | 
			
		||||
_AddIncl(	FILE *		file,
 | 
			
		||||
		XkbFileInfo *	result,
 | 
			
		||||
		Bool 		topLevel,
 | 
			
		||||
		Bool 		showImplicit,
 | 
			
		||||
		int 		index,
 | 
			
		||||
		void *		priv)
 | 
			
		||||
{
 | 
			
		||||
    if ((priv)&&(strcmp((char *)priv,"%")!=0))
 | 
			
		||||
	fprintf(file,"    include \"%s\"\n",(char *)priv);
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Bool
 | 
			
		||||
XkbWriteXKBKeymapForNames(	FILE *			file,
 | 
			
		||||
				XkbComponentNamesPtr	names,
 | 
			
		||||
| 
						 | 
				
			
			@ -66,29 +235,229 @@ XkbWriteXKBKeymapForNames(	FILE *			file,
 | 
			
		|||
				unsigned		want,
 | 
			
		||||
				unsigned		need)
 | 
			
		||||
{
 | 
			
		||||
    if (!names || (!names->keycodes && !names->types && !names->compat &&
 | 
			
		||||
                   !names->symbols && !names->geometry))
 | 
			
		||||
char *		name,*tmp;
 | 
			
		||||
unsigned	complete;
 | 
			
		||||
XkbNamesPtr	old_names;
 | 
			
		||||
int		multi_section;
 | 
			
		||||
unsigned	wantNames,wantConfig,wantDflts;
 | 
			
		||||
XkbFileInfo	finfo;
 | 
			
		||||
 | 
			
		||||
    bzero(&finfo,sizeof(XkbFileInfo));
 | 
			
		||||
 | 
			
		||||
    complete= 0;
 | 
			
		||||
    if ((name=names->keymap)==NULL)	name= "default";
 | 
			
		||||
    if (COMPLETE(names->keycodes))	complete|= XkmKeyNamesMask;
 | 
			
		||||
    if (COMPLETE(names->types))		complete|= XkmTypesMask;
 | 
			
		||||
    if (COMPLETE(names->compat))	complete|= XkmCompatMapMask;
 | 
			
		||||
    if (COMPLETE(names->symbols))	complete|= XkmSymbolsMask;
 | 
			
		||||
    if (COMPLETE(names->geometry))	complete|= XkmGeometryMask;
 | 
			
		||||
    want|= (complete|need);
 | 
			
		||||
    if (want&XkmSymbolsMask)
 | 
			
		||||
	want|= XkmKeyNamesMask|XkmTypesMask;
 | 
			
		||||
 | 
			
		||||
    if (want==0)
 | 
			
		||||
	return False;
 | 
			
		||||
 | 
			
		||||
    fprintf(file, "xkb_keymap \"%s\" {\n", names->keymap ? names->keymap :
 | 
			
		||||
                                                           "default");
 | 
			
		||||
    if (xkb!=NULL) {
 | 
			
		||||
	 old_names= xkb->names;
 | 
			
		||||
	 finfo.type= 0;
 | 
			
		||||
	 finfo.defined= 0;
 | 
			
		||||
	 finfo.xkb= xkb;
 | 
			
		||||
	 if (!XkbDetermineFileType(&finfo,XkbXKBFile,NULL))
 | 
			
		||||
	    return False;
 | 
			
		||||
    }
 | 
			
		||||
    else old_names= NULL;
 | 
			
		||||
 | 
			
		||||
    if (names->keycodes)
 | 
			
		||||
	XkbWriteSectionFromName(file, "keycodes", names->keycodes);
 | 
			
		||||
    if (names->types)
 | 
			
		||||
	XkbWriteSectionFromName(file, "types", names->types);
 | 
			
		||||
    if (names->compat)
 | 
			
		||||
	XkbWriteSectionFromName(file, "compatibility", names->compat);
 | 
			
		||||
    if (names->symbols)
 | 
			
		||||
	XkbWriteSectionFromName(file, "symbols", names->symbols);
 | 
			
		||||
    if (names->geometry)
 | 
			
		||||
	XkbWriteSectionFromName(file, "geometry", names->geometry);
 | 
			
		||||
    wantConfig= want&(~complete);
 | 
			
		||||
    if (xkb!=NULL) {
 | 
			
		||||
	if (wantConfig&XkmTypesMask) {
 | 
			
		||||
	    if ((!xkb->map) || (xkb->map->num_types<XkbNumRequiredTypes))
 | 
			
		||||
		wantConfig&= ~XkmTypesMask;
 | 
			
		||||
	}
 | 
			
		||||
	if (wantConfig&XkmCompatMapMask) {
 | 
			
		||||
	    if ((!xkb->compat) || (xkb->compat->num_si<1))
 | 
			
		||||
		wantConfig&= ~XkmCompatMapMask;
 | 
			
		||||
	}
 | 
			
		||||
	if (wantConfig&XkmSymbolsMask) {
 | 
			
		||||
	    if ((!xkb->map) || (!xkb->map->key_sym_map))
 | 
			
		||||
		wantConfig&= ~XkmSymbolsMask;
 | 
			
		||||
	}
 | 
			
		||||
	if (wantConfig&XkmIndicatorsMask) {
 | 
			
		||||
	    if (!xkb->indicators)
 | 
			
		||||
		wantConfig&= ~XkmIndicatorsMask;
 | 
			
		||||
	}
 | 
			
		||||
	if (wantConfig&XkmKeyNamesMask) {
 | 
			
		||||
	    if ((!xkb->names)||(!xkb->names->keys))
 | 
			
		||||
		wantConfig&= ~XkmKeyNamesMask;
 | 
			
		||||
	}
 | 
			
		||||
	if ((wantConfig&XkmGeometryMask)&&(!xkb->geom))
 | 
			
		||||
	    wantConfig&= ~XkmGeometryMask;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
	wantConfig= 0;
 | 
			
		||||
    }
 | 
			
		||||
    complete|= wantConfig;
 | 
			
		||||
 | 
			
		||||
    wantDflts= 0;
 | 
			
		||||
    wantNames= want&(~complete);
 | 
			
		||||
    if ((xkb!=NULL) && (old_names!=NULL)) {
 | 
			
		||||
	if (wantNames&XkmTypesMask) {
 | 
			
		||||
	    if (old_names->types!=None) {
 | 
			
		||||
		tmp= XkbAtomGetString(dpy,old_names->types);
 | 
			
		||||
		names->types= _XkbDupString(tmp);
 | 
			
		||||
	    }
 | 
			
		||||
	    else {
 | 
			
		||||
		wantDflts|= XkmTypesMask;
 | 
			
		||||
	    }
 | 
			
		||||
	    complete|= XkmTypesMask; 
 | 
			
		||||
	}
 | 
			
		||||
	if (wantNames&XkmCompatMapMask) {
 | 
			
		||||
	    if (old_names->compat!=None) {
 | 
			
		||||
		tmp= XkbAtomGetString(dpy,old_names->compat);
 | 
			
		||||
		names->compat= _XkbDupString(tmp);
 | 
			
		||||
	    }
 | 
			
		||||
	    else wantDflts|= XkmCompatMapMask;
 | 
			
		||||
	    complete|= XkmCompatMapMask; 
 | 
			
		||||
	}
 | 
			
		||||
	if (wantNames&XkmSymbolsMask) {
 | 
			
		||||
	    if (old_names->symbols==None)
 | 
			
		||||
		return False;
 | 
			
		||||
	    tmp= XkbAtomGetString(dpy,old_names->symbols);
 | 
			
		||||
	    names->symbols= _XkbDupString(tmp);
 | 
			
		||||
	    complete|= XkmSymbolsMask; 
 | 
			
		||||
	}
 | 
			
		||||
	if (wantNames&XkmKeyNamesMask) {
 | 
			
		||||
	   if (old_names->keycodes!=None) {
 | 
			
		||||
		tmp= XkbAtomGetString(dpy,old_names->keycodes);
 | 
			
		||||
		names->keycodes= _XkbDupString(tmp);
 | 
			
		||||
	    }
 | 
			
		||||
	    else wantDflts|= XkmKeyNamesMask;
 | 
			
		||||
	    complete|= XkmKeyNamesMask;
 | 
			
		||||
	}
 | 
			
		||||
	if (wantNames&XkmGeometryMask) {
 | 
			
		||||
	    if (old_names->geometry==None)
 | 
			
		||||
		return False;
 | 
			
		||||
	    tmp= XkbAtomGetString(dpy,old_names->geometry);
 | 
			
		||||
	    names->geometry= _XkbDupString(tmp);
 | 
			
		||||
	    complete|= XkmGeometryMask; 
 | 
			
		||||
	    wantNames&= ~XkmGeometryMask;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    if (complete&XkmCompatMapMask)
 | 
			
		||||
	complete|= XkmIndicatorsMask|XkmVirtualModsMask;
 | 
			
		||||
    else if (complete&(XkmSymbolsMask|XkmTypesMask))
 | 
			
		||||
	complete|= XkmVirtualModsMask;
 | 
			
		||||
    if (need & (~complete))
 | 
			
		||||
	return False;
 | 
			
		||||
    if ((complete&XkmSymbolsMask)&&((XkmKeyNamesMask|XkmTypesMask)&(~complete)))
 | 
			
		||||
	return False;
 | 
			
		||||
 | 
			
		||||
    multi_section= 1;
 | 
			
		||||
    if (((complete&XkmKeymapRequired)==XkmKeymapRequired)&&
 | 
			
		||||
	((complete&(~XkmKeymapLegal))==0)) {
 | 
			
		||||
	fprintf(file,"xkb_keymap \"%s\" {\n",name);
 | 
			
		||||
    }
 | 
			
		||||
    else if (((complete&XkmSemanticsRequired)==XkmSemanticsRequired)&&
 | 
			
		||||
	((complete&(~XkmSemanticsLegal))==0)) {
 | 
			
		||||
	fprintf(file,"xkb_semantics \"%s\" {\n",name);
 | 
			
		||||
    }
 | 
			
		||||
    else if (((complete&XkmLayoutRequired)==XkmLayoutRequired)&&
 | 
			
		||||
	((complete&(~XkmLayoutLegal))==0)) {
 | 
			
		||||
	fprintf(file,"xkb_layout \"%s\" {\n",name);
 | 
			
		||||
    }
 | 
			
		||||
    else if (XkmSingleSection(complete&(~XkmVirtualModsMask))) {
 | 
			
		||||
	multi_section= 0;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
	return False;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wantNames= complete&(~(wantConfig|wantDflts));
 | 
			
		||||
    name= names->keycodes;
 | 
			
		||||
    if (wantConfig&XkmKeyNamesMask)
 | 
			
		||||
	XkbWriteXKBKeycodes(file,&finfo,False,False,_AddIncl,name);
 | 
			
		||||
    else if (wantDflts&XkmKeyNamesMask)
 | 
			
		||||
	fprintf(stderr,"Default symbols not implemented yet!\n");
 | 
			
		||||
    else if (wantNames&XkmKeyNamesMask)
 | 
			
		||||
	XkbWriteSectionFromName(file,"keycodes",name);
 | 
			
		||||
 | 
			
		||||
    name= names->types;
 | 
			
		||||
    if (wantConfig&XkmTypesMask)
 | 
			
		||||
	XkbWriteXKBKeyTypes(file,&finfo,False,False,_AddIncl,name);
 | 
			
		||||
    else if (wantDflts&XkmTypesMask)
 | 
			
		||||
	fprintf(stderr,"Default types not implemented yet!\n");
 | 
			
		||||
    else if (wantNames&XkmTypesMask)
 | 
			
		||||
	XkbWriteSectionFromName(file,"types",name);
 | 
			
		||||
 | 
			
		||||
    name= names->compat;
 | 
			
		||||
    if (wantConfig&XkmCompatMapMask)
 | 
			
		||||
	XkbWriteXKBCompatMap(file,&finfo,False,False,_AddIncl,name);
 | 
			
		||||
    else if (wantDflts&XkmCompatMapMask)
 | 
			
		||||
	fprintf(stderr,"Default interps not implemented yet!\n");
 | 
			
		||||
    else if (wantNames&XkmCompatMapMask)
 | 
			
		||||
	XkbWriteSectionFromName(file,"compatibility",name);
 | 
			
		||||
 | 
			
		||||
    name= names->symbols;
 | 
			
		||||
    if (wantConfig&XkmSymbolsMask)
 | 
			
		||||
	XkbWriteXKBSymbols(file,&finfo,False,False,_AddIncl,name);
 | 
			
		||||
    else if (wantNames&XkmSymbolsMask)
 | 
			
		||||
	XkbWriteSectionFromName(file,"symbols",name);
 | 
			
		||||
 | 
			
		||||
    name= names->geometry;
 | 
			
		||||
    if (wantConfig&XkmGeometryMask)
 | 
			
		||||
	XkbWriteXKBGeometry(file,&finfo,False,False,_AddIncl,name);
 | 
			
		||||
    else if (wantNames&XkmGeometryMask)
 | 
			
		||||
	XkbWriteSectionFromName(file,"geometry",name);
 | 
			
		||||
 | 
			
		||||
    if (multi_section)
 | 
			
		||||
	fprintf(file,"};\n");
 | 
			
		||||
 | 
			
		||||
    return True;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***====================================================================***/
 | 
			
		||||
 | 
			
		||||
/*ARGSUSED*/
 | 
			
		||||
Status
 | 
			
		||||
XkbMergeFile(XkbDescPtr xkb,XkbFileInfo finfo)
 | 
			
		||||
{
 | 
			
		||||
    return BadImplementation;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***====================================================================***/
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
XkbFindKeycodeByName(XkbDescPtr xkb,char *name,Bool use_aliases)
 | 
			
		||||
{
 | 
			
		||||
register int	i;
 | 
			
		||||
 | 
			
		||||
    if ((!xkb)||(!xkb->names)||(!xkb->names->keys))
 | 
			
		||||
	return 0;
 | 
			
		||||
    for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) {
 | 
			
		||||
	if (strncmp(xkb->names->keys[i].name,name,XkbKeyNameLength)==0)
 | 
			
		||||
	    return i;
 | 
			
		||||
    }
 | 
			
		||||
    if (!use_aliases)
 | 
			
		||||
	return 0;
 | 
			
		||||
    if (xkb->geom && xkb->geom->key_aliases) {
 | 
			
		||||
	XkbKeyAliasPtr	a;
 | 
			
		||||
	a= xkb->geom->key_aliases;
 | 
			
		||||
	for (i=0;i<xkb->geom->num_key_aliases;i++,a++) {
 | 
			
		||||
	    if (strncmp(name,a->alias,XkbKeyNameLength)==0)
 | 
			
		||||
		return XkbFindKeycodeByName(xkb,a->real,False);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    if (xkb->names && xkb->names->key_aliases) {
 | 
			
		||||
	XkbKeyAliasPtr	a;
 | 
			
		||||
	a= xkb->names->key_aliases;
 | 
			
		||||
	for (i=0;i<xkb->names->num_key_aliases;i++,a++) {
 | 
			
		||||
	    if (strncmp(name,a->alias,XkbKeyNameLength)==0)
 | 
			
		||||
		return XkbFindKeycodeByName(xkb,a->real,False);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
unsigned
 | 
			
		||||
XkbConvertGetByNameComponents(Bool toXkm,unsigned orig)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -115,6 +484,34 @@ unsigned	rtrn;
 | 
			
		|||
    return rtrn;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned
 | 
			
		||||
XkbConvertXkbComponents(Bool toXkm,unsigned orig)
 | 
			
		||||
{
 | 
			
		||||
unsigned	rtrn;
 | 
			
		||||
 | 
			
		||||
    rtrn= 0;
 | 
			
		||||
    if (toXkm) {
 | 
			
		||||
	if (orig&XkbClientMapMask)	rtrn|= XkmTypesMask|XkmSymbolsMask;
 | 
			
		||||
	if (orig&XkbServerMapMask)	rtrn|= XkmTypesMask|XkmSymbolsMask;
 | 
			
		||||
	if (orig&XkbCompatMapMask)	rtrn|= XkmCompatMapMask;
 | 
			
		||||
	if (orig&XkbIndicatorMapMask)	rtrn|= XkmIndicatorsMask;
 | 
			
		||||
	if (orig&XkbNamesMask)		rtrn|= XkmKeyNamesMask;
 | 
			
		||||
	if (orig&XkbGeometryMask)	rtrn|= XkmGeometryMask;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
	if (orig!=0)			rtrn|= XkbNamesMask;
 | 
			
		||||
	if (orig&XkmTypesMask)		rtrn|= XkbClientMapMask;
 | 
			
		||||
	if (orig&XkmCompatMapMask)
 | 
			
		||||
		rtrn|= XkbCompatMapMask|XkbIndicatorMapMask;
 | 
			
		||||
	if (orig&XkmSymbolsMask)	rtrn|=XkbClientMapMask|XkbServerMapMask;
 | 
			
		||||
	if (orig&XkmIndicatorsMask)	rtrn|= XkbIndicatorMapMask;
 | 
			
		||||
	if (orig&XkmKeyNamesMask)	
 | 
			
		||||
		rtrn|= XkbNamesMask|XkbIndicatorMapMask;
 | 
			
		||||
	if (orig&XkmGeometryMask)	rtrn|= XkbGeometryMask;
 | 
			
		||||
    }
 | 
			
		||||
    return rtrn;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Bool
 | 
			
		||||
XkbDetermineFileType(XkbFileInfoPtr finfo,int format,int *opts_missing)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -167,89 +167,6 @@ int	count,nRead=0;
 | 
			
		|||
    return nRead;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned
 | 
			
		||||
_XkbKSCheckCase(KeySym ks)
 | 
			
		||||
{
 | 
			
		||||
unsigned	set,rtrn;
 | 
			
		||||
 | 
			
		||||
    set= (ks & (~0xff)) >> 8;
 | 
			
		||||
    rtrn= 0;
 | 
			
		||||
    switch (set) {
 | 
			
		||||
	case 0:		/* latin 1 */
 | 
			
		||||
	    if (((ks>=XK_A)&&(ks<=XK_Z))||
 | 
			
		||||
		((ks>=XK_Agrave)&&(ks<=XK_THORN)&&(ks!=XK_multiply))) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (((ks>=XK_a)&&(ks<=XK_z))||
 | 
			
		||||
		((ks>=XK_agrave)&&(ks<=XK_ydiaeresis))) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case 1:		/* latin 2 */
 | 
			
		||||
	    if (((ks>=XK_Aogonek)&&(ks<=XK_Zabovedot)&&(ks!=XK_breve))||
 | 
			
		||||
		((ks>=XK_Racute)&&(ks<=XK_Tcedilla))) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (((ks>=XK_aogonek)&&(ks<=XK_zabovedot)&&(ks!=XK_caron))||
 | 
			
		||||
		((ks>=XK_racute)&&(ks<=XK_tcedilla))) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case 2:		/* latin 3 */
 | 
			
		||||
	    if (((ks>=XK_Hstroke)&&(ks<=XK_Jcircumflex))||
 | 
			
		||||
		((ks>=XK_Cabovedot)&&(ks<=XK_Scircumflex))) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (((ks>=XK_hstroke)&&(ks<=XK_jcircumflex))||
 | 
			
		||||
		((ks>=XK_cabovedot)&&(ks<=XK_scircumflex))) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case 3:		/* latin 4 */
 | 
			
		||||
	    if (((ks>=XK_Rcedilla)&&(ks<=XK_Tslash))||
 | 
			
		||||
	        (ks==XK_ENG)||
 | 
			
		||||
		((ks>=XK_Amacron)&&(ks<=XK_Umacron))) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (((ks>=XK_rcedilla)&&(ks<=XK_tslash))||
 | 
			
		||||
	        (ks==XK_eng)||
 | 
			
		||||
		((ks>=XK_amacron)&&(ks<=XK_umacron))) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case 18:		/* latin 8 */
 | 
			
		||||
	    if ((ks==XK_Babovedot)||
 | 
			
		||||
                ((ks>=XK_Dabovedot)&&(ks<=XK_Wacute))||
 | 
			
		||||
		((ks>=XK_Ygrave)&&(ks<=XK_Fabovedot))||
 | 
			
		||||
	        (ks==XK_Mabovedot)||
 | 
			
		||||
	        (ks==XK_Pabovedot)||
 | 
			
		||||
	        (ks==XK_Sabovedot)||
 | 
			
		||||
	        (ks==XK_Wdiaeresis)||
 | 
			
		||||
		((ks>=XK_Wcircumflex)&&(ks<=XK_Ycircumflex))) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if ((ks==XK_babovedot)||
 | 
			
		||||
	        (ks==XK_dabovedot)||
 | 
			
		||||
	        (ks==XK_fabovedot)||
 | 
			
		||||
	        (ks==XK_mabovedot)||
 | 
			
		||||
                ((ks>=XK_wgrave)&&(ks<=XK_wacute))||
 | 
			
		||||
	        (ks==XK_ygrave)||
 | 
			
		||||
		((ks>=XK_wdiaeresis)&&(ks<=XK_ycircumflex))) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case 19:		/* latin 9 */
 | 
			
		||||
	    if ((ks==XK_OE)||(ks==XK_Ydiaeresis)) {
 | 
			
		||||
		rtrn|= _XkbKSUpper;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (ks==XK_oe) {
 | 
			
		||||
		rtrn|= _XkbKSLower;
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
    }
 | 
			
		||||
    return rtrn;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***====================================================================***/
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
| 
						 | 
				
			
			@ -1251,10 +1168,14 @@ int			nRead;
 | 
			
		|||
		*loaded_rtrn|= XkmGeometryMask;
 | 
			
		||||
	    break;
 | 
			
		||||
	default:
 | 
			
		||||
	    _XkbLibError(_XkbErrBadImplementation,
 | 
			
		||||
	    			XkbConfigText(tmpTOC.type,XkbMessage),0);
 | 
			
		||||
	    nRead= 0;
 | 
			
		||||
	    break;
 | 
			
		||||
    }
 | 
			
		||||
    if (nRead!=tmpTOC.size) {
 | 
			
		||||
	_XkbLibError(_XkbErrBadLength,XkbConfigText(tmpTOC.type,XkbMessage),
 | 
			
		||||
						nRead-tmpTOC.size);
 | 
			
		||||
	return 0;
 | 
			
		||||
    }
 | 
			
		||||
    return (nRead>=0);
 | 
			
		||||
| 
						 | 
				
			
			@ -1288,6 +1209,8 @@ char 		name[100];
 | 
			
		|||
		return _XkbDupString(name);
 | 
			
		||||
	    break;
 | 
			
		||||
	default:
 | 
			
		||||
	    _XkbLibError(_XkbErrBadImplementation,
 | 
			
		||||
				XkbConfigText(tmpTOC.type,XkbMessage),0);
 | 
			
		||||
	    break;
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -1353,6 +1276,8 @@ unsigned		which= need|want;
 | 
			
		|||
		tmp= ReadXkmGeometry(file,result);
 | 
			
		||||
		break;
 | 
			
		||||
	    default:
 | 
			
		||||
		_XkbLibError(_XkbErrBadImplementation,
 | 
			
		||||
				XkbConfigText(tmpTOC.type,XkbMessage),0);
 | 
			
		||||
		tmp= 0;
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1362,7 +1287,8 @@ unsigned		which= need|want;
 | 
			
		|||
	    result->defined|= (1<<toc[i].type);
 | 
			
		||||
	}
 | 
			
		||||
	if (nRead!=tmpTOC.size) {
 | 
			
		||||
            return 0;
 | 
			
		||||
	    _XkbLibError(_XkbErrBadLength,XkbConfigText(tmpTOC.type,XkbMessage),
 | 
			
		||||
	    						nRead-tmpTOC.size);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    return which;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue