Ejemplo n.º 1
0
static Bool
CopyISOLockArgs(XkbDescPtr xkb,XkbAction *action,char *buf,int *sz)
{
XkbISOAction *	act;
char		tbuf[64];

    act= &action->iso;
    if (act->flags&XkbSA_ISODfltIsGroup) {
	TryCopyStr(tbuf,"group=",sz);
	if (act->flags&XkbSA_GroupAbsolute)
	     sprintf(tbuf,"%d",XkbSAGroup(act)+1);
	else if (XkbSAGroup(act)<0)
	     sprintf(tbuf,"%d",XkbSAGroup(act));
	else sprintf(tbuf,"+%d",XkbSAGroup(act));
	TryCopyStr(buf,tbuf,sz);
    }
    else {
	unsigned tmp;
	tmp= XkbModActionVMods(act);
	TryCopyStr(buf,"modifiers=",sz);
	if (act->flags&XkbSA_UseModMapMods)
	     TryCopyStr(buf,"modMapMods",sz);
	else if (act->real_mods || tmp) {
	    if (act->real_mods) {
		TryCopyStr(buf,XkbModMaskText(act->real_mods,XkbXKBFile),sz);
		if (tmp)
		    TryCopyStr(buf,"+",sz);
	    }
	    if (tmp)
		TryCopyStr(buf,XkbVModMaskText(xkb,0,tmp,XkbXKBFile),sz);
	}
	else TryCopyStr(buf,"none",sz);
    }
    TryCopyStr(buf,",affect=",sz);
    if ((act->affect&XkbSA_ISOAffectMask)==0)
	TryCopyStr(buf,"all",sz);
    else {
	int nOut= 0;
	if ((act->affect&XkbSA_ISONoAffectMods)==0) {
	    TryCopyStr(buf,"mods",sz);
	    nOut++;
	}
	if ((act->affect&XkbSA_ISONoAffectGroup)==0) {
	    sprintf(tbuf,"%sgroups",(nOut>0?"+":""));
	    TryCopyStr(buf,tbuf,sz);
	    nOut++;
	}
	if ((act->affect&XkbSA_ISONoAffectPtr)==0) {
	    sprintf(tbuf,"%spointer",(nOut>0?"+":""));
	    TryCopyStr(buf,tbuf,sz);
	    nOut++;
	}
	if ((act->affect&XkbSA_ISONoAffectCtrls)==0) {
	    sprintf(tbuf,"%scontrols",(nOut>0?"+":""));
	    TryCopyStr(buf,tbuf,sz);
	    nOut++;
	}
    }
    return True;
}
Ejemplo n.º 2
0
static char *
siText(SymInterpInfo *	si,CompatInfo *	info)
{
static char buf[128];

    if (si==&info->dflt) {
	sprintf(buf,"default");
    }
    else {
	sprintf(buf,"%s+%s(%s)",XkbKeysymText(si->interp.sym,XkbMessage),
				XkbSIMatchText(si->interp.match,XkbMessage),
				XkbModMaskText(si->interp.mods,XkbMessage));
    }
    return buf;
}
Ejemplo n.º 3
0
char *
XkbVModMaskText(        XkbDescPtr	xkb,
			unsigned	modMask,
			unsigned	mask,
			unsigned	format)
{
register int i,bit;
int	 len;
char *mm,*rtrn;
char *str,buf[BUFFER_SIZE];

    if ((modMask==0)&&(mask==0)) {
	rtrn= tbGetBuffer(5);
	if (format==XkbCFile)
	     sprintf(rtrn,"0");
	else sprintf(rtrn,"none");
	return rtrn;
    }
    if (modMask!=0)
	 mm= XkbModMaskText(modMask,format);
    else mm= NULL;

    str= buf;
    buf[0]= '\0';
    if (mask) {
	char *tmp;
	for (i=0,bit=1;i<XkbNumVirtualMods;i++,bit<<=1) {
	    if (mask&bit) {
		tmp= XkbVModIndexText(xkb,i,format);
		len= strlen(tmp)+1+(str==buf?0:1);
		if (format==XkbCFile)
		    len+= 4;
		if ((str-(buf+len))<=BUFFER_SIZE) {
		    if (str!=buf) {
			if (format==XkbCFile)	*str++= '|';
			else			*str++= '+';
			len--;
		    }
		}
		if (format==XkbCFile)
		     sprintf(str,"%sMask",tmp);
		else strcpy(str,tmp);
		str= &str[len-1];
	    }
	}
	str= buf;
    }
    else str= NULL;
    if (mm)	
	len= strlen(mm);
    else	len= 0;
    if (str)
	len+= strlen(str)+(mm==NULL?0:1);
    if (len>=BUFFER_SIZE)
	len= BUFFER_SIZE-1;
    rtrn= tbGetBuffer(len+1);
    rtrn[0]= '\0';

    if (mm!=NULL) {
	i= strlen(mm);
	if (i>len)
	    i= len;
	strcpy(rtrn,mm);
    }
    else {
	i=0;
    }
    if (str!=NULL) {
	if (mm!=NULL) {
	    if (format==XkbCFile)	strcat(rtrn,"|");
	    else			strcat(rtrn,"+");
	}
	strncat(rtrn,str,len-i);
    }
    rtrn[len]= '\0';
    return rtrn;
}
Ejemplo n.º 4
0
Bool
HandleVModDef(VModDef *stmt,unsigned mergeMode,VModInfo *info)
{
register int 	i,bit,nextFree;
ExprResult 	mod;
XkbServerMapPtr	srv;
XkbNamesPtr	names;
Atom		stmtName;
    
    srv= info->xkb->server;
    names= info->xkb->names;
    stmtName= XkbInternAtom(info->xkb->dpy,XkbAtomGetString(NULL,stmt->name),
    									False);
    for (i=0,bit=1,nextFree= -1;i<XkbNumVirtualMods;i++,bit<<=1) {
	if (info->defined&bit) {
	    if (names->vmods[i]==stmtName) {	/* already defined */
		info->available|= bit;
		if (stmt->value==NULL)
		    return True;
		else {
		    char *str1,*str2 = "";
		    if (!ExprResolveModMask(stmt->value,&mod,NULL,NULL)) {
			str1= XkbAtomText(NULL,stmt->name,XkbMessage);
			ACTION1("Declaration of %s ignored\n",str1);
			return False;
		    }
		    if (mod.uval==srv->vmods[i])
			return True;

		    str1= XkbAtomText(NULL,stmt->name,XkbMessage);
		    WARN1("Virtual modifier %s multiply defined\n",str1);
		    str1= XkbModMaskText(srv->vmods[i],XkbCFile);
		    if (mergeMode==MergeOverride) {
			str2= str1;
			str1= XkbModMaskText(mod.uval,XkbCFile);
		    }
		    ACTION2("Using %s, ignoring %s\n",str1,str2);
		    if (mergeMode==MergeOverride)
			srv->vmods[i]= mod.uval;
		    return True;
		}
	    }
	}
	else if (nextFree<0)
	    nextFree= i;
    }
    if (nextFree<0) {
	ERROR1("Too many virtual modifiers defined (maximum %d)\n",
						XkbNumVirtualMods);
	ACTION("Exiting\n");
	return False;
    }
    info->defined|= (1<<nextFree);
    info->newlyDefined|= (1<<nextFree);
    info->available|= (1<<nextFree);
    names->vmods[nextFree]= stmtName;
    if (stmt->value==NULL)
	return True;
    if (ExprResolveModMask(stmt->value,&mod,NULL,NULL)) {
	srv->vmods[nextFree]= mod.uval;
	return True;
    }
    ACTION1("Declaration of %s ignored\n",
    				XkbAtomText(NULL,stmt->name,XkbMessage));
    return False;
}