diff options
author | marha <marha@users.sourceforge.net> | 2009-06-28 22:07:26 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2009-06-28 22:07:26 +0000 |
commit | 3562e78743202e43aec8727005182a2558117eca (patch) | |
tree | 8f9113a77d12470c5c851a2a8e4cb02e89df7d43 /xkbcomp/keymap.c | |
download | vcxsrv-3562e78743202e43aec8727005182a2558117eca.tar.gz vcxsrv-3562e78743202e43aec8727005182a2558117eca.tar.bz2 vcxsrv-3562e78743202e43aec8727005182a2558117eca.zip |
Checked in the following released items:
xkeyboard-config-1.4.tar.gz
ttf-bitstream-vera-1.10.tar.gz
font-alias-1.0.1.tar.gz
font-sun-misc-1.0.0.tar.gz
font-sun-misc-1.0.0.tar.gz
font-sony-misc-1.0.0.tar.gz
font-schumacher-misc-1.0.0.tar.gz
font-mutt-misc-1.0.0.tar.gz
font-misc-misc-1.0.0.tar.gz
font-misc-meltho-1.0.0.tar.gz
font-micro-misc-1.0.0.tar.gz
font-jis-misc-1.0.0.tar.gz
font-isas-misc-1.0.0.tar.gz
font-dec-misc-1.0.0.tar.gz
font-daewoo-misc-1.0.0.tar.gz
font-cursor-misc-1.0.0.tar.gz
font-arabic-misc-1.0.0.tar.gz
font-winitzki-cyrillic-1.0.0.tar.gz
font-misc-cyrillic-1.0.0.tar.gz
font-cronyx-cyrillic-1.0.0.tar.gz
font-screen-cyrillic-1.0.1.tar.gz
font-xfree86-type1-1.0.1.tar.gz
font-adobe-utopia-type1-1.0.1.tar.gz
font-ibm-type1-1.0.0.tar.gz
font-bitstream-type1-1.0.0.tar.gz
font-bitstream-speedo-1.0.0.tar.gz
font-bh-ttf-1.0.0.tar.gz
font-bh-type1-1.0.0.tar.gz
font-bitstream-100dpi-1.0.0.tar.gz
font-bh-lucidatypewriter-100dpi-1.0.0.tar.gz
font-bh-100dpi-1.0.0.tar.gz
font-adobe-utopia-100dpi-1.0.1.tar.gz
font-adobe-100dpi-1.0.0.tar.gz
font-util-1.0.1.tar.gz
font-bitstream-75dpi-1.0.0.tar.gz
font-bh-lucidatypewriter-75dpi-1.0.0.tar.gz
font-adobe-utopia-75dpi-1.0.1.tar.gz
font-bh-75dpi-1.0.0.tar.gz
bdftopcf-1.0.1.tar.gz
font-adobe-75dpi-1.0.0.tar.gz
mkfontscale-1.0.6.tar.gz
openssl-0.9.8k.tar.gz
bigreqsproto-1.0.2.tar.gz
xtrans-1.2.2.tar.gz
resourceproto-1.0.2.tar.gz
inputproto-1.4.4.tar.gz
compositeproto-0.4.tar.gz
damageproto-1.1.0.tar.gz
zlib-1.2.3.tar.gz
xkbcomp-1.0.5.tar.gz
freetype-2.3.9.tar.gz
pthreads-w32-2-8-0-release.tar.gz
pixman-0.12.0.tar.gz
kbproto-1.0.3.tar.gz
evieext-1.0.2.tar.gz
fixesproto-4.0.tar.gz
recordproto-1.13.2.tar.gz
randrproto-1.2.2.tar.gz
scrnsaverproto-1.1.0.tar.gz
renderproto-0.9.3.tar.gz
xcmiscproto-1.1.2.tar.gz
fontsproto-2.0.2.tar.gz
xextproto-7.0.3.tar.gz
xproto-7.0.14.tar.gz
libXdmcp-1.0.2.tar.gz
libxkbfile-1.0.5.tar.gz
libfontenc-1.0.4.tar.gz
libXfont-1.3.4.tar.gz
libX11-1.1.5.tar.gz
libXau-1.0.4.tar.gz
libxcb-1.1.tar.gz
xorg-server-1.5.3.tar.gz
Diffstat (limited to 'xkbcomp/keymap.c')
-rw-r--r-- | xkbcomp/keymap.c | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/xkbcomp/keymap.c b/xkbcomp/keymap.c new file mode 100644 index 000000000..86e9c9e8f --- /dev/null +++ b/xkbcomp/keymap.c @@ -0,0 +1,168 @@ +/* $Xorg: keymap.c,v 1.3 2000/08/17 19:54:32 cpqbld Exp $ */ +/************************************************************ + Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc. + + Permission to use, copy, modify, and distribute this + software and its documentation for any purpose and without + fee is hereby granted, provided that the above copyright + notice appear in all copies and that both that copyright + notice and this permission notice appear in supporting + documentation, and that the name of Silicon Graphics not be + used in advertising or publicity pertaining to distribution + of the software without specific prior written permission. + Silicon Graphics makes no representation about the suitability + of this software for any purpose. It is provided "as is" + without any express or implied warranty. + + SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON + GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL + DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH + THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ********************************************************/ +/* $XFree86$ */ + +#include "xkbcomp.h" +#include "tokens.h" +#include "expr.h" +#include "vmod.h" +#include "action.h" +#include "misc.h" +#include "indicators.h" + +#define KEYCODES 0 +#define GEOMETRY 1 +#define TYPES 2 +#define COMPAT 3 +#define SYMBOLS 4 +#define MAX_SECTIONS 5 + +XkbFile * sections[MAX_SECTIONS]; + +Bool +CompileKeymap(XkbFile *file,XkbFileInfo *result,unsigned merge) +{ +unsigned have; +Bool ok; +unsigned required,legal; +unsigned mainType; +char * mainName; +LEDInfo * unbound= NULL; + + bzero(sections,MAX_SECTIONS*sizeof(XkbFile *)); + mainType= file->type; + mainName= file->name; + switch (mainType) { + case XkmSemanticsFile: + required= XkmSemanticsRequired; + legal= XkmSemanticsLegal; + break; + case XkmLayoutFile: + required= XkmLayoutRequired; + legal= XkmKeymapLegal; + break; + case XkmKeymapFile: + required= XkmKeymapRequired; + legal= XkmKeymapLegal; + break; + default: + ERROR1("Cannot compile %s alone into an XKM file\n", + XkbConfigText(mainType,XkbMessage)); + return False; + } + have= 0; + ok= 1; + file= (XkbFile *)file->defs; + while ((file)&&(ok)) { + file->topName= mainName; + if ((have&(1<<file->type))!=0) { + ERROR2("More than one %s section in a %s file\n", + XkbConfigText(file->type,XkbMessage), + XkbConfigText(mainType,XkbMessage)); + ACTION("All sections after the first ignored\n"); + ok= False; + } + else if ((1<<file->type)&(~legal)) { + ERROR2("Cannot define %s in a %s file\n", + XkbConfigText(file->type,XkbMessage), + XkbConfigText(mainType,XkbMessage)); + ok= False; + } + else switch (file->type) { + case XkmSemanticsFile: + case XkmLayoutFile: + case XkmKeymapFile: + WSGO2("Illegal %s configuration in a %s file\n", + XkbConfigText(file->type,XkbMessage), + XkbConfigText(mainType,XkbMessage)); + ACTION("Ignored\n"); + ok= False; + break; + case XkmKeyNamesIndex: + sections[KEYCODES]= file; + break; + case XkmTypesIndex: + sections[TYPES]= file; + break; + case XkmSymbolsIndex: + sections[SYMBOLS]= file; + break; + case XkmCompatMapIndex: + sections[COMPAT]= file; + break; + case XkmGeometryIndex: + case XkmGeometryFile: + sections[GEOMETRY]= file; + break; + case XkmVirtualModsIndex: + case XkmIndicatorsIndex: + WSGO1("Found an isolated %s section\n", + XkbConfigText(file->type,XkbMessage)); + break; + default: + WSGO1("Unknown file type %d\n",file->type); + break; + } + if (ok) + have|= (1<<file->type); + file= (XkbFile*)file->common.next; + } + if (ok) { + if (ok && (sections[KEYCODES]!=NULL)) + ok= CompileKeycodes(sections[KEYCODES],result,MergeOverride); + if (ok && (sections[GEOMETRY]!=NULL)) + ok= CompileGeometry(sections[GEOMETRY],result,MergeOverride); + if (ok && (sections[TYPES]!=NULL)) + ok= CompileKeyTypes(sections[TYPES],result,MergeOverride); + if (ok && (sections[COMPAT]!=NULL)) + ok=CompileCompatMap(sections[COMPAT],result,MergeOverride,&unbound); + if (ok && (sections[SYMBOLS]!=NULL)) + ok= CompileSymbols(sections[SYMBOLS],result,MergeOverride); + } + if (!ok) + return False; + result->defined= have; + if (required&(~have)) { + register int i,bit; + unsigned missing; + missing= required&(~have); + for (i=0,bit=1;missing!=0;i++,bit<<=1) { + if (missing&bit) { + ERROR2("Missing %s section in a %s file\n", + XkbConfigText(i,XkbMessage), + XkbConfigText(mainType,XkbMessage)); + missing&=~bit; + } + } + ACTION1("Description of %s not compiled\n", + XkbConfigText(mainType,XkbMessage)); + ok= False; + } + ok= BindIndicators(result,True,unbound,NULL); + return ok; +} + |