summaryrefslogtreecommitdiff
path: root/app/xkbcomp/alias.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/xkbcomp/alias.c')
-rw-r--r--app/xkbcomp/alias.c386
1 files changed, 207 insertions, 179 deletions
diff --git a/app/xkbcomp/alias.c b/app/xkbcomp/alias.c
index f228b0d66..ba55d3d32 100644
--- a/app/xkbcomp/alias.c
+++ b/app/xkbcomp/alias.c
@@ -1,4 +1,3 @@
-/* $Xorg: alias.c,v 1.3 2000/08/17 19:54:30 cpqbld Exp $ */
/************************************************************
Copyright (c) 1995 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
#include "xkbcomp.h"
#include "misc.h"
@@ -34,228 +32,258 @@
#include <X11/extensions/XKBgeom.h>
static void
-HandleCollision(AliasInfo *old,AliasInfo *new)
+HandleCollision(AliasInfo * old, AliasInfo * new)
{
- if (strncmp(new->real,old->real,XkbKeyNameLength)==0) {
- if (((new->def.fileID==old->def.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN2("Alias of %s for %s declared more than once\n",
- XkbKeyNameText(new->alias,XkbMessage),
- XkbKeyNameText(new->real,XkbMessage));
- ACTION("First definition ignored\n");
- }
+ if (strncmp(new->real, old->real, XkbKeyNameLength) == 0)
+ {
+ if (((new->def.fileID == old->def.fileID) && (warningLevel > 0)) ||
+ (warningLevel > 9))
+ {
+ WARN2("Alias of %s for %s declared more than once\n",
+ XkbKeyNameText(new->alias, XkbMessage),
+ XkbKeyNameText(new->real, XkbMessage));
+ ACTION("First definition ignored\n");
+ }
}
- else {
- char *use,*ignore;
- if (new->def.merge==MergeAugment) {
- use= old->real;
- ignore= new->real;
- }
- else {
- use= new->real;
- ignore= old->real;
- }
- if (((old->def.fileID==new->def.fileID)&&(warningLevel>0))||
- (warningLevel>9)){
- WARN1("Multiple definitions for alias %s\n",
- XkbKeyNameText(old->alias,XkbMessage));
- ACTION2("Using %s, ignoring %s\n", XkbKeyNameText(use,XkbMessage),
- XkbKeyNameText(ignore,XkbMessage));
- }
- if (use!=old->real)
- memcpy(old->real,use,XkbKeyNameLength);
+ else
+ {
+ char *use, *ignore;
+ if (new->def.merge == MergeAugment)
+ {
+ use = old->real;
+ ignore = new->real;
+ }
+ else
+ {
+ use = new->real;
+ ignore = old->real;
+ }
+ if (((old->def.fileID == new->def.fileID) && (warningLevel > 0)) ||
+ (warningLevel > 9))
+ {
+ WARN1("Multiple definitions for alias %s\n",
+ XkbKeyNameText(old->alias, XkbMessage));
+ ACTION2("Using %s, ignoring %s\n",
+ XkbKeyNameText(use, XkbMessage),
+ XkbKeyNameText(ignore, XkbMessage));
+ }
+ if (use != old->real)
+ memcpy(old->real, use, XkbKeyNameLength);
}
- old->def.fileID= new->def.fileID;
- old->def.merge= new->def.merge;
+ old->def.fileID = new->def.fileID;
+ old->def.merge = new->def.merge;
return;
}
static void
-InitAliasInfo( AliasInfo * info,
- unsigned merge,
- unsigned file_id,
- char * alias,
- char * real)
+InitAliasInfo(AliasInfo * info,
+ unsigned merge, unsigned file_id, char *alias, char *real)
{
- bzero(info,sizeof(AliasInfo));
- info->def.merge= merge;
- info->def.fileID= file_id;
- strncpy(info->alias,alias,XkbKeyNameLength);
- strncpy(info->real,real,XkbKeyNameLength);
+ bzero(info, sizeof(AliasInfo));
+ info->def.merge = merge;
+ info->def.fileID = file_id;
+ strncpy(info->alias, alias, XkbKeyNameLength);
+ strncpy(info->real, real, XkbKeyNameLength);
return;
}
-int
-HandleAliasDef( KeyAliasDef * def,
- unsigned merge,
- unsigned file_id,
- AliasInfo ** info_in)
+int
+HandleAliasDef(KeyAliasDef * def,
+ unsigned merge, unsigned file_id, AliasInfo ** info_in)
{
-AliasInfo * info;
+ AliasInfo *info;
- for (info= *info_in;info!=NULL;info= (AliasInfo *)info->def.next) {
- if (strncmp(info->alias,def->alias,XkbKeyNameLength)==0) {
- AliasInfo new;
- InitAliasInfo(&new,merge,file_id,def->alias,def->real);
- HandleCollision(info,&new);
- return True;
- }
+ for (info = *info_in; info != NULL; info = (AliasInfo *) info->def.next)
+ {
+ if (strncmp(info->alias, def->alias, XkbKeyNameLength) == 0)
+ {
+ AliasInfo new;
+ InitAliasInfo(&new, merge, file_id, def->alias, def->real);
+ HandleCollision(info, &new);
+ return True;
+ }
}
- info= uTypedCalloc(1,AliasInfo);
- if (info==NULL) {
- WSGO("Allocation failure in HandleAliasDef\n");
- return False;
+ info = uTypedCalloc(1, AliasInfo);
+ if (info == NULL)
+ {
+ WSGO("Allocation failure in HandleAliasDef\n");
+ return False;
}
- info->def.fileID= file_id;
- info->def.merge= merge;
- info->def.next= (CommonInfo *)*info_in;
- memcpy(info->alias,def->alias,XkbKeyNameLength);
- memcpy(info->real,def->real,XkbKeyNameLength);
- *info_in= (AliasInfo *)AddCommonInfo(&(*info_in)->def,&info->def);
+ info->def.fileID = file_id;
+ info->def.merge = merge;
+ info->def.next = (CommonInfo *) * info_in;
+ memcpy(info->alias, def->alias, XkbKeyNameLength);
+ memcpy(info->real, def->real, XkbKeyNameLength);
+ *info_in = (AliasInfo *) AddCommonInfo(&(*info_in)->def, &info->def);
return True;
}
void
-ClearAliases(AliasInfo **info_in)
+ClearAliases(AliasInfo ** info_in)
{
- if ((info_in)&&(*info_in))
- ClearCommonInfo(&(*info_in)->def);
+ if ((info_in) && (*info_in))
+ ClearCommonInfo(&(*info_in)->def);
return;
}
Bool
-MergeAliases(AliasInfo **into,AliasInfo **merge,unsigned how_merge)
+MergeAliases(AliasInfo ** into, AliasInfo ** merge, unsigned how_merge)
{
-AliasInfo * tmp;
-KeyAliasDef def;
+ AliasInfo *tmp;
+ KeyAliasDef def;
- if ((*merge)==NULL)
- return True;
- if ((*into)==NULL) {
- *into= *merge;
- *merge= NULL;
- return True;
- }
- bzero((char *)&def,sizeof(KeyAliasDef));
- for (tmp= *merge;tmp!=NULL;tmp= (AliasInfo *)tmp->def.next) {
- if (how_merge==MergeDefault)
- def.merge= tmp->def.merge;
- else def.merge= how_merge;
- memcpy(def.alias,tmp->alias,XkbKeyNameLength);
- memcpy(def.real,tmp->real,XkbKeyNameLength);
- if (!HandleAliasDef(&def,def.merge,tmp->def.fileID,into))
- return False;
+ if ((*merge) == NULL)
+ return True;
+ if ((*into) == NULL)
+ {
+ *into = *merge;
+ *merge = NULL;
+ return True;
+ }
+ bzero((char *) &def, sizeof(KeyAliasDef));
+ for (tmp = *merge; tmp != NULL; tmp = (AliasInfo *) tmp->def.next)
+ {
+ if (how_merge == MergeDefault)
+ def.merge = tmp->def.merge;
+ else
+ def.merge = how_merge;
+ memcpy(def.alias, tmp->alias, XkbKeyNameLength);
+ memcpy(def.real, tmp->real, XkbKeyNameLength);
+ if (!HandleAliasDef(&def, def.merge, tmp->def.fileID, into))
+ return False;
}
return True;
}
int
-ApplyAliases(XkbDescPtr xkb,Bool toGeom,AliasInfo **info_in)
+ApplyAliases(XkbDescPtr xkb, Bool toGeom, AliasInfo ** info_in)
{
-register int i;
-XkbKeyAliasPtr old,a;
-AliasInfo * info;
-int nNew,nOld;
-Status status;
+ register int i;
+ XkbKeyAliasPtr old, a;
+ AliasInfo *info;
+ int nNew, nOld;
+ Status status;
- if (*info_in==NULL)
- return True;
- if (toGeom) {
- nOld= (xkb->geom?xkb->geom->num_key_aliases:0);
- old= (xkb->geom?xkb->geom->key_aliases:NULL);
+ if (*info_in == NULL)
+ return True;
+ if (toGeom)
+ {
+ nOld = (xkb->geom ? xkb->geom->num_key_aliases : 0);
+ old = (xkb->geom ? xkb->geom->key_aliases : NULL);
}
- else {
- nOld= (xkb->names?xkb->names->num_key_aliases:0);
- old= (xkb->names?xkb->names->key_aliases:NULL);
+ else
+ {
+ nOld = (xkb->names ? xkb->names->num_key_aliases : 0);
+ old = (xkb->names ? xkb->names->key_aliases : NULL);
}
- for (nNew=0,info= *info_in;info!=NULL;info= (AliasInfo *)info->def.next) {
- unsigned long lname;
- unsigned int kc;
+ for (nNew = 0, info = *info_in; info != NULL;
+ info = (AliasInfo *) info->def.next)
+ {
+ unsigned long lname;
+ unsigned int kc;
- lname= KeyNameToLong(info->real);
- if (!FindNamedKey(xkb,lname,&kc,False,CreateKeyNames(xkb),0)) {
- if (warningLevel>4) {
- WARN2("Attempt to alias %s to non-existent key %s\n",
- XkbKeyNameText(info->alias,XkbMessage),
- XkbKeyNameText(info->real,XkbMessage));
- ACTION("Ignored\n");
- }
- info->alias[0]= '\0';
- continue;
- }
- lname= KeyNameToLong(info->alias);
- if (FindNamedKey(xkb,lname,&kc,False,False,0)) {
- if (warningLevel>4) {
- WARN("Attempt to create alias with the name of a real key\n");
- ACTION2("Alias \"%s = %s\" ignored\n",
- XkbKeyNameText(info->alias,XkbMessage),
- XkbKeyNameText(info->real,XkbMessage));
- }
- info->alias[0]= '\0';
- continue;
- }
- nNew++;
- if ( old ) {
- for (i=0,a=old;i<nOld;i++,a++) {
- if (strncmp(a->alias,info->alias,XkbKeyNameLength)==0) {
- AliasInfo old;
- InitAliasInfo(&old,MergeAugment,0,a->alias,a->real);
- HandleCollision(&old,info);
- memcpy(old.real,a->real,XkbKeyNameLength);
- info->alias[0]= '\0';
- nNew--;
- break;
- }
- }
- }
+ lname = KeyNameToLong(info->real);
+ if (!FindNamedKey(xkb, lname, &kc, False, CreateKeyNames(xkb), 0))
+ {
+ if (warningLevel > 4)
+ {
+ WARN2("Attempt to alias %s to non-existent key %s\n",
+ XkbKeyNameText(info->alias, XkbMessage),
+ XkbKeyNameText(info->real, XkbMessage));
+ ACTION("Ignored\n");
+ }
+ info->alias[0] = '\0';
+ continue;
+ }
+ lname = KeyNameToLong(info->alias);
+ if (FindNamedKey(xkb, lname, &kc, False, False, 0))
+ {
+ if (warningLevel > 4)
+ {
+ WARN("Attempt to create alias with the name of a real key\n");
+ ACTION2("Alias \"%s = %s\" ignored\n",
+ XkbKeyNameText(info->alias, XkbMessage),
+ XkbKeyNameText(info->real, XkbMessage));
+ }
+ info->alias[0] = '\0';
+ continue;
+ }
+ nNew++;
+ if (old)
+ {
+ for (i = 0, a = old; i < nOld; i++, a++)
+ {
+ if (strncmp(a->alias, info->alias, XkbKeyNameLength) == 0)
+ {
+ AliasInfo old;
+ InitAliasInfo(&old, MergeAugment, 0, a->alias, a->real);
+ HandleCollision(&old, info);
+ memcpy(old.real, a->real, XkbKeyNameLength);
+ info->alias[0] = '\0';
+ nNew--;
+ break;
+ }
+ }
+ }
}
- if (nNew==0) {
- ClearCommonInfo(&(*info_in)->def);
- *info_in= NULL;
- return True;
+ if (nNew == 0)
+ {
+ ClearCommonInfo(&(*info_in)->def);
+ *info_in = NULL;
+ return True;
}
- status= Success;
- if (toGeom) {
- if (!xkb->geom) {
- XkbGeometrySizesRec sizes;
- bzero((char *)&sizes,sizeof(XkbGeometrySizesRec));
- sizes.which= XkbGeomKeyAliasesMask;
- sizes.num_key_aliases= nOld+nNew;
- status= XkbAllocGeometry(xkb,&sizes);
- }
- else {
- status= XkbAllocGeomKeyAliases(xkb->geom,nOld+nNew);
- }
- if (xkb->geom)
- old= xkb->geom->key_aliases;
+ status = Success;
+ if (toGeom)
+ {
+ if (!xkb->geom)
+ {
+ XkbGeometrySizesRec sizes;
+ bzero((char *) &sizes, sizeof(XkbGeometrySizesRec));
+ sizes.which = XkbGeomKeyAliasesMask;
+ sizes.num_key_aliases = nOld + nNew;
+ status = XkbAllocGeometry(xkb, &sizes);
+ }
+ else
+ {
+ status = XkbAllocGeomKeyAliases(xkb->geom, nOld + nNew);
+ }
+ if (xkb->geom)
+ old = xkb->geom->key_aliases;
}
- else {
- status= XkbAllocNames(xkb,XkbKeyAliasesMask,0,nOld+nNew);
- if (xkb->names)
- old= xkb->names->key_aliases;
+ else
+ {
+ status = XkbAllocNames(xkb, XkbKeyAliasesMask, 0, nOld + nNew);
+ if (xkb->names)
+ old = xkb->names->key_aliases;
}
- if (status!=Success) {
- WSGO("Allocation failure in ApplyAliases\n");
- return False;
+ if (status != Success)
+ {
+ WSGO("Allocation failure in ApplyAliases\n");
+ return False;
}
- if (toGeom)
- a= &xkb->geom->key_aliases[nOld];
- else a= &xkb->names->key_aliases[nOld];
- for (info= *info_in;info!=NULL;info= (AliasInfo *)info->def.next) {
- if (info->alias[0]!='\0') {
- strncpy(a->alias,info->alias,XkbKeyNameLength);
- strncpy(a->real,info->real,XkbKeyNameLength);
- a++;
- }
+ if (toGeom)
+ a = &xkb->geom->key_aliases[nOld];
+ else
+ a = &xkb->names->key_aliases[nOld];
+ for (info = *info_in; info != NULL; info = (AliasInfo *) info->def.next)
+ {
+ if (info->alias[0] != '\0')
+ {
+ strncpy(a->alias, info->alias, XkbKeyNameLength);
+ strncpy(a->real, info->real, XkbKeyNameLength);
+ a++;
+ }
}
#ifdef DEBUG
- if ((a-old)!=(nOld+nNew)) {
- WSGO2("Expected %d aliases total but created %d\n",nOld+nNew,a-old);
+ if ((a - old) != (nOld + nNew))
+ {
+ WSGO2("Expected %d aliases total but created %d\n", nOld + nNew,
+ a - old);
}
#endif
- if (toGeom)
- xkb->geom->num_key_aliases+= nNew;
+ if (toGeom)
+ xkb->geom->num_key_aliases += nNew;
ClearCommonInfo(&(*info_in)->def);
- *info_in= NULL;
+ *info_in = NULL;
return True;
}