summaryrefslogtreecommitdiff
path: root/app/xkbcomp
diff options
context:
space:
mode:
authorAlexandr Shadchin <shadchin@cvs.openbsd.org>2011-01-11 20:56:41 +0000
committerAlexandr Shadchin <shadchin@cvs.openbsd.org>2011-01-11 20:56:41 +0000
commit9ac5a1302296cc63925671b566af8c4618cb581e (patch)
treea57d391645c4a3c5b6f756bae61bd7c2fe25009f /app/xkbcomp
parente7e24b28c0e0b96461d93395184a8a34f10631ca (diff)
Update to xkbcomp 1.2.0.
ok matthieu@
Diffstat (limited to 'app/xkbcomp')
-rw-r--r--app/xkbcomp/AUTHORS0
-rw-r--r--app/xkbcomp/ChangeLog474
-rw-r--r--app/xkbcomp/INSTALL143
-rw-r--r--app/xkbcomp/Makefile.am38
-rw-r--r--app/xkbcomp/Makefile.in70
-rw-r--r--app/xkbcomp/NEWS0
-rw-r--r--app/xkbcomp/README1
-rw-r--r--app/xkbcomp/README.config1
-rw-r--r--app/xkbcomp/README.enhancing1
-rw-r--r--app/xkbcomp/aclocal.m4947
-rw-r--r--app/xkbcomp/action.c2196
-rw-r--r--app/xkbcomp/action.h47
-rw-r--r--app/xkbcomp/alias.c386
-rw-r--r--app/xkbcomp/alias.h51
-rw-r--r--app/xkbcomp/compat.c1318
-rw-r--r--app/xkbcomp/compat.h1
-rw-r--r--app/xkbcomp/config.h.in36
-rw-r--r--app/xkbcomp/configure6511
-rw-r--r--app/xkbcomp/configure.ac32
-rw-r--r--app/xkbcomp/expr.c1753
-rw-r--r--app/xkbcomp/expr.h279
-rw-r--r--app/xkbcomp/geometry.c5907
-rw-r--r--app/xkbcomp/indicators.c848
-rw-r--r--app/xkbcomp/indicators.h85
-rw-r--r--app/xkbcomp/keycodes.c1321
-rw-r--r--app/xkbcomp/keycodes.h16
-rw-r--r--app/xkbcomp/keymap.c247
-rw-r--r--app/xkbcomp/keytypes.c1906
-rw-r--r--app/xkbcomp/listing.c547
-rw-r--r--app/xkbcomp/misc.c795
-rw-r--r--app/xkbcomp/misc.h171
-rw-r--r--app/xkbcomp/parseutils.c1092
-rw-r--r--app/xkbcomp/parseutils.h330
-rw-r--r--app/xkbcomp/symbols.c3547
-rw-r--r--app/xkbcomp/tokens.h6
-rw-r--r--app/xkbcomp/utils.c335
-rw-r--r--app/xkbcomp/utils.h221
-rw-r--r--app/xkbcomp/vmod.c322
-rw-r--r--app/xkbcomp/vmod.h85
-rw-r--r--app/xkbcomp/xkbcomp.c1812
-rw-r--r--app/xkbcomp/xkbcomp.h430
-rw-r--r--app/xkbcomp/xkbcomp.man9
-rw-r--r--app/xkbcomp/xkbparse.y55
-rw-r--r--app/xkbcomp/xkbpath.c486
-rw-r--r--app/xkbcomp/xkbpath.h66
-rw-r--r--app/xkbcomp/xkbscan.c1003
46 files changed, 20775 insertions, 15152 deletions
diff --git a/app/xkbcomp/AUTHORS b/app/xkbcomp/AUTHORS
deleted file mode 100644
index e69de29bb..000000000
--- a/app/xkbcomp/AUTHORS
+++ /dev/null
diff --git a/app/xkbcomp/ChangeLog b/app/xkbcomp/ChangeLog
index 6bc06a804..f1b325f85 100644
--- a/app/xkbcomp/ChangeLog
+++ b/app/xkbcomp/ChangeLog
@@ -1,3 +1,477 @@
+commit 851a5f6e0c1b2a98d4714d95e40198ab5dc61607
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Oct 30 09:59:52 2010 -0700
+
+ xkbcomp 1.2.0
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 87576c9ebf0f28d66833bb28a8199df1aa01f693
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Thu Sep 23 20:29:57 2010 -0700
+
+ config: Remove unnecessary calls from configure.ac
+
+ AC_PROG_CC & AC_PROG_INSTALL are provided by XORG_DEFAULT_OPTIONS now
+ PKG_CONFIG_MODULES handles AC_SUBST of the CFLAGS & LIBS variables
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit d083293a4e227e9dd27f74cde391fde4c5824b0c
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Thu Sep 23 20:29:14 2010 -0700
+
+ config: upgrade to util-macros 1.8 for additional man page support
+
+ Use MAN_SUBST now supplied in XORG_MANPAGE_SECTIONS
+ The value of MAN_SUBST is the same for all X.Org packages.
+
+ Use AC_PROG_SED now supplied by XORG_DEFAULT_OPTIONS
+ The existing statement can now be removed from the configuration file.
+
+ Use automake provided $(AM_V_GEN) and XORG_DEFAULT_OPTIONS provided $(SED)
+ Enables silent rule and use platform appropriate version of sed.
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 8f13f1af68fc55b7567a4eb4462a0c911722a3c4
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Tue Jul 20 18:45:18 2010 -0400
+
+ config: update AC_PREREQ statement to 2.60
+
+ Unrelated to the previous patches, the new value simply reflects
+ the reality that the minimum level for autoconf to configure
+ all x.org modules is 2.60 dated June 2006.
+
+ ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.60.tar.gz
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 988eb0e121c0f2c992031002acb7274c2026764b
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Mon Jul 12 10:53:34 2010 +0100
+
+ config: allow to build tarball when yacc is missing
+
+ Autoconf does not handle this scenario as well as Automake does.
+ If xkbparse.c is already there, do not abort the configuration
+ if yacc is missing as it is not needed.
+
+ If both xkbparse.c and yacc are missing, abort configuration.
+ Yacc is a required tool to build the package.
+
+ Reported-by: Julien Cristau <jcristau@debian.org>
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+ Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 446d226f85433aeb45834b65f966397ad6fbb17f
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Mon Jul 12 10:37:49 2010 +0100
+
+ limits.h is mandated by C89, no need to check for it
+
+ Alan Coopersmith pointed out that C89 mandates limits.h, so for once in
+ X's life, checking for a system header is just being unnecessarily
+ paranoid.
+
+ Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 61b3d4b024d8146cb0e7659aa958045ceb72c482
+Author: Julien Cristau <jcristau@debian.org>
+Date: Mon Jul 12 10:28:32 2010 +0100
+
+ Fix signedness issue with getc() return value
+
+ getc() and ungetc() return and take, respectively, an int rather than a
+ char to allow for error values as well. Oops.
+
+ Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+
+commit a281386fa887e6bf4110840779aed46dd0ac89b6
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Fri Jul 9 19:34:29 2010 +0100
+
+ Fix parsing of 0x1a2b3c4d-style symbols
+
+ Raw keysyms were not getting parsed correctly, due to forgetting to add
+ the code to libX11, forgetting to add the backwards-compat code for old
+ libX11s, and then stuffing the lexing up anyway. Yeesh.
+
+ Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 0b04ecbb7a6afb223c91d3b15baab0bc48542281
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Tue Jun 15 19:26:19 2010 +0100
+
+ Fix gcc warnings
+
+ It was right too: printf was being misused in some spots.
+
+ Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 41b0857c8c1179b87a26888588cbfff28f8bb0d6
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Tue Jun 8 15:11:19 2010 +0100
+
+ Don't malloc() and free() most scanned symbols
+
+ Use a constant buffer. Sigh.
+
+ Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 7f7a57c75beb5e1dfb53351e490ef00a324b2727
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Tue Jun 8 12:14:00 2010 +0100
+
+ Fix compilation with DEBUG
+
+ Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 9887842e33174a6e98675b912e419c711dd20c0f
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Mon Jun 7 22:45:13 2010 +0100
+
+ Use fread() instead of getc()
+
+ So, it turns out that if you're parsing a fairly large amount of data,
+ using getc() to get all the input rather than, say, read(), is some kind
+ of remarkably daft and unperformant idea.
+
+ Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 02de53d767b20bab1517b4e8a3e7eb3b9e7f15be
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Mon Jun 7 22:43:01 2010 +0100
+
+ Lazy keysym parsing (avoid XStringToKeysym)
+
+ Instead of calling XStringToKeysym on every keysym we parse, store it as
+ a string until we need to store it in an actual keymap.
+
+ Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 07cc4d60dea2b4c947fed45b082edae4a53b186a
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Wed Jun 2 15:23:58 2010 -0400
+
+ config: add check for yacc to insure it is installed #27973
+
+ Unlike other macros AC_PROG_YACC sets the YACC variable to "yacc"
+ as a last resort, even if no programs have been found. Improve error
+ checking by issuing an error message if yacc is not found. The module
+ cannot build anyway.
+
+ Reported-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 7888738047e9f1545aa1905b4a2a0654686f49a8
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Thu Feb 11 10:08:07 2010 -0500
+
+ config: move CWARNFLAGS from configure.ac to Makefile.am
+
+ Compiler warning flags should be explicitly set in the makefile
+ rather than being merged with other packages compiler flags.
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit ba906359da32644b40b3a8a71e77d3cabca56efe
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Thu Nov 26 09:19:54 2009 -0500
+
+ Makefile.am: add ChangeLog and INSTALL on MAINTAINERCLEANFILES
+
+ Now that the INSTALL file is generated.
+ Allows running make maintainer-clean.
+
+commit 667f0a0e5d3143533cbbe5979ef82c13cfa62c3a
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Wed Oct 28 14:09:08 2009 -0400
+
+ INSTALL, NEWS, README or AUTHORS files are missing/incorrect #24206
+
+ Add missing INSTALL file. Use standard GNU file on building tarball
+ README may have been updated
+ Remove AUTHORS file as it is empty and no content available yet.
+ Remove NEWS file as it is empty and no content available yet.
+
+commit 4b7c8a8ef337614c831b2555afeb6d89dbc14fb1
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Tue Oct 27 15:07:25 2009 -0400
+
+ Deploy the new XORG_DEFAULT_OPTIONS #24242
+
+ This macro aggregate a number of existing macros that sets commmon
+ X.Org components configuration options. It shields the configuration file from
+ future changes.
+
+commit 5fa9ef7e5e87f875dd92cc33403cebf6c60c557f
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Mon Oct 26 22:08:39 2009 -0400
+
+ Makefile.am: ChangeLog not required: EXTRA_DIST or *CLEANFILES #24432
+
+ ChangeLog filename is known to Automake and requires no further
+ coding in the makefile.
+
+commit b3a52787e0dad42ea7e8da26926b9533b1ecab84
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Thu Oct 22 12:34:15 2009 -0400
+
+ .gitignore: use common defaults with custom section # 24239
+
+ Using common defaults will reduce errors and maintenance.
+ Only the very small or inexistent custom section need periodic maintenance
+ when the structure of the component changes. Do not edit defaults.
+
+commit fa7e3ff7b49f76294aa14aa8bf1b8adbceb5d340
+Author: Jeremy Huddleston <jeremyhu@freedesktop.org>
+Date: Wed Oct 21 12:47:21 2009 -0700
+
+ This is not a GNU project, so declare it foreign.
+
+ On Wed, 2009-10-21 at 13:36 +1000, Peter Hutterer wrote:
+ > On Tue, Oct 20, 2009 at 08:23:55PM -0700, Jeremy Huddleston wrote:
+ > > I noticed an INSTALL file in xlsclients and libXvMC today, and it
+ > > was quite annoying to work around since 'autoreconf -fvi' replaces
+ > > it and git wants to commit it. Should these files even be in git?
+ > > Can I nuke them for the betterment of humanity and since they get
+ > > created by autoreconf anyways?
+ >
+ > See https://bugs.freedesktop.org/show_bug.cgi?id=24206
+
+ As an interim measure, replace AM_INIT_AUTOMAKE([dist-bzip2]) with
+ AM_INIT_AUTOMAKE([foreign dist-bzip2]). This will prevent the generation
+ of the INSTALL file. It is also part of the 24206 solution.
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
+
+commit a5160032d7e46473b8702b87a546071fc0c0978c
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Sat Oct 3 21:12:47 2009 +1000
+
+ xkbcomp 1.1.1
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit a36ca5ba61e2b97398a79713922644fee1a263d1
+Author: Rami Ylimaki <ext-rami.ylimaki@nokia.com>
+Date: Wed Aug 5 17:16:16 2009 +0300
+
+ xkbcomp: Remove output file if closing fails.
+
+ Without the fix xkbcomp may leave a truncated file in the filesystem
+ if there is not enough disk space. Using the truncated file leads to
+ problems.
+
+ Signed-off-by: Rami Ylimaki <ext-rami.ylimaki@nokia.com>
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 2cc1dc9a327a5100043d3d54e899b98b81cdf5f5
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Thu Jul 9 08:34:21 2009 +1000
+
+ Bump to 1.1.0.
+
+commit eeaa4aec798ef045d0b3b9de3c25932b85b9ac3d
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Mon May 11 09:39:03 2009 -0700
+
+ Use temporary buffer for generating Uxxx names to avoid overflow
+
+ Instead of sprintf()'ing a 4 character string to a char [4] buffer,
+ and leaving the trailing '\0' to overwrite into the next entry,
+ snprintf() to a 5 character temp buffer and memcpy the 4 characters
+ to the right place.
+
+ Fixes parfait errors:
+ Error: Buffer overflow at xkbcomp-1.0.4/misc.c:393
+ in function 'ComputeKbdDefaults' [Standard C Library pattern matching]
+ In sprintf related dereference of xkb->names->keys[i].name
+ with index not less than '4'
+ Destination array size is 4 bytes, data to be written is 4 bytes
+ Error: Buffer overflow at xkbcomp-1.0.4/misc.c:402
+ in function 'ComputeKbdDefaults' [Standard C Library pattern matching]
+ In sprintf related dereference of xkb->names->keys[i].name
+ with index not less than '4'
+ Destination array size is 4 bytes, data to be written is 4 bytes
+
+ [This bug was found by the Parfait bug checking tool.
+ For more information see http://research.sun.com/projects/parfait ]
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit 2fd42dae8840089727f95211abdb86316e566afd
+Author: Dan Nicholson <dbn.lists@gmail.com>
+Date: Sat Mar 7 16:36:51 2009 -0800
+
+ Allow the default XKB config root to be set from configure
+
+ The default was hardcoded in the Makefile as $(datadir)/share/X11/xkb.
+ This could cause a problem if you are installing xkbcomp to an alternate
+ location but want to continue using the system's XKB data.
+
+ Signed-off-by: Dan Nicholson <dbn.lists@gmail.com>
+
+commit 3b816fe819bd849acdbabcfba769041bd3eab753
+Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
+Date: Thu Jan 22 02:45:20 2009 -0200
+
+ Correct a remaining of a wrong change to make some DEBUG_VAR's static.
+
+commit f099da35386cf63d4935ba2613409ff28b3d7ea5
+Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
+Date: Wed Jan 21 20:43:28 2009 -0200
+
+ Correct make distcheck and most gcc and sparse warnings.
+
+ Remaining warnings are due to macros that check address or vectors
+ on the stack and auto generated yacc code.
+
+ Compiled with default flags and also as:
+ % make CFLAGS=-DENTRY_TRACKING_ON -DDEBUG_ON -DASSERTIONS_ON
+ to ensure the "simplification" of code like:
+ foo.c:
+ <hash>define DEBUG_VAR foo_VAR
+ <hash>include "foo.h"
+ ...
+ foo.h:
+ <hash>ifdef DEBUG_VAR_NOT_LOCAL
+ extern
+ <hash>endif
+ int DEBUG_VAR;
+ ...
+ did not change the author's "intended" logic.
+
+commit 82cebb165b22d5409c9d4d31554a8da0c867e0d3
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Wed Sep 10 17:48:29 2008 +0930
+
+ Check for NULL strings before calling strdup.
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@redhat.com>
+
+commit a82e1dcc8ad095581402d05e5d1ae1bbf3646954
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Fri Sep 5 15:07:13 2008 -0700
+
+ sprintf -> snprintf conversions
+
+commit d2d06305e1834548edd8a647564efa222a511b53
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Fri Sep 5 14:44:51 2008 -0700
+
+ Remove #if 0'd typedef that appears nowhere else.
+
+commit acd277d7fd48ccfd8ef2ca052b4e144ee95a5d94
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Fri Sep 5 14:32:15 2008 -0700
+
+ Remove X_NOT_POSIX #ifdefs
+
+ POSIX.1-1990 is well below the current minimum bar
+
+commit 37b62a26716d3abf2ae07dd88cf54bc04d980bd8
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Fri Sep 5 14:22:33 2008 -0700
+
+ Check for strdup & strcasecmp before assuming we need to provide our own
+
+commit 36fecff588199a3a6c007f09ff709f3148d40f77
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Tue Aug 19 16:33:03 2008 +0930
+
+ Don't overwrite previously assigned type indices with useless ones.
+
+ The default type for a key with no levels is ONE_LEVEL.
+ Let's not overwrite the kt_index with this default type if we have previously
+ assigned a real type.
+
+ Reproduceable by running setxkbmap -layout "ru(phonetic),us", the first group
+ is assigned ONE_LEVEL and shift stops working.
+
+ Red Hat Bug #436626 <https://bugzilla.redhat.com/show_bug.cgi?id=436626>
+
+commit d0dfd26e81aef53e9adf5fd6372d69e2ac7a8f9c
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Tue Aug 19 14:36:13 2008 +0930
+
+ Remove unused merge parameter from HandleKeyNameVar.
+
+commit 391ea45b2cadc7faeb6acb5d9ec7b405d67d46fd
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Tue Aug 19 14:35:39 2008 +0930
+
+ Don't pass useless handlers around in HandleIncludeKeycodes.
+
+ What use is a handler if we only ever use one function anyway?
+
+commit f05f20fd203afdadbcd571023ed31638ccda1f88
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Thu Aug 21 17:28:22 2008 +0930
+
+ More comments.
+
+commit 1aad2a5d8ede9fe5212a4e6087fbe34aa170ac54
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Mon Aug 18 16:28:44 2008 +0930
+
+ Remove useless longestPath variable.
+
+commit 7aef93914e1d6446f64aa42eafa18375c2cb4bed
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Mon Aug 18 14:05:33 2008 +0930
+
+ Silence valgrind warnings.
+
+ "Conditional jump or move depends on uninitialised value(s)"
+
+commit eb18e9176841b3ea64c497f1919686e134713eb6
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Mon Aug 11 18:01:48 2008 +0930
+
+ Add some explanatory comments
+
+commit 9b877d83947708259252275e14f6995dcf7c29ce
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Mon Aug 11 16:20:22 2008 +0930
+
+ If we're not using XkbDesc, don't require it as a parameter.
+
+commit ca32570cf16494fb8e0577de8b05ba18cb927ce1
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Mon Aug 11 15:47:09 2008 +0930
+
+ Indent fixes.
+
+ indent -cbi 0 -nprs -nut -npcs -i4 -bli 0 *.c *.h
+
+commit 12e8f5e5b3f33dbd1290c76dd0d6a4cf832993d7
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Mon Aug 11 15:40:03 2008 +0930
+
+ Add a few explanatory comments.
+
+commit de48206e7fe2206542313a2d1d1ea3c40b06114b
+Author: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Mon Aug 11 15:14:31 2008 +0930
+
+ Remove RCS tags.
+
+commit 8eb2e1fcd08a05f296a31dbadde1ec3cc84d8e28
+Author: Matthieu Herrb <matthieu.herrb@laas.fr>
+Date: Mon May 12 23:25:47 2008 +0200
+
+ Minimal man page addition for new -i option.
+
+commit 12df85eb5b08d5fb815b0965714f120b05c6c670
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Fri May 9 21:09:44 2008 +0300
+
+ Bump to 1.0.5
+
commit 1aecdffaa0db7bbf85bc0aae9043e9437b25c30d
Author: Daniel Stone <daniel@fooishbar.org>
Date: Thu Apr 17 00:52:29 2008 +0300
diff --git a/app/xkbcomp/INSTALL b/app/xkbcomp/INSTALL
index 23e5f25d0..8b82ade08 100644
--- a/app/xkbcomp/INSTALL
+++ b/app/xkbcomp/INSTALL
@@ -1,16 +1,19 @@
Installation Instructions
*************************
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
-Software Foundation, Inc.
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008 Free Software Foundation, Inc.
-This file is free documentation; the Free Software Foundation gives
+ This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
-These are generic installation instructions.
+ Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
@@ -23,9 +26,9 @@ debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring. (Caching is
+the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
-cache files.)
+cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
@@ -35,20 +38,17 @@ some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'. You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
+ `./configure' to configure the package for your system.
- Running `configure' takes awhile. While running, it prints some
- messages telling which features it is checking for.
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
2. Type `make' to compile the package.
@@ -67,42 +67,57 @@ The simplest way to compile this package is:
all sorts of other programs in order to regenerate files that came
with the distribution.
+ 6. Often, you can also type `make uninstall' to remove the installed
+ files again.
+
Compilers and Options
=====================
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about. Run `./configure --help' for
-details on some of the pertinent environment variables.
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
- ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
-You can compile the package for more than one kind of computer at the
+ You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'. `cd' to the
+own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
- If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory. After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
Installation Names
==================
-By default, `make install' installs the package's commands under
+ By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
@@ -125,7 +140,7 @@ option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
-Some packages pay attention to `--enable-FEATURE' options to
+ Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
@@ -137,14 +152,36 @@ find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
Specifying the System Type
==========================
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
@@ -170,9 +207,9 @@ eventually be run) with `--host=TYPE'.
Sharing Defaults
================
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
@@ -181,7 +218,7 @@ A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
-Variables not defined in a site shell script can be set in the
+ Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
@@ -190,21 +227,29 @@ them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script). Here is a another example:
+overridden in the site shell script).
- /bin/bash ./configure CONFIG_SHELL=/bin/bash
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug. Until the bug is fixed you can use this workaround:
-Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
-configuration-related scripts to be executed by `/bin/bash'.
+ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
-`configure' recognizes the following options to control how it operates.
+ `configure' recognizes the following options to control how it
+operates.
`--help'
`-h'
- Print a summary of the options to `configure', and exit.
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
`--version'
`-V'
@@ -231,6 +276,16 @@ configuration-related scripts to be executed by `/bin/bash'.
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
+`--prefix=DIR'
+ Use DIR as the installation prefix. *Note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.
diff --git a/app/xkbcomp/Makefile.am b/app/xkbcomp/Makefile.am
index ffcbcbde3..cf33e6921 100644
--- a/app/xkbcomp/Makefile.am
+++ b/app/xkbcomp/Makefile.am
@@ -21,7 +21,7 @@
bin_PROGRAMS = xkbcomp
-AM_CFLAGS = $(XKBCOMP_CFLAGS) -DDFLT_XKB_CONFIG_ROOT='"$(datadir)/X11/xkb"'
+AM_CFLAGS = $(XKBCOMP_CFLAGS) -DDFLT_XKB_CONFIG_ROOT='"$(XKBCONFIGROOT)"' $(CWARNFLAGS)
xkbcomp_LDADD = $(XKBCOMP_LIBS)
xkbcomp_SOURCES = \
@@ -62,7 +62,8 @@ appman_PRE = \
xkbcomp.man
BUILT_SOURCES = xkbparse.c
-MAINTAINERCLEANFILES = $(BUILT_SOURCES)
+MAINTAINERCLEANFILES = ChangeLog INSTALL
+MAINTAINERCLEANFILES += $(BUILT_SOURCES)
EXTRA_DIST = \
README.config \
@@ -75,36 +76,19 @@ appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@)
EXTRA_DIST += $(appman_PRE)
CLEANFILES = $(appman_DATA)
-SED = sed
-
-# Strings to replace in man pages
-XORGRELSTRING = @PACKAGE_STRING@
- XORGMANNAME = X Version 11
-
-MAN_SUBSTS = \
- -e 's|__vendorversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \
- -e 's|__xorgversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \
- -e 's|__xservername__|Xorg|g' \
- -e 's|__xconfigfile__|xorg.conf|g' \
- -e 's|__projectroot__|$(prefix)|g' \
- -e 's|__apploaddir__|$(appdefaultdir)|' \
- -e 's|__appmansuffix__|$(APP_MAN_SUFFIX)|g' \
- -e 's|__libmansuffix__|$(LIB_MAN_SUFFIX)|g' \
- -e 's|__adminmansuffix__|$(ADMIN_MAN_SUFFIX)|g' \
- -e 's|__miscmansuffix__|$(MISC_MAN_SUFFIX)|g' \
- -e 's|__filemansuffix__|$(FILE_MAN_SUFFIX)|g'
-
SUFFIXES = .$(APP_MAN_SUFFIX) .man
+# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure
.man.$(APP_MAN_SUFFIX):
- sed $(MAN_SUBSTS) < $< > $@
+ $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
+
-EXTRA_DIST += ChangeLog
-MAINTAINERCLEANFILES += ChangeLog
+.PHONY: ChangeLog INSTALL
-.PHONY: ChangeLog
+INSTALL:
+ $(INSTALL_CMD)
ChangeLog:
- (GIT_DIR=$(top_srcdir)/.git git-log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2)
+ $(CHANGELOG_CMD)
-dist-hook: ChangeLog
+dist-hook: ChangeLog INSTALL
diff --git a/app/xkbcomp/Makefile.in b/app/xkbcomp/Makefile.in
index 6f6557e70..795f17888 100644
--- a/app/xkbcomp/Makefile.in
+++ b/app/xkbcomp/Makefile.in
@@ -61,8 +61,8 @@ host_triplet = @host@
bin_PROGRAMS = xkbcomp$(EXEEXT)
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
- $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
- config.guess config.sub depcomp install-sh missing xkbparse.c
+ $(top_srcdir)/configure COPYING ChangeLog INSTALL config.guess \
+ config.sub depcomp install-sh missing xkbparse.c
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
@@ -123,6 +123,7 @@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APP_MAN_DIR = @APP_MAN_DIR@
APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
AUTOCONF = @AUTOCONF@
@@ -132,7 +133,10 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
@@ -141,9 +145,12 @@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGREP = @EGREP@
EXEEXT = @EXEEXT@
FILE_MAN_DIR = @FILE_MAN_DIR@
FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+GREP = @GREP@
+INSTALL_CMD = @INSTALL_CMD@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@@ -158,6 +165,7 @@ MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
+MAN_SUBSTS = @MAN_SUBSTS@
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
OBJEXT = @OBJEXT@
@@ -169,16 +177,19 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
XKBCOMP_CFLAGS = @XKBCOMP_CFLAGS@
XKBCOMP_LIBS = @XKBCOMP_LIBS@
+XKBCONFIGROOT = @XKBCONFIGROOT@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
YACC = @YACC@
+YACC_INST = @YACC_INST@
+YFLAGS = @YFLAGS@
ac_ct_CC = @ac_ct_CC@
-ac_ct_STRIP = @ac_ct_STRIP@
-ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
@@ -193,28 +204,35 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
-AM_CFLAGS = $(XKBCOMP_CFLAGS) -DDFLT_XKB_CONFIG_ROOT='"$(datadir)/X11/xkb"'
+AM_CFLAGS = $(XKBCOMP_CFLAGS) -DDFLT_XKB_CONFIG_ROOT='"$(XKBCONFIGROOT)"' $(CWARNFLAGS)
xkbcomp_LDADD = $(XKBCOMP_LIBS)
xkbcomp_SOURCES = \
action.c \
@@ -254,29 +272,11 @@ appman_PRE = \
xkbcomp.man
BUILT_SOURCES = xkbparse.c
-MAINTAINERCLEANFILES = $(BUILT_SOURCES) ChangeLog
-EXTRA_DIST = README.config README.enhancing $(appman_PRE) ChangeLog
+MAINTAINERCLEANFILES = ChangeLog INSTALL $(BUILT_SOURCES)
+EXTRA_DIST = README.config README.enhancing $(appman_PRE)
appmandir = $(APP_MAN_DIR)
appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@)
CLEANFILES = $(appman_DATA)
-SED = sed
-
-# Strings to replace in man pages
-XORGRELSTRING = @PACKAGE_STRING@
-XORGMANNAME = X Version 11
-MAN_SUBSTS = \
- -e 's|__vendorversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \
- -e 's|__xorgversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \
- -e 's|__xservername__|Xorg|g' \
- -e 's|__xconfigfile__|xorg.conf|g' \
- -e 's|__projectroot__|$(prefix)|g' \
- -e 's|__apploaddir__|$(appdefaultdir)|' \
- -e 's|__appmansuffix__|$(APP_MAN_SUFFIX)|g' \
- -e 's|__libmansuffix__|$(LIB_MAN_SUFFIX)|g' \
- -e 's|__adminmansuffix__|$(ADMIN_MAN_SUFFIX)|g' \
- -e 's|__miscmansuffix__|$(MISC_MAN_SUFFIX)|g' \
- -e 's|__filemansuffix__|$(FILE_MAN_SUFFIX)|g'
-
SUFFIXES = .$(APP_MAN_SUFFIX) .man
all: $(BUILT_SOURCES) config.h
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -289,15 +289,15 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
- echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
- cd $(srcdir) && $(AUTOMAKE) --gnu \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
+ cd $(srcdir) && $(AUTOMAKE) --foreign \
&& exit 0; \
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --gnu Makefile
+ $(AUTOMAKE) --foreign Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -722,15 +722,19 @@ uninstall-am: uninstall-appmanDATA uninstall-binPROGRAMS \
uninstall-info-am
+# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure
.man.$(APP_MAN_SUFFIX):
- sed $(MAN_SUBSTS) < $< > $@
+ $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
+
+.PHONY: ChangeLog INSTALL
-.PHONY: ChangeLog
+INSTALL:
+ $(INSTALL_CMD)
ChangeLog:
- (GIT_DIR=$(top_srcdir)/.git git-log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2)
+ $(CHANGELOG_CMD)
-dist-hook: ChangeLog
+dist-hook: ChangeLog INSTALL
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/app/xkbcomp/NEWS b/app/xkbcomp/NEWS
deleted file mode 100644
index e69de29bb..000000000
--- a/app/xkbcomp/NEWS
+++ /dev/null
diff --git a/app/xkbcomp/README b/app/xkbcomp/README
index 8dd7a58c3..89dc3e638 100644
--- a/app/xkbcomp/README
+++ b/app/xkbcomp/README
@@ -22,4 +22,3 @@ For information how to further enhance XKB configuration see 'README.enhancing'
file.
-$XFree86$
diff --git a/app/xkbcomp/README.config b/app/xkbcomp/README.config
index 4d3f2d5ba..2cce52157 100644
--- a/app/xkbcomp/README.config
+++ b/app/xkbcomp/README.config
@@ -193,4 +193,3 @@ ble and allow simpler and more intuitive syntax. It is preserved merely for
compatibility reasons. Avoid using it if it is possible.
-$XdotOrg$
diff --git a/app/xkbcomp/README.enhancing b/app/xkbcomp/README.enhancing
index a8456e891..746902c52 100644
--- a/app/xkbcomp/README.enhancing
+++ b/app/xkbcomp/README.enhancing
@@ -506,4 +506,3 @@ rules file described above the .lst file could look like:
And that should be it. Enjoy creating your own xkb mapping.
-$XdotOrg$
diff --git a/app/xkbcomp/aclocal.m4 b/app/xkbcomp/aclocal.m4
index 48f9f8de2..3f71a4321 100644
--- a/app/xkbcomp/aclocal.m4
+++ b/app/xkbcomp/aclocal.m4
@@ -995,33 +995,28 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
+dnl xorg-macros.m4. Generated from xorg-macros.m4.in xorgversion.m4 by configure.
dnl
-dnl Copyright 2005-2006 Sun Microsystems, Inc. All rights reserved.
+dnl Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
dnl
dnl Permission is hereby granted, free of charge, to any person obtaining a
-dnl copy of this software and associated documentation files (the
-dnl "Software"), to deal in the Software without restriction, including
-dnl without limitation the rights to use, copy, modify, merge, publish,
-dnl distribute, and/or sell copies of the Software, and to permit persons
-dnl to whom the Software is furnished to do so, provided that the above
-dnl copyright notice(s) and this permission notice appear in all copies of
-dnl the Software and that both the above copyright notice(s) and this
-dnl permission notice appear in supporting documentation.
+dnl copy of this software and associated documentation files (the "Software"),
+dnl to deal in the Software without restriction, including without limitation
+dnl the rights to use, copy, modify, merge, publish, distribute, sublicense,
+dnl and/or sell copies of the Software, and to permit persons to whom the
+dnl Software is furnished to do so, subject to the following conditions:
dnl
-dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-dnl OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-dnl HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
-dnl INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
-dnl FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-dnl NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-dnl WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+dnl The above copyright notice and this permission notice (including the next
+dnl paragraph) shall be included in all copies or substantial portions of the
+dnl Software.
dnl
-dnl Except as contained in this notice, the name of a copyright holder
-dnl shall not be used in advertising or otherwise to promote the sale, use
-dnl or other dealings in this Software without prior written authorization
-dnl of the copyright holder.
+dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+dnl DEALINGS IN THE SOFTWARE.
# XORG_MACROS_VERSION(required-version)
# -------------------------------------
@@ -1031,27 +1026,24 @@ dnl of the copyright holder.
# your configure.ac with the minimum required version, such as:
# XORG_MACROS_VERSION(1.1)
#
-# To force at least a version with this macro defined, also add:
-# m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.1 or later before running autoconf/autogen])])
+# To ensure that this macro is defined, also add:
+# m4_ifndef([XORG_MACROS_VERSION],
+# [m4_fatal([must install xorg-macros 1.1 or later before running autoconf/autogen])])
#
#
# See the "minimum version" comment for each macro you use to see what
# version you require.
-AC_DEFUN([XORG_MACROS_VERSION],[
- [XORG_MACROS_needed_version=$1
- XORG_MACROS_needed_major=`echo $XORG_MACROS_needed_version | sed 's/\..*$//'`
- XORG_MACROS_needed_minor=`echo $XORG_MACROS_needed_version | sed -e 's/^[0-9]*\.//' -e 's/\..*$//'`]
- AC_MSG_CHECKING([if xorg-macros used to generate configure is at least ${XORG_MACROS_needed_major}.${XORG_MACROS_needed_minor}])
- [XORG_MACROS_version=1.1.6
- XORG_MACROS_major=`echo $XORG_MACROS_version | sed 's/\..*$//'`
- XORG_MACROS_minor=`echo $XORG_MACROS_version | sed -e 's/^[0-9]*\.//' -e 's/\..*$//'`]
- if test $XORG_MACROS_major -ne $XORG_MACROS_needed_major ; then
- AC_MSG_ERROR([configure built with incompatible version of xorg-macros.m4 - requires version ${XORG_MACROS_major}.x])
- fi
- if test $XORG_MACROS_minor -lt $XORG_MACROS_needed_minor ; then
- AC_MSG_ERROR([configure built with too old of a version of xorg-macros.m4 - requires version ${XORG_MACROS_major}.${XORG_MACROS_minor}.0 or newer])
- fi
- AC_MSG_RESULT([yes, $XORG_MACROS_version])
+m4_defun([XORG_MACROS_VERSION],[
+m4_define([vers_have], [1.11.0])
+m4_define([maj_have], m4_substr(vers_have, 0, m4_index(vers_have, [.])))
+m4_define([maj_needed], m4_substr([$1], 0, m4_index([$1], [.])))
+m4_if(m4_cmp(maj_have, maj_needed), 0,,
+ [m4_fatal([xorg-macros major version ]maj_needed[ is required but ]vers_have[ found])])
+m4_if(m4_version_compare(vers_have, [$1]), -1,
+ [m4_fatal([xorg-macros version $1 or higher is required but ]vers_have[ found])])
+m4_undefine([vers_have])
+m4_undefine([maj_have])
+m4_undefine([maj_needed])
]) # XORG_MACROS_VERSION
# XORG_PROG_RAWCPP()
@@ -1076,6 +1068,10 @@ else
if test `${RAWCPP} -undef < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then
RAWCPPFLAGS=-undef
AC_MSG_RESULT([yes])
+ # under Cygwin unix is still defined even with -undef
+ elif test `${RAWCPP} -undef -ansi < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then
+ RAWCPPFLAGS="-undef -ansi"
+ AC_MSG_RESULT([yes, with -ansi])
else
AC_MSG_ERROR([${RAWCPP} defines unix with or without -undef. I don't know what to do.])
fi
@@ -1106,9 +1102,12 @@ AC_SUBST(RAWCPPFLAGS)
# on this OS - replaces *ManSuffix settings in old Imake *.cf per-os files.
# Not sure if there's any better way than just hardcoding by OS name.
# Override default settings by setting environment variables
+# Added MAN_SUBSTS in version 1.8
+# Added AC_PROG_SED in version 1.8
AC_DEFUN([XORG_MANPAGE_SECTIONS],[
AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_SED])
if test x$APP_MAN_SUFFIX = x ; then
APP_MAN_SUFFIX=1
@@ -1177,8 +1176,60 @@ AC_SUBST([FILE_MAN_DIR])
AC_SUBST([MISC_MAN_DIR])
AC_SUBST([DRIVER_MAN_DIR])
AC_SUBST([ADMIN_MAN_DIR])
+
+XORG_MAN_PAGE="X Version 11"
+AC_SUBST([XORG_MAN_PAGE])
+MAN_SUBSTS="\
+ -e 's|__vendorversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \
+ -e 's|__xorgversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \
+ -e 's|__xservername__|Xorg|g' \
+ -e 's|__xconfigfile__|xorg.conf|g' \
+ -e 's|__projectroot__|\$(prefix)|g' \
+ -e 's|__apploaddir__|\$(appdefaultdir)|g' \
+ -e 's|__appmansuffix__|\$(APP_MAN_SUFFIX)|g' \
+ -e 's|__drivermansuffix__|\$(DRIVER_MAN_SUFFIX)|g' \
+ -e 's|__adminmansuffix__|\$(ADMIN_MAN_SUFFIX)|g' \
+ -e 's|__libmansuffix__|\$(LIB_MAN_SUFFIX)|g' \
+ -e 's|__miscmansuffix__|\$(MISC_MAN_SUFFIX)|g' \
+ -e 's|__filemansuffix__|\$(FILE_MAN_SUFFIX)|g'"
+AC_SUBST([MAN_SUBSTS])
+
]) # XORG_MANPAGE_SECTIONS
+# XORG_CHECK_SGML_DOCTOOLS([MIN-VERSION])
+# ------------------------
+# Minimum version: 1.7.0
+#
+# Defines the variable XORG_SGML_PATH containing the location of X11/defs.ent
+# provided by xorg-sgml-doctools, if installed.
+AC_DEFUN([XORG_CHECK_SGML_DOCTOOLS],[
+AC_MSG_CHECKING([for X.Org SGML entities m4_ifval([$1],[>= $1])])
+XORG_SGML_PATH=
+PKG_CHECK_EXISTS([xorg-sgml-doctools m4_ifval([$1],[>= $1])],
+ [XORG_SGML_PATH=`$PKG_CONFIG --variable=sgmlrootdir xorg-sgml-doctools`],
+ [m4_ifval([$1],[:],
+ [if test x"$cross_compiling" != x"yes" ; then
+ AC_CHECK_FILE([$prefix/share/sgml/X11/defs.ent],
+ [XORG_SGML_PATH=$prefix/share/sgml])
+ fi])
+ ])
+
+# Define variables STYLESHEET_SRCDIR and XSL_STYLESHEET containing
+# the path and the name of the doc stylesheet
+if test "x$XORG_SGML_PATH" != "x" ; then
+ AC_MSG_RESULT([$XORG_SGML_PATH])
+ STYLESHEET_SRCDIR=$XORG_SGML_PATH/X11
+ XSL_STYLESHEET=$STYLESHEET_SRCDIR/xorg.xsl
+else
+ AC_MSG_RESULT([no])
+fi
+
+AC_SUBST(XORG_SGML_PATH)
+AC_SUBST(STYLESHEET_SRCDIR)
+AC_SUBST(XSL_STYLESHEET)
+AM_CONDITIONAL([HAVE_STYLESHEETS], [test "x$XSL_STYLESHEET" != "x"])
+]) # XORG_CHECK_SGML_DOCTOOLS
+
# XORG_CHECK_LINUXDOC
# -------------------
# Minimum version: 1.0.0
@@ -1188,21 +1239,14 @@ AC_SUBST([ADMIN_MAN_DIR])
# Whether or not the necessary tools and files are found can be checked
# with the AM_CONDITIONAL "BUILD_LINUXDOC"
AC_DEFUN([XORG_CHECK_LINUXDOC],[
-XORG_SGML_PATH=$prefix/share/sgml
-HAVE_DEFS_ENT=
-
-if test x"$cross_compiling" = x"yes" ; then
- HAVE_DEFS_ENT=no
-else
- AC_CHECK_FILE([$XORG_SGML_PATH/X11/defs.ent], [HAVE_DEFS_ENT=yes])
-fi
+AC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS])
+AC_REQUIRE([XORG_WITH_PS2PDF])
AC_PATH_PROG(LINUXDOC, linuxdoc)
-AC_PATH_PROG(PS2PDF, ps2pdf)
-AC_MSG_CHECKING([Whether to build documentation])
+AC_MSG_CHECKING([whether to build documentation])
-if test x$HAVE_DEFS_ENT != x && test x$LINUXDOC != x ; then
+if test x$XORG_SGML_PATH != x && test x$LINUXDOC != x ; then
BUILDDOC=yes
else
BUILDDOC=no
@@ -1212,9 +1256,9 @@ AM_CONDITIONAL(BUILD_LINUXDOC, [test x$BUILDDOC = xyes])
AC_MSG_RESULT([$BUILDDOC])
-AC_MSG_CHECKING([Whether to build pdf documentation])
+AC_MSG_CHECKING([whether to build pdf documentation])
-if test x$PS2PDF != x && test x$BUILD_PDFDOC != xno; then
+if test x$have_ps2pdf != xno && test x$BUILD_PDFDOC != xno; then
BUILDPDFDOC=yes
else
BUILDPDFDOC=no
@@ -1224,7 +1268,7 @@ AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes])
AC_MSG_RESULT([$BUILDPDFDOC])
-MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH GROFF_NO_SGR=y $LINUXDOC -B txt"
+MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH GROFF_NO_SGR=y $LINUXDOC -B txt -f"
MAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B latex --papersize=letter --output=ps"
MAKE_PDF="$PS2PDF"
MAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B html --split=0"
@@ -1244,46 +1288,44 @@ AC_SUBST(MAKE_HTML)
# indicates whether the necessary tools and files are found and, if set,
# $(MAKE_XXX) blah.sgml will produce blah.xxx.
AC_DEFUN([XORG_CHECK_DOCBOOK],[
-XORG_SGML_PATH=$prefix/share/sgml
-HAVE_DEFS_ENT=
+AC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS])
+
BUILDTXTDOC=no
BUILDPDFDOC=no
BUILDPSDOC=no
BUILDHTMLDOC=no
-AC_CHECK_FILE([$XORG_SGML_PATH/X11/defs.ent], [HAVE_DEFS_ENT=yes])
-
AC_PATH_PROG(DOCBOOKPS, docbook2ps)
AC_PATH_PROG(DOCBOOKPDF, docbook2pdf)
AC_PATH_PROG(DOCBOOKHTML, docbook2html)
AC_PATH_PROG(DOCBOOKTXT, docbook2txt)
-AC_MSG_CHECKING([Whether to build text documentation])
-if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKTXT != x &&
+AC_MSG_CHECKING([whether to build text documentation])
+if test x$XORG_SGML_PATH != x && test x$DOCBOOKTXT != x &&
test x$BUILD_TXTDOC != xno; then
BUILDTXTDOC=yes
fi
AM_CONDITIONAL(BUILD_TXTDOC, [test x$BUILDTXTDOC = xyes])
AC_MSG_RESULT([$BUILDTXTDOC])
-AC_MSG_CHECKING([Whether to build PDF documentation])
-if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKPDF != x &&
+AC_MSG_CHECKING([whether to build PDF documentation])
+if test x$XORG_SGML_PATH != x && test x$DOCBOOKPDF != x &&
test x$BUILD_PDFDOC != xno; then
BUILDPDFDOC=yes
fi
AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes])
AC_MSG_RESULT([$BUILDPDFDOC])
-AC_MSG_CHECKING([Whether to build PostScript documentation])
-if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKPS != x &&
+AC_MSG_CHECKING([whether to build PostScript documentation])
+if test x$XORG_SGML_PATH != x && test x$DOCBOOKPS != x &&
test x$BUILD_PSDOC != xno; then
BUILDPSDOC=yes
fi
AM_CONDITIONAL(BUILD_PSDOC, [test x$BUILDPSDOC = xyes])
AC_MSG_RESULT([$BUILDPSDOC])
-AC_MSG_CHECKING([Whether to build HTML documentation])
-if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKHTML != x &&
+AC_MSG_CHECKING([whether to build HTML documentation])
+if test x$XORG_SGML_PATH != x && test x$DOCBOOKHTML != x &&
test x$BUILD_HTMLDOC != xno; then
BUILDHTMLDOC=yes
fi
@@ -1301,6 +1343,548 @@ AC_SUBST(MAKE_PDF)
AC_SUBST(MAKE_HTML)
]) # XORG_CHECK_DOCBOOK
+# XORG_WITH_XMLTO([MIN-VERSION], [DEFAULT])
+# ----------------
+# Minimum version: 1.5.0
+# Minimum version for optional DEFAULT argument: 1.11.0
+#
+# Documentation tools are not always available on all platforms and sometimes
+# not at the appropriate level. This macro enables a module to test for the
+# presence of the tool and obtain it's path in separate variables. Coupled with
+# the --with-xmlto option, it allows maximum flexibilty in making decisions
+# as whether or not to use the xmlto package. When DEFAULT is not specified,
+# --with-xmlto assumes 'auto'.
+#
+# Interface to module:
+# HAVE_XMLTO: used in makefiles to conditionally generate documentation
+# XMLTO: returns the path of the xmlto program found
+# returns the path set by the user in the environment
+# --with-xmlto: 'yes' user instructs the module to use xmlto
+# 'no' user instructs the module not to use xmlto
+#
+# Added in version 1.10.0
+# HAVE_XMLTO_TEXT: used in makefiles to conditionally generate text documentation
+# xmlto for text output requires either lynx, links, or w3m browsers
+#
+# If the user sets the value of XMLTO, AC_PATH_PROG skips testing the path.
+#
+AC_DEFUN([XORG_WITH_XMLTO],[
+AC_ARG_VAR([XMLTO], [Path to xmlto command])
+m4_define([_defopt], m4_default([$2], [auto]))
+AC_ARG_WITH(xmlto,
+ AS_HELP_STRING([--with-xmlto],
+ [Use xmlto to regenerate documentation (default: ]_defopt[)]),
+ [use_xmlto=$withval], [use_xmlto=]_defopt)
+m4_undefine([_defopt])
+
+if test "x$use_xmlto" = x"auto"; then
+ AC_PATH_PROG([XMLTO], [xmlto])
+ if test "x$XMLTO" = "x"; then
+ AC_MSG_WARN([xmlto not found - documentation targets will be skipped])
+ have_xmlto=no
+ else
+ have_xmlto=yes
+ fi
+elif test "x$use_xmlto" = x"yes" ; then
+ AC_PATH_PROG([XMLTO], [xmlto])
+ if test "x$XMLTO" = "x"; then
+ AC_MSG_ERROR([--with-xmlto=yes specified but xmlto not found in PATH])
+ fi
+ have_xmlto=yes
+elif test "x$use_xmlto" = x"no" ; then
+ if test "x$XMLTO" != "x"; then
+ AC_MSG_WARN([ignoring XMLTO environment variable since --with-xmlto=no was specified])
+ fi
+ have_xmlto=no
+else
+ AC_MSG_ERROR([--with-xmlto expects 'yes' or 'no'])
+fi
+
+# Test for a minimum version of xmlto, if provided.
+m4_ifval([$1],
+[if test "$have_xmlto" = yes; then
+ # scrape the xmlto version
+ AC_MSG_CHECKING([the xmlto version])
+ xmlto_version=`$XMLTO --version 2>/dev/null | cut -d' ' -f3`
+ AC_MSG_RESULT([$xmlto_version])
+ AS_VERSION_COMPARE([$xmlto_version], [$1],
+ [if test "x$use_xmlto" = xauto; then
+ AC_MSG_WARN([xmlto version $xmlto_version found, but $1 needed])
+ have_xmlto=no
+ else
+ AC_MSG_ERROR([xmlto version $xmlto_version found, but $1 needed])
+ fi])
+fi])
+
+# Test for the ability of xmlto to generate a text target
+have_xmlto_text=no
+cat > conftest.xml << "EOF"
+EOF
+AS_IF([test "$have_xmlto" = yes],
+ [AS_IF([$XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1],
+ [have_xmlto_text=yes],
+ [AC_MSG_WARN([xmlto cannot generate text format, this format skipped])])])
+rm -f conftest.xml
+AM_CONDITIONAL([HAVE_XMLTO_TEXT], [test $have_xmlto_text = yes])
+AM_CONDITIONAL([HAVE_XMLTO], [test "$have_xmlto" = yes])
+]) # XORG_WITH_XMLTO
+
+# XORG_WITH_ASCIIDOC([MIN-VERSION], [DEFAULT])
+# ----------------
+# Minimum version: 1.5.0
+# Minimum version for optional DEFAULT argument: 1.11.0
+#
+# Documentation tools are not always available on all platforms and sometimes
+# not at the appropriate level. This macro enables a module to test for the
+# presence of the tool and obtain it's path in separate variables. Coupled with
+# the --with-asciidoc option, it allows maximum flexibilty in making decisions
+# as whether or not to use the asciidoc package. When DEFAULT is not specified,
+# --with-asciidoc assumes 'auto'.
+#
+# Interface to module:
+# HAVE_ASCIIDOC: used in makefiles to conditionally generate documentation
+# ASCIIDOC: returns the path of the asciidoc program found
+# returns the path set by the user in the environment
+# --with-asciidoc: 'yes' user instructs the module to use asciidoc
+# 'no' user instructs the module not to use asciidoc
+#
+# If the user sets the value of ASCIIDOC, AC_PATH_PROG skips testing the path.
+#
+AC_DEFUN([XORG_WITH_ASCIIDOC],[
+AC_ARG_VAR([ASCIIDOC], [Path to asciidoc command])
+m4_define([_defopt], m4_default([$2], [auto]))
+AC_ARG_WITH(asciidoc,
+ AS_HELP_STRING([--with-asciidoc],
+ [Use asciidoc to regenerate documentation (default: ]_defopt[)]),
+ [use_asciidoc=$withval], [use_asciidoc=]_defopt)
+m4_undefine([_defopt])
+
+if test "x$use_asciidoc" = x"auto"; then
+ AC_PATH_PROG([ASCIIDOC], [asciidoc])
+ if test "x$ASCIIDOC" = "x"; then
+ AC_MSG_WARN([asciidoc not found - documentation targets will be skipped])
+ have_asciidoc=no
+ else
+ have_asciidoc=yes
+ fi
+elif test "x$use_asciidoc" = x"yes" ; then
+ AC_PATH_PROG([ASCIIDOC], [asciidoc])
+ if test "x$ASCIIDOC" = "x"; then
+ AC_MSG_ERROR([--with-asciidoc=yes specified but asciidoc not found in PATH])
+ fi
+ have_asciidoc=yes
+elif test "x$use_asciidoc" = x"no" ; then
+ if test "x$ASCIIDOC" != "x"; then
+ AC_MSG_WARN([ignoring ASCIIDOC environment variable since --with-asciidoc=no was specified])
+ fi
+ have_asciidoc=no
+else
+ AC_MSG_ERROR([--with-asciidoc expects 'yes' or 'no'])
+fi
+m4_ifval([$1],
+[if test "$have_asciidoc" = yes; then
+ # scrape the asciidoc version
+ AC_MSG_CHECKING([the asciidoc version])
+ asciidoc_version=`$ASCIIDOC --version 2>/dev/null | cut -d' ' -f2`
+ AC_MSG_RESULT([$asciidoc_version])
+ AS_VERSION_COMPARE([$asciidoc_version], [$1],
+ [if test "x$use_asciidoc" = xauto; then
+ AC_MSG_WARN([asciidoc version $asciidoc_version found, but $1 needed])
+ have_asciidoc=no
+ else
+ AC_MSG_ERROR([asciidoc version $asciidoc_version found, but $1 needed])
+ fi])
+fi])
+AM_CONDITIONAL([HAVE_ASCIIDOC], [test "$have_asciidoc" = yes])
+]) # XORG_WITH_ASCIIDOC
+
+# XORG_WITH_DOXYGEN([MIN-VERSION], [DEFAULT])
+# --------------------------------
+# Minimum version: 1.5.0
+# Minimum version for optional DEFAULT argument: 1.11.0
+#
+# Documentation tools are not always available on all platforms and sometimes
+# not at the appropriate level. This macro enables a module to test for the
+# presence of the tool and obtain it's path in separate variables. Coupled with
+# the --with-doxygen option, it allows maximum flexibilty in making decisions
+# as whether or not to use the doxygen package. When DEFAULT is not specified,
+# --with-doxygen assumes 'auto'.
+#
+# Interface to module:
+# HAVE_DOXYGEN: used in makefiles to conditionally generate documentation
+# DOXYGEN: returns the path of the doxygen program found
+# returns the path set by the user in the environment
+# --with-doxygen: 'yes' user instructs the module to use doxygen
+# 'no' user instructs the module not to use doxygen
+#
+# If the user sets the value of DOXYGEN, AC_PATH_PROG skips testing the path.
+#
+AC_DEFUN([XORG_WITH_DOXYGEN],[
+AC_ARG_VAR([DOXYGEN], [Path to doxygen command])
+m4_define([_defopt], m4_default([$2], [auto]))
+AC_ARG_WITH(doxygen,
+ AS_HELP_STRING([--with-doxygen],
+ [Use doxygen to regenerate documentation (default: ]_defopt[)]),
+ [use_doxygen=$withval], [use_doxygen=]_defopt)
+m4_undefine([_defopt])
+
+if test "x$use_doxygen" = x"auto"; then
+ AC_PATH_PROG([DOXYGEN], [doxygen])
+ if test "x$DOXYGEN" = "x"; then
+ AC_MSG_WARN([doxygen not found - documentation targets will be skipped])
+ have_doxygen=no
+ else
+ have_doxygen=yes
+ fi
+elif test "x$use_doxygen" = x"yes" ; then
+ AC_PATH_PROG([DOXYGEN], [doxygen])
+ if test "x$DOXYGEN" = "x"; then
+ AC_MSG_ERROR([--with-doxygen=yes specified but doxygen not found in PATH])
+ fi
+ have_doxygen=yes
+elif test "x$use_doxygen" = x"no" ; then
+ if test "x$DOXYGEN" != "x"; then
+ AC_MSG_WARN([ignoring DOXYGEN environment variable since --with-doxygen=no was specified])
+ fi
+ have_doxygen=no
+else
+ AC_MSG_ERROR([--with-doxygen expects 'yes' or 'no'])
+fi
+m4_ifval([$1],
+[if test "$have_doxygen" = yes; then
+ # scrape the doxygen version
+ AC_MSG_CHECKING([the doxygen version])
+ doxygen_version=`$DOXYGEN --version 2>/dev/null`
+ AC_MSG_RESULT([$doxygen_version])
+ AS_VERSION_COMPARE([$doxygen_version], [$1],
+ [if test "x$use_doxygen" = xauto; then
+ AC_MSG_WARN([doxygen version $doxygen_version found, but $1 needed])
+ have_doxygen=no
+ else
+ AC_MSG_ERROR([doxygen version $doxygen_version found, but $1 needed])
+ fi])
+fi])
+AM_CONDITIONAL([HAVE_DOXYGEN], [test "$have_doxygen" = yes])
+]) # XORG_WITH_DOXYGEN
+
+# XORG_WITH_GROFF([DEFAULT])
+# ----------------
+# Minimum version: 1.6.0
+# Minimum version for optional DEFAULT argument: 1.11.0
+#
+# Documentation tools are not always available on all platforms and sometimes
+# not at the appropriate level. This macro enables a module to test for the
+# presence of the tool and obtain it's path in separate variables. Coupled with
+# the --with-groff option, it allows maximum flexibilty in making decisions
+# as whether or not to use the groff package. When DEFAULT is not specified,
+# --with-groff assumes 'auto'.
+#
+# Interface to module:
+# HAVE_GROFF: used in makefiles to conditionally generate documentation
+# HAVE_GROFF_MM: the memorandum macros (-mm) package
+# HAVE_GROFF_MS: the -ms macros package
+# GROFF: returns the path of the groff program found
+# returns the path set by the user in the environment
+# --with-groff: 'yes' user instructs the module to use groff
+# 'no' user instructs the module not to use groff
+#
+# Added in version 1.9.0:
+# HAVE_GROFF_HTML: groff has dependencies to output HTML format:
+# pnmcut pnmcrop pnmtopng pnmtops from the netpbm package.
+# psselect from the psutils package.
+# the ghostcript package. Refer to the grohtml man pages
+#
+# If the user sets the value of GROFF, AC_PATH_PROG skips testing the path.
+#
+# OS and distros often splits groff in a basic and full package, the former
+# having the groff program and the later having devices, fonts and macros
+# Checking for the groff executable is not enough.
+#
+# If macros are missing, we cannot assume that groff is useless, so we don't
+# unset HAVE_GROFF or GROFF env variables.
+# HAVE_GROFF_?? can never be true while HAVE_GROFF is false.
+#
+AC_DEFUN([XORG_WITH_GROFF],[
+AC_ARG_VAR([GROFF], [Path to groff command])
+m4_define([_defopt], m4_default([$1], [auto]))
+AC_ARG_WITH(groff,
+ AS_HELP_STRING([--with-groff],
+ [Use groff to regenerate documentation (default: ]_defopt[)]),
+ [use_groff=$withval], [use_groff=]_defopt)
+m4_undefine([_defopt])
+
+if test "x$use_groff" = x"auto"; then
+ AC_PATH_PROG([GROFF], [groff])
+ if test "x$GROFF" = "x"; then
+ AC_MSG_WARN([groff not found - documentation targets will be skipped])
+ have_groff=no
+ else
+ have_groff=yes
+ fi
+elif test "x$use_groff" = x"yes" ; then
+ AC_PATH_PROG([GROFF], [groff])
+ if test "x$GROFF" = "x"; then
+ AC_MSG_ERROR([--with-groff=yes specified but groff not found in PATH])
+ fi
+ have_groff=yes
+elif test "x$use_groff" = x"no" ; then
+ if test "x$GROFF" != "x"; then
+ AC_MSG_WARN([ignoring GROFF environment variable since --with-groff=no was specified])
+ fi
+ have_groff=no
+else
+ AC_MSG_ERROR([--with-groff expects 'yes' or 'no'])
+fi
+
+# We have groff, test for the presence of the macro packages
+if test "x$have_groff" = x"yes"; then
+ AC_MSG_CHECKING([for ${GROFF} -ms macros])
+ if ${GROFF} -ms -I. /dev/null >/dev/null 2>&1 ; then
+ groff_ms_works=yes
+ else
+ groff_ms_works=no
+ fi
+ AC_MSG_RESULT([$groff_ms_works])
+ AC_MSG_CHECKING([for ${GROFF} -mm macros])
+ if ${GROFF} -mm -I. /dev/null >/dev/null 2>&1 ; then
+ groff_mm_works=yes
+ else
+ groff_mm_works=no
+ fi
+ AC_MSG_RESULT([$groff_mm_works])
+fi
+
+# We have groff, test for HTML dependencies, one command per package
+if test "x$have_groff" = x"yes"; then
+ AC_PATH_PROGS(GS_PATH, [gs gswin32c])
+ AC_PATH_PROG(PNMTOPNG_PATH, [pnmtopng])
+ AC_PATH_PROG(PSSELECT_PATH, [psselect])
+ if test "x$GS_PATH" != "x" -a "x$PNMTOPNG_PATH" != "x" -a "x$PSSELECT_PATH" != "x"; then
+ have_groff_html=yes
+ else
+ have_groff_html=no
+ AC_MSG_WARN([grohtml dependencies not found - HTML Documentation skipped. Refer to grohtml man pages])
+ fi
+fi
+
+# Set Automake conditionals for Makefiles
+AM_CONDITIONAL([HAVE_GROFF], [test "$have_groff" = yes])
+AM_CONDITIONAL([HAVE_GROFF_MS], [test "$groff_ms_works" = yes])
+AM_CONDITIONAL([HAVE_GROFF_MM], [test "$groff_mm_works" = yes])
+AM_CONDITIONAL([HAVE_GROFF_HTML], [test "$have_groff_html" = yes])
+]) # XORG_WITH_GROFF
+
+# XORG_WITH_FOP([DEFAULT])
+# ----------------
+# Minimum version: 1.6.0
+# Minimum version for optional DEFAULT argument: 1.11.0
+#
+# Documentation tools are not always available on all platforms and sometimes
+# not at the appropriate level. This macro enables a module to test for the
+# presence of the tool and obtain it's path in separate variables. Coupled with
+# the --with-fop option, it allows maximum flexibilty in making decisions
+# as whether or not to use the fop package. When DEFAULT is not specified,
+# --with-fop assumes 'auto'.
+#
+# Interface to module:
+# HAVE_FOP: used in makefiles to conditionally generate documentation
+# FOP: returns the path of the fop program found
+# returns the path set by the user in the environment
+# --with-fop: 'yes' user instructs the module to use fop
+# 'no' user instructs the module not to use fop
+#
+# If the user sets the value of FOP, AC_PATH_PROG skips testing the path.
+#
+AC_DEFUN([XORG_WITH_FOP],[
+AC_ARG_VAR([FOP], [Path to fop command])
+m4_define([_defopt], m4_default([$1], [auto]))
+AC_ARG_WITH(fop,
+ AS_HELP_STRING([--with-fop],
+ [Use fop to regenerate documentation (default: ]_defopt[)]),
+ [use_fop=$withval], [use_fop=]_defopt)
+m4_undefine([_defopt])
+
+if test "x$use_fop" = x"auto"; then
+ AC_PATH_PROG([FOP], [fop])
+ if test "x$FOP" = "x"; then
+ AC_MSG_WARN([fop not found - documentation targets will be skipped])
+ have_fop=no
+ else
+ have_fop=yes
+ fi
+elif test "x$use_fop" = x"yes" ; then
+ AC_PATH_PROG([FOP], [fop])
+ if test "x$FOP" = "x"; then
+ AC_MSG_ERROR([--with-fop=yes specified but fop not found in PATH])
+ fi
+ have_fop=yes
+elif test "x$use_fop" = x"no" ; then
+ if test "x$FOP" != "x"; then
+ AC_MSG_WARN([ignoring FOP environment variable since --with-fop=no was specified])
+ fi
+ have_fop=no
+else
+ AC_MSG_ERROR([--with-fop expects 'yes' or 'no'])
+fi
+AM_CONDITIONAL([HAVE_FOP], [test "$have_fop" = yes])
+]) # XORG_WITH_FOP
+
+# XORG_WITH_PS2PDF([DEFAULT])
+# ----------------
+# Minimum version: 1.6.0
+# Minimum version for optional DEFAULT argument: 1.11.0
+#
+# Documentation tools are not always available on all platforms and sometimes
+# not at the appropriate level. This macro enables a module to test for the
+# presence of the tool and obtain it's path in separate variables. Coupled with
+# the --with-ps2pdf option, it allows maximum flexibilty in making decisions
+# as whether or not to use the ps2pdf package. When DEFAULT is not specified,
+# --with-ps2pdf assumes 'auto'.
+#
+# Interface to module:
+# HAVE_PS2PDF: used in makefiles to conditionally generate documentation
+# PS2PDF: returns the path of the ps2pdf program found
+# returns the path set by the user in the environment
+# --with-ps2pdf: 'yes' user instructs the module to use ps2pdf
+# 'no' user instructs the module not to use ps2pdf
+#
+# If the user sets the value of PS2PDF, AC_PATH_PROG skips testing the path.
+#
+AC_DEFUN([XORG_WITH_PS2PDF],[
+AC_ARG_VAR([PS2PDF], [Path to ps2pdf command])
+m4_define([_defopt], m4_default([$1], [auto]))
+AC_ARG_WITH(ps2pdf,
+ AS_HELP_STRING([--with-ps2pdf],
+ [Use ps2pdf to regenerate documentation (default: ]_defopt[)]),
+ [use_ps2pdf=$withval], [use_ps2pdf=]_defopt)
+m4_undefine([_defopt])
+
+if test "x$use_ps2pdf" = x"auto"; then
+ AC_PATH_PROG([PS2PDF], [ps2pdf])
+ if test "x$PS2PDF" = "x"; then
+ AC_MSG_WARN([ps2pdf not found - documentation targets will be skipped])
+ have_ps2pdf=no
+ else
+ have_ps2pdf=yes
+ fi
+elif test "x$use_ps2pdf" = x"yes" ; then
+ AC_PATH_PROG([PS2PDF], [ps2pdf])
+ if test "x$PS2PDF" = "x"; then
+ AC_MSG_ERROR([--with-ps2pdf=yes specified but ps2pdf not found in PATH])
+ fi
+ have_ps2pdf=yes
+elif test "x$use_ps2pdf" = x"no" ; then
+ if test "x$PS2PDF" != "x"; then
+ AC_MSG_WARN([ignoring PS2PDF environment variable since --with-ps2pdf=no was specified])
+ fi
+ have_ps2pdf=no
+else
+ AC_MSG_ERROR([--with-ps2pdf expects 'yes' or 'no'])
+fi
+AM_CONDITIONAL([HAVE_PS2PDF], [test "$have_ps2pdf" = yes])
+]) # XORG_WITH_PS2PDF
+
+# XORG_ENABLE_DOCS (enable_docs=yes)
+# ----------------
+# Minimum version: 1.6.0
+#
+# Documentation tools are not always available on all platforms and sometimes
+# not at the appropriate level. This macro enables a builder to skip all
+# documentation targets except traditional man pages.
+# Combined with the specific tool checking macros XORG_WITH_*, it provides
+# maximum flexibilty in controlling documentation building.
+# Refer to:
+# XORG_WITH_XMLTO --with-xmlto
+# XORG_WITH_ASCIIDOC --with-asciidoc
+# XORG_WITH_DOXYGEN --with-doxygen
+# XORG_WITH_FOP --with-fop
+# XORG_WITH_GROFF --with-groff
+# XORG_WITH_PS2PDF --with-ps2pdf
+#
+# Interface to module:
+# ENABLE_DOCS: used in makefiles to conditionally generate documentation
+# --enable-docs: 'yes' user instructs the module to generate docs
+# 'no' user instructs the module not to generate docs
+# parm1: specify the default value, yes or no.
+#
+AC_DEFUN([XORG_ENABLE_DOCS],[
+m4_define([default], m4_default([$1], [yes]))
+AC_ARG_ENABLE(docs,
+ AS_HELP_STRING([--enable-docs],
+ [Enable building the documentation (default: ]default[)]),
+ [build_docs=$enableval], [build_docs=]default)
+m4_undefine([default])
+AM_CONDITIONAL(ENABLE_DOCS, [test x$build_docs = xyes])
+AC_MSG_CHECKING([whether to build documentation])
+AC_MSG_RESULT([$build_docs])
+]) # XORG_ENABLE_DOCS
+
+# XORG_ENABLE_DEVEL_DOCS (enable_devel_docs=yes)
+# ----------------
+# Minimum version: 1.6.0
+#
+# This macro enables a builder to skip all developer documentation.
+# Combined with the specific tool checking macros XORG_WITH_*, it provides
+# maximum flexibilty in controlling documentation building.
+# Refer to:
+# XORG_WITH_XMLTO --with-xmlto
+# XORG_WITH_ASCIIDOC --with-asciidoc
+# XORG_WITH_DOXYGEN --with-doxygen
+# XORG_WITH_FOP --with-fop
+# XORG_WITH_GROFF --with-groff
+# XORG_WITH_PS2PDF --with-ps2pdf
+#
+# Interface to module:
+# ENABLE_DEVEL_DOCS: used in makefiles to conditionally generate developer docs
+# --enable-devel-docs: 'yes' user instructs the module to generate developer docs
+# 'no' user instructs the module not to generate developer docs
+# parm1: specify the default value, yes or no.
+#
+AC_DEFUN([XORG_ENABLE_DEVEL_DOCS],[
+m4_define([devel_default], m4_default([$1], [yes]))
+AC_ARG_ENABLE(devel-docs,
+ AS_HELP_STRING([--enable-devel-docs],
+ [Enable building the developer documentation (default: ]devel_default[)]),
+ [build_devel_docs=$enableval], [build_devel_docs=]devel_default)
+m4_undefine([devel_default])
+AM_CONDITIONAL(ENABLE_DEVEL_DOCS, [test x$build_devel_docs = xyes])
+AC_MSG_CHECKING([whether to build developer documentation])
+AC_MSG_RESULT([$build_devel_docs])
+]) # XORG_ENABLE_DEVEL_DOCS
+
+# XORG_ENABLE_SPECS (enable_specs=yes)
+# ----------------
+# Minimum version: 1.6.0
+#
+# This macro enables a builder to skip all functional specification targets.
+# Combined with the specific tool checking macros XORG_WITH_*, it provides
+# maximum flexibilty in controlling documentation building.
+# Refer to:
+# XORG_WITH_XMLTO --with-xmlto
+# XORG_WITH_ASCIIDOC --with-asciidoc
+# XORG_WITH_DOXYGEN --with-doxygen
+# XORG_WITH_FOP --with-fop
+# XORG_WITH_GROFF --with-groff
+# XORG_WITH_PS2PDF --with-ps2pdf
+#
+# Interface to module:
+# ENABLE_SPECS: used in makefiles to conditionally generate specs
+# --enable-specs: 'yes' user instructs the module to generate specs
+# 'no' user instructs the module not to generate specs
+# parm1: specify the default value, yes or no.
+#
+AC_DEFUN([XORG_ENABLE_SPECS],[
+m4_define([spec_default], m4_default([$1], [yes]))
+AC_ARG_ENABLE(specs,
+ AS_HELP_STRING([--enable-specs],
+ [Enable building the specs (default: ]spec_default[)]),
+ [build_specs=$enableval], [build_specs=]spec_default)
+m4_undefine([spec_default])
+AM_CONDITIONAL(ENABLE_SPECS, [test x$build_specs = xyes])
+AC_MSG_CHECKING([whether to build functional specifications])
+AC_MSG_RESULT([$build_specs])
+]) # XORG_ENABLE_SPECS
+
# XORG_CHECK_MALLOC_ZERO
# ----------------------
# Minimum version: 1.0.0
@@ -1310,7 +1894,7 @@ AC_SUBST(MAKE_HTML)
# their AM_CFLAGS (or other appropriate *_CFLAGS) to use them.
AC_DEFUN([XORG_CHECK_MALLOC_ZERO],[
AC_ARG_ENABLE(malloc0returnsnull,
- AC_HELP_STRING([--enable-malloc0returnsnull],
+ AS_HELP_STRING([--enable-malloc0returnsnull],
[malloc(0) returns NULL (default: auto)]),
[MALLOC_ZERO_RETURNS_NULL=$enableval],
[MALLOC_ZERO_RETURNS_NULL=auto])
@@ -1330,7 +1914,8 @@ main() {
exit(m0 == 0 || r0 == 0 || c0 == 0 ? 0 : 1);
}],
[MALLOC_ZERO_RETURNS_NULL=yes],
- [MALLOC_ZERO_RETURNS_NULL=no])
+ [MALLOC_ZERO_RETURNS_NULL=no],
+ [MALLOC_ZERO_RETURNS_NULL=yes])
fi
AC_MSG_RESULT([$MALLOC_ZERO_RETURNS_NULL])
@@ -1353,38 +1938,69 @@ AC_SUBST([XTMALLOC_ZERO_CFLAGS])
# ----------------
# Minimum version: 1.1.0
#
-# Sets up flags for source checkers such as lint and sparse if --with-lint
-# is specified. (Use --with-lint=sparse for sparse.)
-# Sets $LINT to name of source checker passed with --with-lint (default: lint)
-# Sets $LINT_FLAGS to flags to pass to source checker
-# Sets LINT automake conditional if enabled (default: disabled)
+# This macro enables the use of a tool that flags some suspicious and
+# non-portable constructs (likely to be bugs) in C language source code.
+# It will attempt to locate the tool and use appropriate options.
+# There are various lint type tools on different platforms.
+#
+# Interface to module:
+# LINT: returns the path to the tool found on the platform
+# or the value set to LINT on the configure cmd line
+# also an Automake conditional
+# LINT_FLAGS: an Automake variable with appropriate flags
+#
+# --with-lint: 'yes' user instructs the module to use lint
+# 'no' user instructs the module not to use lint (default)
+#
+# If the user sets the value of LINT, AC_PATH_PROG skips testing the path.
+# If the user sets the value of LINT_FLAGS, they are used verbatim.
#
AC_DEFUN([XORG_WITH_LINT],[
-# Allow checking code with lint, sparse, etc.
-AC_ARG_WITH(lint, [AC_HELP_STRING([--with-lint],
+AC_ARG_VAR([LINT], [Path to a lint-style command])
+AC_ARG_VAR([LINT_FLAGS], [Flags for the lint-style command])
+AC_ARG_WITH(lint, [AS_HELP_STRING([--with-lint],
[Use a lint-style source code checker (default: disabled)])],
[use_lint=$withval], [use_lint=no])
-if test "x$use_lint" = "xyes" ; then
- LINT="lint"
+
+# Obtain platform specific info like program name and options
+# The lint program on FreeBSD and NetBSD is different from the one on Solaris
+case $host_os in
+ *linux* | *openbsd* | kfreebsd*-gnu | darwin* | cygwin*)
+ lint_name=splint
+ lint_options="-badflag"
+ ;;
+ *freebsd* | *netbsd*)
+ lint_name=lint
+ lint_options="-u -b"
+ ;;
+ *solaris*)
+ lint_name=lint
+ lint_options="-u -b -h -erroff=E_INDISTING_FROM_TRUNC2"
+ ;;
+esac
+
+# Test for the presence of the program (either guessed by the code or spelled out by the user)
+if test "x$use_lint" = x"yes" ; then
+ AC_PATH_PROG([LINT], [$lint_name])
+ if test "x$LINT" = "x"; then
+ AC_MSG_ERROR([--with-lint=yes specified but lint-style tool not found in PATH])
+ fi
+elif test "x$use_lint" = x"no" ; then
+ if test "x$LINT" != "x"; then
+ AC_MSG_WARN([ignoring LINT environment variable since --with-lint=no was specified])
+ fi
else
- LINT="$use_lint"
+ AC_MSG_ERROR([--with-lint expects 'yes' or 'no'. Use LINT variable to specify path.])
fi
-if test "x$LINT_FLAGS" = "x" -a "x$LINT" != "xno" ; then
- case $LINT in
- lint|*/lint)
- case $host_os in
- solaris*)
- LINT_FLAGS="-u -b -h -erroff=E_INDISTING_FROM_TRUNC2"
- ;;
- esac
- ;;
- esac
+
+# User supplied flags override default flags
+if test "x$LINT_FLAGS" != "x"; then
+ lint_options=$LINT_FLAGS
fi
-AC_SUBST(LINT)
-AC_SUBST(LINT_FLAGS)
-AM_CONDITIONAL(LINT, [test x$LINT != xno])
+AC_SUBST([LINT_FLAGS],[$lint_options])
+AM_CONDITIONAL(LINT, [test "x$LINT" != x])
]) # XORG_WITH_LINT
@@ -1394,33 +2010,123 @@ AM_CONDITIONAL(LINT, [test x$LINT != xno])
#
# Sets up flags for building lint libraries for checking programs that call
# functions in the library.
-# Disabled by default, enable with --enable-lint-library
-# Sets:
-# @LINTLIB@ - name of lint library file to make
-# MAKE_LINT_LIB - automake conditional
#
+# Interface to module:
+# LINTLIB - Automake variable with the name of lint library file to make
+# MAKE_LINT_LIB - Automake conditional
+#
+# --enable-lint-library: - 'yes' user instructs the module to created a lint library
+# - 'no' user instructs the module not to create a lint library (default)
AC_DEFUN([XORG_LINT_LIBRARY],[
AC_REQUIRE([XORG_WITH_LINT])
-# Build lint "library" for more indepth checks of programs calling this library
-AC_ARG_ENABLE(lint-library, [AC_HELP_STRING([--enable-lint-library],
+AC_ARG_ENABLE(lint-library, [AS_HELP_STRING([--enable-lint-library],
[Create lint library (default: disabled)])],
[make_lint_lib=$enableval], [make_lint_lib=no])
-if test "x$make_lint_lib" != "xno" ; then
- if test "x$LINT" = "xno" ; then
- AC_MSG_ERROR([Cannot make lint library without --with-lint])
- fi
- if test "x$make_lint_lib" = "xyes" ; then
- LINTLIB=llib-l$1.ln
- else
- LINTLIB=$make_lint_lib
- fi
+
+if test "x$make_lint_lib" = x"yes" ; then
+ LINTLIB=llib-l$1.ln
+ if test "x$LINT" = "x"; then
+ AC_MSG_ERROR([Cannot make lint library without --with-lint])
+ fi
+elif test "x$make_lint_lib" != x"no" ; then
+ AC_MSG_ERROR([--enable-lint-library expects 'yes' or 'no'.])
fi
+
AC_SUBST(LINTLIB)
AM_CONDITIONAL(MAKE_LINT_LIB, [test x$make_lint_lib != xno])
]) # XORG_LINT_LIBRARY
+# XORG_CWARNFLAGS
+# ---------------
+# Minimum version: 1.2.0
+#
+# Defines CWARNFLAGS to enable C compiler warnings.
+#
+AC_DEFUN([XORG_CWARNFLAGS], [
+AC_REQUIRE([AC_PROG_CC_C99])
+if test "x$GCC" = xyes ; then
+ CWARNFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \
+-Wmissing-declarations -Wnested-externs -fno-strict-aliasing \
+-Wbad-function-cast -Wformat=2"
+ case `$CC -dumpversion` in
+ 3.4.* | 4.*)
+ CWARNFLAGS="$CWARNFLAGS -Wold-style-definition -Wdeclaration-after-statement"
+ ;;
+ esac
+else
+ AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
+ if test "x$SUNCC" = "xyes"; then
+ CWARNFLAGS="-v"
+ fi
+fi
+AC_SUBST(CWARNFLAGS)
+]) # XORG_CWARNFLAGS
+
+# XORG_STRICT_OPTION
+# -----------------------
+# Minimum version: 1.3.0
+#
+# Add configure option to enable strict compilation
+AC_DEFUN([XORG_STRICT_OPTION], [
+# If the module's configure.ac calls AC_PROG_CC later on, CC gets set to C89
+AC_REQUIRE([AC_PROG_CC_C99])
+AC_REQUIRE([XORG_CWARNFLAGS])
+
+AC_ARG_ENABLE(strict-compilation,
+ AS_HELP_STRING([--enable-strict-compilation],
+ [Enable all warnings from compiler and make them errors (default: disabled)]),
+ [STRICT_COMPILE=$enableval], [STRICT_COMPILE=no])
+if test "x$STRICT_COMPILE" = "xyes"; then
+ AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
+ AC_CHECK_DECL([__INTEL_COMPILER], [INTELCC="yes"], [INTELCC="no"])
+ if test "x$GCC" = xyes ; then
+ STRICT_CFLAGS="-pedantic -Werror"
+ elif test "x$SUNCC" = "xyes"; then
+ STRICT_CFLAGS="-errwarn"
+ elif test "x$INTELCC" = "xyes"; then
+ STRICT_CFLAGS="-Werror"
+ fi
+fi
+CWARNFLAGS="$CWARNFLAGS $STRICT_CFLAGS"
+AC_SUBST([CWARNFLAGS])
+]) # XORG_STRICT_OPTION
+
+# XORG_DEFAULT_OPTIONS
+# --------------------
+# Minimum version: 1.3.0
+#
+# Defines default options for X.Org modules.
+#
+AC_DEFUN([XORG_DEFAULT_OPTIONS], [
+AC_REQUIRE([AC_PROG_INSTALL])
+XORG_CWARNFLAGS
+XORG_STRICT_OPTION
+XORG_RELEASE_VERSION
+XORG_CHANGELOG
+XORG_INSTALL
+XORG_MANPAGE_SECTIONS
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])],
+ [AC_SUBST([AM_DEFAULT_VERBOSITY], [1])])
+]) # XORG_DEFAULT_OPTIONS
+
+# XORG_INSTALL()
+# ----------------
+# Minimum version: 1.4.0
+#
+# Defines the variable INSTALL_CMD as the command to copy
+# INSTALL from $prefix/share/util-macros.
+#
+AC_DEFUN([XORG_INSTALL], [
+AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros`
+INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \
+mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \
+|| (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \
+echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)"
+AC_SUBST([INSTALL_CMD])
+]) # XORG_INSTALL
dnl Copyright 2005 Red Hat, Inc
dnl
dnl Permission to use, copy, modify, distribute, and sell this software and its
@@ -1448,22 +2154,9 @@ dnl
# XORG_RELEASE_VERSION
# --------------------
-# Adds --with/without-release-string and changes the PACKAGE and
-# PACKAGE_TARNAME to use "$PACKAGE{_TARNAME}-$RELEASE_VERSION". If
-# no option is given, PACKAGE and PACKAGE_TARNAME are unchanged. Also
-# defines PACKAGE_VERSION_{MAJOR,MINOR,PATCHLEVEL} for modules to use.
+# Defines PACKAGE_VERSION_{MAJOR,MINOR,PATCHLEVEL} for modules to use.
AC_DEFUN([XORG_RELEASE_VERSION],[
- AC_ARG_WITH(release-version,
- AC_HELP_STRING([--with-release-version=STRING],
- [Use release version string in package name]),
- [RELEASE_VERSION="$withval"],
- [RELEASE_VERSION=""])
- if test "x$RELEASE_VERSION" != "x"; then
- PACKAGE="$PACKAGE-$RELEASE_VERSION"
- PACKAGE_TARNAME="$PACKAGE_TARNAME-$RELEASE_VERSION"
- AC_MSG_NOTICE([Building with package name set to $PACKAGE])
- fi
AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MAJOR],
[`echo $PACKAGE_VERSION | cut -d . -f 1`],
[Major version of this package])
@@ -1483,3 +2176,19 @@ AC_DEFUN([XORG_RELEASE_VERSION],[
[Patch version of this package])
])
+# XORG_CHANGELOG()
+# ----------------
+# Minimum version: 1.2.0
+#
+# Defines the variable CHANGELOG_CMD as the command to generate
+# ChangeLog from git.
+#
+#
+AC_DEFUN([XORG_CHANGELOG], [
+CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp && \
+mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \
+|| (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \
+echo 'git directory not found: installing possibly empty changelog.' >&2)"
+AC_SUBST([CHANGELOG_CMD])
+]) # XORG_CHANGELOG
+
diff --git a/app/xkbcomp/action.c b/app/xkbcomp/action.c
index 8b0ba6507..3b82e647e 100644
--- a/app/xkbcomp/action.c
+++ b/app/xkbcomp/action.c
@@ -1,4 +1,3 @@
-/* $Xorg: action.c,v 1.3 2000/08/17 19:54:30 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/action.c,v 3.10tsi Exp $ */
#include "xkbcomp.h"
#include "tokens.h"
@@ -36,148 +34,262 @@
#include "action.h"
#include "misc.h"
-static Bool actionsInitialized;
-static ExprDef constTrue;
-static ExprDef constFalse;
+static Bool actionsInitialized;
+static ExprDef constTrue;
+static ExprDef constFalse;
/***====================================================================***/
static Bool
-stringToAction(char *str,unsigned *type_rtrn)
+stringToAction(char *str, unsigned *type_rtrn)
{
- if (str==NULL)
- return False;
-
- if (uStrCaseCmp(str,"noaction")==0) *type_rtrn= XkbSA_NoAction;
- else if (uStrCaseCmp(str,"setmods")==0) *type_rtrn= XkbSA_SetMods;
- else if (uStrCaseCmp(str,"latchmods")==0) *type_rtrn= XkbSA_LatchMods;
- else if (uStrCaseCmp(str,"lockmods")==0) *type_rtrn= XkbSA_LockMods;
- else if (uStrCaseCmp(str,"setgroup")==0) *type_rtrn= XkbSA_SetGroup;
- else if (uStrCaseCmp(str,"latchgroup")==0) *type_rtrn= XkbSA_LatchGroup;
- else if (uStrCaseCmp(str,"lockgroup")==0) *type_rtrn= XkbSA_LockGroup;
- else if (uStrCaseCmp(str,"moveptr")==0) *type_rtrn= XkbSA_MovePtr;
- else if (uStrCaseCmp(str,"movepointer")==0) *type_rtrn= XkbSA_MovePtr;
- else if (uStrCaseCmp(str,"ptrbtn")==0) *type_rtrn= XkbSA_PtrBtn;
- else if (uStrCaseCmp(str,"pointerbutton")==0)
- *type_rtrn= XkbSA_PtrBtn;
- else if (uStrCaseCmp(str,"lockptrbtn")==0) *type_rtrn= XkbSA_LockPtrBtn;
- else if (uStrCaseCmp(str,"lockpointerbutton")==0)
- *type_rtrn= XkbSA_LockPtrBtn;
- else if (uStrCaseCmp(str,"lockptrbutton")==0)
- *type_rtrn= XkbSA_LockPtrBtn;
- else if (uStrCaseCmp(str,"lockpointerbtn")==0)
- *type_rtrn= XkbSA_LockPtrBtn;
- else if (uStrCaseCmp(str,"setptrdflt")==0) *type_rtrn= XkbSA_SetPtrDflt;
- else if (uStrCaseCmp(str,"setpointerdefault")==0)
- *type_rtrn= XkbSA_SetPtrDflt;
- else if (uStrCaseCmp(str,"isolock")==0) *type_rtrn= XkbSA_ISOLock;
- else if (uStrCaseCmp(str,"terminate")==0) *type_rtrn= XkbSA_Terminate;
- else if (uStrCaseCmp(str,"terminateserver")==0)
- *type_rtrn= XkbSA_Terminate;
- else if (uStrCaseCmp(str,"switchscreen")==0)*type_rtrn= XkbSA_SwitchScreen;
- else if (uStrCaseCmp(str,"setcontrols")==0) *type_rtrn= XkbSA_SetControls;
- else if (uStrCaseCmp(str,"lockcontrols")==0)*type_rtrn= XkbSA_LockControls;
- else if (uStrCaseCmp(str,"actionmessage")==0)*type_rtrn= XkbSA_ActionMessage;
- else if (uStrCaseCmp(str,"messageaction")==0)*type_rtrn= XkbSA_ActionMessage;
- else if (uStrCaseCmp(str,"message")==0) *type_rtrn= XkbSA_ActionMessage;
- else if (uStrCaseCmp(str,"redirect")==0) *type_rtrn= XkbSA_RedirectKey;
- else if (uStrCaseCmp(str,"redirectkey")==0) *type_rtrn= XkbSA_RedirectKey;
- else if (uStrCaseCmp(str,"devbtn")==0) *type_rtrn= XkbSA_DeviceBtn;
- else if (uStrCaseCmp(str,"devicebtn")==0) *type_rtrn= XkbSA_DeviceBtn;
- else if (uStrCaseCmp(str,"devbutton")==0) *type_rtrn= XkbSA_DeviceBtn;
- else if (uStrCaseCmp(str,"devicebutton")==0)*type_rtrn= XkbSA_DeviceBtn;
- else if (uStrCaseCmp(str,"lockdevbtn")==0) *type_rtrn= XkbSA_DeviceBtn;
- else if (uStrCaseCmp(str,"lockdevicebtn")==0)
- *type_rtrn= XkbSA_LockDeviceBtn;
- else if (uStrCaseCmp(str,"lockdevbutton")==0)
- *type_rtrn= XkbSA_LockDeviceBtn;
- else if (uStrCaseCmp(str,"lockdevicebutton")==0)
- *type_rtrn= XkbSA_LockDeviceBtn;
- else if (uStrCaseCmp(str,"devval")==0) *type_rtrn=XkbSA_DeviceValuator;
- else if (uStrCaseCmp(str,"deviceval")==0) *type_rtrn=XkbSA_DeviceValuator;
- else if (uStrCaseCmp(str,"devvaluator")==0) *type_rtrn=XkbSA_DeviceValuator;
- else if (uStrCaseCmp(str,"devicevaluator")==0)
- *type_rtrn=XkbSA_DeviceValuator;
- else if (uStrCaseCmp(str,"private")==0) *type_rtrn= PrivateAction;
- else return False;
+ if (str == NULL)
+ return False;
+
+ if (uStrCaseCmp(str, "noaction") == 0)
+ *type_rtrn = XkbSA_NoAction;
+ else if (uStrCaseCmp(str, "setmods") == 0)
+ *type_rtrn = XkbSA_SetMods;
+ else if (uStrCaseCmp(str, "latchmods") == 0)
+ *type_rtrn = XkbSA_LatchMods;
+ else if (uStrCaseCmp(str, "lockmods") == 0)
+ *type_rtrn = XkbSA_LockMods;
+ else if (uStrCaseCmp(str, "setgroup") == 0)
+ *type_rtrn = XkbSA_SetGroup;
+ else if (uStrCaseCmp(str, "latchgroup") == 0)
+ *type_rtrn = XkbSA_LatchGroup;
+ else if (uStrCaseCmp(str, "lockgroup") == 0)
+ *type_rtrn = XkbSA_LockGroup;
+ else if (uStrCaseCmp(str, "moveptr") == 0)
+ *type_rtrn = XkbSA_MovePtr;
+ else if (uStrCaseCmp(str, "movepointer") == 0)
+ *type_rtrn = XkbSA_MovePtr;
+ else if (uStrCaseCmp(str, "ptrbtn") == 0)
+ *type_rtrn = XkbSA_PtrBtn;
+ else if (uStrCaseCmp(str, "pointerbutton") == 0)
+ *type_rtrn = XkbSA_PtrBtn;
+ else if (uStrCaseCmp(str, "lockptrbtn") == 0)
+ *type_rtrn = XkbSA_LockPtrBtn;
+ else if (uStrCaseCmp(str, "lockpointerbutton") == 0)
+ *type_rtrn = XkbSA_LockPtrBtn;
+ else if (uStrCaseCmp(str, "lockptrbutton") == 0)
+ *type_rtrn = XkbSA_LockPtrBtn;
+ else if (uStrCaseCmp(str, "lockpointerbtn") == 0)
+ *type_rtrn = XkbSA_LockPtrBtn;
+ else if (uStrCaseCmp(str, "setptrdflt") == 0)
+ *type_rtrn = XkbSA_SetPtrDflt;
+ else if (uStrCaseCmp(str, "setpointerdefault") == 0)
+ *type_rtrn = XkbSA_SetPtrDflt;
+ else if (uStrCaseCmp(str, "isolock") == 0)
+ *type_rtrn = XkbSA_ISOLock;
+ else if (uStrCaseCmp(str, "terminate") == 0)
+ *type_rtrn = XkbSA_Terminate;
+ else if (uStrCaseCmp(str, "terminateserver") == 0)
+ *type_rtrn = XkbSA_Terminate;
+ else if (uStrCaseCmp(str, "switchscreen") == 0)
+ *type_rtrn = XkbSA_SwitchScreen;
+ else if (uStrCaseCmp(str, "setcontrols") == 0)
+ *type_rtrn = XkbSA_SetControls;
+ else if (uStrCaseCmp(str, "lockcontrols") == 0)
+ *type_rtrn = XkbSA_LockControls;
+ else if (uStrCaseCmp(str, "actionmessage") == 0)
+ *type_rtrn = XkbSA_ActionMessage;
+ else if (uStrCaseCmp(str, "messageaction") == 0)
+ *type_rtrn = XkbSA_ActionMessage;
+ else if (uStrCaseCmp(str, "message") == 0)
+ *type_rtrn = XkbSA_ActionMessage;
+ else if (uStrCaseCmp(str, "redirect") == 0)
+ *type_rtrn = XkbSA_RedirectKey;
+ else if (uStrCaseCmp(str, "redirectkey") == 0)
+ *type_rtrn = XkbSA_RedirectKey;
+ else if (uStrCaseCmp(str, "devbtn") == 0)
+ *type_rtrn = XkbSA_DeviceBtn;
+ else if (uStrCaseCmp(str, "devicebtn") == 0)
+ *type_rtrn = XkbSA_DeviceBtn;
+ else if (uStrCaseCmp(str, "devbutton") == 0)
+ *type_rtrn = XkbSA_DeviceBtn;
+ else if (uStrCaseCmp(str, "devicebutton") == 0)
+ *type_rtrn = XkbSA_DeviceBtn;
+ else if (uStrCaseCmp(str, "lockdevbtn") == 0)
+ *type_rtrn = XkbSA_DeviceBtn;
+ else if (uStrCaseCmp(str, "lockdevicebtn") == 0)
+ *type_rtrn = XkbSA_LockDeviceBtn;
+ else if (uStrCaseCmp(str, "lockdevbutton") == 0)
+ *type_rtrn = XkbSA_LockDeviceBtn;
+ else if (uStrCaseCmp(str, "lockdevicebutton") == 0)
+ *type_rtrn = XkbSA_LockDeviceBtn;
+ else if (uStrCaseCmp(str, "devval") == 0)
+ *type_rtrn = XkbSA_DeviceValuator;
+ else if (uStrCaseCmp(str, "deviceval") == 0)
+ *type_rtrn = XkbSA_DeviceValuator;
+ else if (uStrCaseCmp(str, "devvaluator") == 0)
+ *type_rtrn = XkbSA_DeviceValuator;
+ else if (uStrCaseCmp(str, "devicevaluator") == 0)
+ *type_rtrn = XkbSA_DeviceValuator;
+ else if (uStrCaseCmp(str, "private") == 0)
+ *type_rtrn = PrivateAction;
+ else
+ return False;
return True;
}
static Bool
-stringToField(char *str,unsigned *field_rtrn)
+stringToField(char *str, unsigned *field_rtrn)
{
- if (str==NULL)
- return False;
-
- if (uStrCaseCmp(str,"clearlocks")==0) *field_rtrn= F_ClearLocks;
- else if (uStrCaseCmp(str,"latchtolock")==0) *field_rtrn= F_LatchToLock;
- else if (uStrCaseCmp(str,"genkeyevent")==0) *field_rtrn= F_GenKeyEvent;
- else if (uStrCaseCmp(str,"generatekeyevent")==0)
- *field_rtrn= F_GenKeyEvent;
- else if (uStrCaseCmp(str,"report")==0) *field_rtrn= F_Report;
- else if (uStrCaseCmp(str,"default")==0) *field_rtrn= F_Default;
- else if (uStrCaseCmp(str,"affect")==0) *field_rtrn= F_Affect;
- else if (uStrCaseCmp(str,"increment")==0) *field_rtrn= F_Increment;
- else if (uStrCaseCmp(str,"mods")==0) *field_rtrn= F_Modifiers;
- else if (uStrCaseCmp(str,"modifiers")==0) *field_rtrn= F_Modifiers;
- else if (uStrCaseCmp(str,"group")==0) *field_rtrn= F_Group;
- else if (uStrCaseCmp(str,"x")==0) *field_rtrn= F_X;
- else if (uStrCaseCmp(str,"y")==0) *field_rtrn= F_Y;
- else if (uStrCaseCmp(str,"accel")==0) *field_rtrn= F_Accel;
- else if (uStrCaseCmp(str,"accelerate")==0) *field_rtrn= F_Accel;
- else if (uStrCaseCmp(str,"repeat")==0) *field_rtrn= F_Accel;
- else if (uStrCaseCmp(str,"button")==0) *field_rtrn= F_Button;
- else if (uStrCaseCmp(str,"value")==0) *field_rtrn= F_Value;
- else if (uStrCaseCmp(str,"controls")==0) *field_rtrn= F_Controls;
- else if (uStrCaseCmp(str,"ctrls")==0) *field_rtrn= F_Controls;
- else if (uStrCaseCmp(str,"type")==0) *field_rtrn= F_Type;
- else if (uStrCaseCmp(str,"count")==0) *field_rtrn= F_Count;
- else if (uStrCaseCmp(str,"screen")==0) *field_rtrn= F_Screen;
- else if (uStrCaseCmp(str,"same")==0) *field_rtrn= F_Same;
- else if (uStrCaseCmp(str,"sameserver")==0) *field_rtrn= F_Same;
- else if (uStrCaseCmp(str,"data")==0) *field_rtrn= F_Data;
- else if (uStrCaseCmp(str,"device")==0) *field_rtrn= F_Device;
- else if (uStrCaseCmp(str,"dev")==0) *field_rtrn= F_Device;
- else if (uStrCaseCmp(str,"key")==0) *field_rtrn= F_Keycode;
- else if (uStrCaseCmp(str,"keycode")==0) *field_rtrn= F_Keycode;
- else if (uStrCaseCmp(str,"kc")==0) *field_rtrn= F_Keycode;
- else if (uStrCaseCmp(str,"clearmods")==0) *field_rtrn= F_ModsToClear;
- else if (uStrCaseCmp(str,"clearmodifiers")==0) *field_rtrn= F_ModsToClear;
- else return False;
+ if (str == NULL)
+ return False;
+
+ if (uStrCaseCmp(str, "clearlocks") == 0)
+ *field_rtrn = F_ClearLocks;
+ else if (uStrCaseCmp(str, "latchtolock") == 0)
+ *field_rtrn = F_LatchToLock;
+ else if (uStrCaseCmp(str, "genkeyevent") == 0)
+ *field_rtrn = F_GenKeyEvent;
+ else if (uStrCaseCmp(str, "generatekeyevent") == 0)
+ *field_rtrn = F_GenKeyEvent;
+ else if (uStrCaseCmp(str, "report") == 0)
+ *field_rtrn = F_Report;
+ else if (uStrCaseCmp(str, "default") == 0)
+ *field_rtrn = F_Default;
+ else if (uStrCaseCmp(str, "affect") == 0)
+ *field_rtrn = F_Affect;
+ else if (uStrCaseCmp(str, "increment") == 0)
+ *field_rtrn = F_Increment;
+ else if (uStrCaseCmp(str, "mods") == 0)
+ *field_rtrn = F_Modifiers;
+ else if (uStrCaseCmp(str, "modifiers") == 0)
+ *field_rtrn = F_Modifiers;
+ else if (uStrCaseCmp(str, "group") == 0)
+ *field_rtrn = F_Group;
+ else if (uStrCaseCmp(str, "x") == 0)
+ *field_rtrn = F_X;
+ else if (uStrCaseCmp(str, "y") == 0)
+ *field_rtrn = F_Y;
+ else if (uStrCaseCmp(str, "accel") == 0)
+ *field_rtrn = F_Accel;
+ else if (uStrCaseCmp(str, "accelerate") == 0)
+ *field_rtrn = F_Accel;
+ else if (uStrCaseCmp(str, "repeat") == 0)
+ *field_rtrn = F_Accel;
+ else if (uStrCaseCmp(str, "button") == 0)
+ *field_rtrn = F_Button;
+ else if (uStrCaseCmp(str, "value") == 0)
+ *field_rtrn = F_Value;
+ else if (uStrCaseCmp(str, "controls") == 0)
+ *field_rtrn = F_Controls;
+ else if (uStrCaseCmp(str, "ctrls") == 0)
+ *field_rtrn = F_Controls;
+ else if (uStrCaseCmp(str, "type") == 0)
+ *field_rtrn = F_Type;
+ else if (uStrCaseCmp(str, "count") == 0)
+ *field_rtrn = F_Count;
+ else if (uStrCaseCmp(str, "screen") == 0)
+ *field_rtrn = F_Screen;
+ else if (uStrCaseCmp(str, "same") == 0)
+ *field_rtrn = F_Same;
+ else if (uStrCaseCmp(str, "sameserver") == 0)
+ *field_rtrn = F_Same;
+ else if (uStrCaseCmp(str, "data") == 0)
+ *field_rtrn = F_Data;
+ else if (uStrCaseCmp(str, "device") == 0)
+ *field_rtrn = F_Device;
+ else if (uStrCaseCmp(str, "dev") == 0)
+ *field_rtrn = F_Device;
+ else if (uStrCaseCmp(str, "key") == 0)
+ *field_rtrn = F_Keycode;
+ else if (uStrCaseCmp(str, "keycode") == 0)
+ *field_rtrn = F_Keycode;
+ else if (uStrCaseCmp(str, "kc") == 0)
+ *field_rtrn = F_Keycode;
+ else if (uStrCaseCmp(str, "clearmods") == 0)
+ *field_rtrn = F_ModsToClear;
+ else if (uStrCaseCmp(str, "clearmodifiers") == 0)
+ *field_rtrn = F_ModsToClear;
+ else
+ return False;
return True;
}
static char *
fieldText(unsigned field)
{
-static char buf[32];
-
- switch (field) {
- case F_ClearLocks: strcpy(buf,"clearLocks"); break;
- case F_LatchToLock: strcpy(buf,"latchToLock"); break;
- case F_GenKeyEvent: strcpy(buf,"genKeyEvent"); break;
- case F_Report: strcpy(buf,"report"); break;
- case F_Default: strcpy(buf,"default"); break;
- case F_Affect: strcpy(buf,"affect"); break;
- case F_Increment: strcpy(buf,"increment"); break;
- case F_Modifiers: strcpy(buf,"modifiers"); break;
- case F_Group: strcpy(buf,"group"); break;
- case F_X: strcpy(buf,"x"); break;
- case F_Y: strcpy(buf,"y"); break;
- case F_Accel: strcpy(buf,"accel"); break;
- case F_Button: strcpy(buf,"button"); break;
- case F_Value: strcpy(buf,"value"); break;
- case F_Controls: strcpy(buf,"controls"); break;
- case F_Type: strcpy(buf,"type"); break;
- case F_Count: strcpy(buf,"count"); break;
- case F_Screen: strcpy(buf,"screen"); break;
- case F_Same: strcpy(buf,"sameServer"); break;
- case F_Data: strcpy(buf,"data"); break;
- case F_Device: strcpy(buf,"device"); break;
- case F_Keycode: strcpy(buf,"keycode"); break;
- case F_ModsToClear: strcpy(buf,"clearmods"); break;
- default: strcpy(buf,"unknown"); break;
+ static char buf[32];
+
+ switch (field)
+ {
+ case F_ClearLocks:
+ strcpy(buf, "clearLocks");
+ break;
+ case F_LatchToLock:
+ strcpy(buf, "latchToLock");
+ break;
+ case F_GenKeyEvent:
+ strcpy(buf, "genKeyEvent");
+ break;
+ case F_Report:
+ strcpy(buf, "report");
+ break;
+ case F_Default:
+ strcpy(buf, "default");
+ break;
+ case F_Affect:
+ strcpy(buf, "affect");
+ break;
+ case F_Increment:
+ strcpy(buf, "increment");
+ break;
+ case F_Modifiers:
+ strcpy(buf, "modifiers");
+ break;
+ case F_Group:
+ strcpy(buf, "group");
+ break;
+ case F_X:
+ strcpy(buf, "x");
+ break;
+ case F_Y:
+ strcpy(buf, "y");
+ break;
+ case F_Accel:
+ strcpy(buf, "accel");
+ break;
+ case F_Button:
+ strcpy(buf, "button");
+ break;
+ case F_Value:
+ strcpy(buf, "value");
+ break;
+ case F_Controls:
+ strcpy(buf, "controls");
+ break;
+ case F_Type:
+ strcpy(buf, "type");
+ break;
+ case F_Count:
+ strcpy(buf, "count");
+ break;
+ case F_Screen:
+ strcpy(buf, "screen");
+ break;
+ case F_Same:
+ strcpy(buf, "sameServer");
+ break;
+ case F_Data:
+ strcpy(buf, "data");
+ break;
+ case F_Device:
+ strcpy(buf, "device");
+ break;
+ case F_Keycode:
+ strcpy(buf, "keycode");
+ break;
+ case F_ModsToClear:
+ strcpy(buf, "clearmods");
+ break;
+ default:
+ strcpy(buf, "unknown");
+ break;
}
return buf;
}
@@ -187,28 +299,26 @@ static char buf[32];
static Bool
ReportMismatch(unsigned action, unsigned field, const char *type)
{
- ERROR2("Value of %s field must be of type %s\n",fieldText(field),type);
+ ERROR2("Value of %s field must be of type %s\n", fieldText(field), type);
ACTION1("Action %s definition ignored\n",
- XkbActionTypeText(action,XkbMessage));
+ XkbActionTypeText(action, XkbMessage));
return False;
}
static Bool
-ReportIllegal(unsigned action,unsigned field)
+ReportIllegal(unsigned action, unsigned field)
{
ERROR2("Field %s is not defined for an action of type %s\n",
- fieldText(field),
- XkbActionTypeText(action,XkbMessage));
+ fieldText(field), XkbActionTypeText(action, XkbMessage));
ACTION("Action definition ignored\n");
return False;
}
static Bool
-ReportActionNotArray(unsigned action,unsigned field)
+ReportActionNotArray(unsigned action, unsigned field)
{
ERROR2("The %s field in the %s action is not an array\n",
- fieldText(field),
- XkbActionTypeText(action,XkbMessage));
+ fieldText(field), XkbActionTypeText(action, XkbMessage));
ACTION("Action definition ignored\n");
return False;
}
@@ -216,1014 +326,1120 @@ ReportActionNotArray(unsigned action,unsigned field)
static Bool
ReportNotFound(unsigned action, unsigned field, const char *what, char *bad)
{
- ERROR2("%s named %s not found\n",what,bad);
- ACTION2("Ignoring the %s field of an %s action\n",fieldText(field),
- XkbActionTypeText(action,XkbMessage));
+ ERROR2("%s named %s not found\n", what, bad);
+ ACTION2("Ignoring the %s field of an %s action\n", fieldText(field),
+ XkbActionTypeText(action, XkbMessage));
return False;
}
static Bool
-HandleNoAction( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleNoAction(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-CheckLatchLockFlags( unsigned action,
- unsigned field,
- ExprDef * value,
- unsigned * flags_inout)
+CheckLatchLockFlags(unsigned action,
+ unsigned field, ExprDef * value, unsigned *flags_inout)
{
-unsigned tmp;
-ExprResult result;
-
- if (field==F_ClearLocks) tmp= XkbSA_ClearLocks;
- else if (field==F_LatchToLock) tmp= XkbSA_LatchToLock;
- else return False; /* WSGO! */
- if (!ExprResolveBoolean(value,&result,NULL,NULL))
- return ReportMismatch(action,field,"boolean");
- if (result.uval) *flags_inout|= tmp;
- else *flags_inout&= ~tmp;
+ unsigned tmp;
+ ExprResult result;
+
+ if (field == F_ClearLocks)
+ tmp = XkbSA_ClearLocks;
+ else if (field == F_LatchToLock)
+ tmp = XkbSA_LatchToLock;
+ else
+ return False; /* WSGO! */
+ if (!ExprResolveBoolean(value, &result, NULL, NULL))
+ return ReportMismatch(action, field, "boolean");
+ if (result.uval)
+ *flags_inout |= tmp;
+ else
+ *flags_inout &= ~tmp;
return True;
}
static Bool
-CheckModifierField( XkbDescPtr xkb,
- unsigned action,
- ExprDef * value,
- unsigned * flags_inout,
- unsigned * mods_rtrn)
+CheckModifierField(XkbDescPtr xkb,
+ unsigned action,
+ ExprDef * value,
+ unsigned *flags_inout, unsigned *mods_rtrn)
{
-ExprResult rtrn;
-
- if (value->op==ExprIdent) {
- register char *valStr;
- valStr= XkbAtomGetString(NULL,value->value.str);
- if (valStr&&((uStrCaseCmp(valStr,"usemodmapmods")==0)||
- (uStrCaseCmp(valStr,"modmapmods")==0))) {
-
- *mods_rtrn= 0;
- *flags_inout|= XkbSA_UseModMapMods;
- return True;
- }
+ ExprResult rtrn;
+
+ if (value->op == ExprIdent)
+ {
+ register char *valStr;
+ valStr = XkbAtomGetString(NULL, value->value.str);
+ if (valStr && ((uStrCaseCmp(valStr, "usemodmapmods") == 0) ||
+ (uStrCaseCmp(valStr, "modmapmods") == 0)))
+ {
+
+ *mods_rtrn = 0;
+ *flags_inout |= XkbSA_UseModMapMods;
+ return True;
+ }
}
- if (!ExprResolveModMask(value,&rtrn,LookupVModMask,(XPointer)xkb))
- return ReportMismatch(action,F_Modifiers,"modifier mask");
- *mods_rtrn= rtrn.uval;
- *flags_inout&= ~XkbSA_UseModMapMods;
+ if (!ExprResolveModMask(value, &rtrn, LookupVModMask, (XPointer) xkb))
+ return ReportMismatch(action, F_Modifiers, "modifier mask");
+ *mods_rtrn = rtrn.uval;
+ *flags_inout &= ~XkbSA_UseModMapMods;
return True;
}
static Bool
-HandleSetLatchMods( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleSetLatchMods(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-XkbModAction * act;
-unsigned rtrn;
-unsigned t1,t2;
-
- act= (XkbModAction *)action;
- if (array_ndx!=NULL) {
- switch (field) {
- case F_ClearLocks: case F_LatchToLock:
- case F_Modifiers:
- return ReportActionNotArray(action->type,field);
- }
+ XkbModAction *act;
+ unsigned rtrn;
+ unsigned t1, t2;
+
+ act = (XkbModAction *) action;
+ if (array_ndx != NULL)
+ {
+ switch (field)
+ {
+ case F_ClearLocks:
+ case F_LatchToLock:
+ case F_Modifiers:
+ return ReportActionNotArray(action->type, field);
+ }
}
- switch (field) {
- case F_ClearLocks:
- case F_LatchToLock:
- rtrn= act->flags;
- if (CheckLatchLockFlags(action->type,field,value,&rtrn)) {
- act->flags= rtrn;
- return True;
- }
- return False;
- case F_Modifiers:
- t1= act->flags;
- if (CheckModifierField(xkb,action->type,value,&t1,&t2)) {
- act->flags= t1;
- act->real_mods= act->mask= (t2&0xff);
- t2= (t2>>8)&0xffff;
- XkbSetModActionVMods(act,t2);
- return True;
- }
- return False;
+ switch (field)
+ {
+ case F_ClearLocks:
+ case F_LatchToLock:
+ rtrn = act->flags;
+ if (CheckLatchLockFlags(action->type, field, value, &rtrn))
+ {
+ act->flags = rtrn;
+ return True;
+ }
+ return False;
+ case F_Modifiers:
+ t1 = act->flags;
+ if (CheckModifierField(xkb, action->type, value, &t1, &t2))
+ {
+ act->flags = t1;
+ act->real_mods = act->mask = (t2 & 0xff);
+ t2 = (t2 >> 8) & 0xffff;
+ XkbSetModActionVMods(act, t2);
+ return True;
+ }
+ return False;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleLockMods( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleLockMods(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-XkbModAction * act;
-unsigned t1,t2;
-
- act= (XkbModAction *)action;
- if ((array_ndx!=NULL)&&(field==F_Modifiers))
- return ReportActionNotArray(action->type,field);
- switch (field) {
- case F_Modifiers:
- t1= act->flags;
- if (CheckModifierField(xkb,action->type,value,&t1,&t2)) {
- act->flags= t1;
- act->real_mods= act->mask= (t2&0xff);
- t2= (t2>>8)&0xffff;
- XkbSetModActionVMods(act,t2);
- return True;
- }
- return False;
+ XkbModAction *act;
+ unsigned t1, t2;
+
+ act = (XkbModAction *) action;
+ if ((array_ndx != NULL) && (field == F_Modifiers))
+ return ReportActionNotArray(action->type, field);
+ switch (field)
+ {
+ case F_Modifiers:
+ t1 = act->flags;
+ if (CheckModifierField(xkb, action->type, value, &t1, &t2))
+ {
+ act->flags = t1;
+ act->real_mods = act->mask = (t2 & 0xff);
+ t2 = (t2 >> 8) & 0xffff;
+ XkbSetModActionVMods(act, t2);
+ return True;
+ }
+ return False;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static LookupEntry groupNames[] = {
- { "group1", 1 },
- { "group2", 2 },
- { "group3", 3 },
- { "group4", 4 },
- { "group5", 5 },
- { "group6", 6 },
- { "group7", 7 },
- { "group8", 8 },
- { NULL, 0 },
+ {"group1", 1},
+ {"group2", 2},
+ {"group3", 3},
+ {"group4", 4},
+ {"group5", 5},
+ {"group6", 6},
+ {"group7", 7},
+ {"group8", 8},
+ {NULL, 0},
};
static Bool
-CheckGroupField( unsigned action,
- ExprDef * value,
- unsigned * flags_inout,
- int * grp_rtrn)
+CheckGroupField(unsigned action,
+ ExprDef * value, unsigned *flags_inout, int *grp_rtrn)
{
-ExprDef * spec;
-ExprResult rtrn;
+ ExprDef *spec;
+ ExprResult rtrn;
- if ((value->op==OpNegate)||(value->op==OpUnaryPlus)) {
- *flags_inout&= ~XkbSA_GroupAbsolute;
- spec= value->value.child;
+ if ((value->op == OpNegate) || (value->op == OpUnaryPlus))
+ {
+ *flags_inout &= ~XkbSA_GroupAbsolute;
+ spec = value->value.child;
}
- else {
- *flags_inout|= XkbSA_GroupAbsolute;
- spec= value;
+ else
+ {
+ *flags_inout |= XkbSA_GroupAbsolute;
+ spec = value;
}
- if (!ExprResolveInteger(spec,&rtrn,SimpleLookup,(XPointer)groupNames))
- return ReportMismatch(action,F_Group,"integer (range 1..8)");
- if ((rtrn.ival<1)||(rtrn.ival>XkbNumKbdGroups)) {
- ERROR2("Illegal group %d (must be in the range 1..%d)\n",rtrn.ival,
- XkbNumKbdGroups);
- ACTION1("Action %s definition ignored\n",
- XkbActionTypeText(action,XkbMessage));
- return False;
+ if (!ExprResolveInteger(spec, &rtrn, SimpleLookup, (XPointer) groupNames))
+ return ReportMismatch(action, F_Group, "integer (range 1..8)");
+ if ((rtrn.ival < 1) || (rtrn.ival > XkbNumKbdGroups))
+ {
+ ERROR2("Illegal group %d (must be in the range 1..%d)\n", rtrn.ival,
+ XkbNumKbdGroups);
+ ACTION1("Action %s definition ignored\n",
+ XkbActionTypeText(action, XkbMessage));
+ return False;
}
- if (value->op==OpNegate) *grp_rtrn= -rtrn.ival;
- else if (value->op==OpUnaryPlus) *grp_rtrn= rtrn.ival;
- else *grp_rtrn= rtrn.ival-1;
+ if (value->op == OpNegate)
+ *grp_rtrn = -rtrn.ival;
+ else if (value->op == OpUnaryPlus)
+ *grp_rtrn = rtrn.ival;
+ else
+ *grp_rtrn = rtrn.ival - 1;
return True;
}
static Bool
-HandleSetLatchGroup( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleSetLatchGroup(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-XkbGroupAction * act;
-unsigned rtrn;
-unsigned t1;
-int t2;
-
- act= (XkbGroupAction *)action;
- if (array_ndx!=NULL) {
- switch (field) {
- case F_ClearLocks: case F_LatchToLock:
- case F_Group:
- return ReportActionNotArray(action->type,field);
- }
+ XkbGroupAction *act;
+ unsigned rtrn;
+ unsigned t1;
+ int t2;
+
+ act = (XkbGroupAction *) action;
+ if (array_ndx != NULL)
+ {
+ switch (field)
+ {
+ case F_ClearLocks:
+ case F_LatchToLock:
+ case F_Group:
+ return ReportActionNotArray(action->type, field);
+ }
}
- switch (field) {
- case F_ClearLocks:
- case F_LatchToLock:
- rtrn= act->flags;
- if (CheckLatchLockFlags(action->type,field,value,&rtrn)) {
- act->flags= rtrn;
- return True;
- }
- return False;
- case F_Group:
- t1= act->flags;
- if (CheckGroupField(action->type,value,&t1,&t2)) {
- act->flags= t1;
- XkbSASetGroup(act,t2);
- return True;
- }
- return False;
+ switch (field)
+ {
+ case F_ClearLocks:
+ case F_LatchToLock:
+ rtrn = act->flags;
+ if (CheckLatchLockFlags(action->type, field, value, &rtrn))
+ {
+ act->flags = rtrn;
+ return True;
+ }
+ return False;
+ case F_Group:
+ t1 = act->flags;
+ if (CheckGroupField(action->type, value, &t1, &t2))
+ {
+ act->flags = t1;
+ XkbSASetGroup(act, t2);
+ return True;
+ }
+ return False;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleLockGroup( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleLockGroup(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-XkbGroupAction * act;
-unsigned t1;
-int t2;
-
- act= (XkbGroupAction *)action;
- if ((array_ndx!=NULL) && (field==F_Group))
- return ReportActionNotArray(action->type,field);
- if (field==F_Group) {
- t1= act->flags;
- if (CheckGroupField(action->type,value,&t1,&t2)) {
- act->flags= t1;
- XkbSASetGroup(act,t2);
- return True;
- }
- return False;
+ XkbGroupAction *act;
+ unsigned t1;
+ int t2;
+
+ act = (XkbGroupAction *) action;
+ if ((array_ndx != NULL) && (field == F_Group))
+ return ReportActionNotArray(action->type, field);
+ if (field == F_Group)
+ {
+ t1 = act->flags;
+ if (CheckGroupField(action->type, value, &t1, &t2))
+ {
+ act->flags = t1;
+ XkbSASetGroup(act, t2);
+ return True;
+ }
+ return False;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleMovePtr( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleMovePtr(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbPtrAction * act;
-Bool absolute;
-
- act= (XkbPtrAction *)action;
- if ((array_ndx!=NULL)&&((field==F_X)||(field==F_Y)))
- return ReportActionNotArray(action->type,field);
-
- if ((field==F_X)||(field==F_Y)) {
- if ((value->op==OpNegate)||(value->op==OpUnaryPlus))
- absolute= False;
- else absolute= True;
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer");
- if (field==F_X) {
- if (absolute)
- act->flags|= XkbSA_MoveAbsoluteX;
- XkbSetPtrActionX(act,rtrn.ival);
- }
- else {
- if (absolute)
- act->flags|= XkbSA_MoveAbsoluteY;
- XkbSetPtrActionY(act,rtrn.ival);
- }
- return True;
+ ExprResult rtrn;
+ XkbPtrAction *act;
+ Bool absolute;
+
+ act = (XkbPtrAction *) action;
+ if ((array_ndx != NULL) && ((field == F_X) || (field == F_Y)))
+ return ReportActionNotArray(action->type, field);
+
+ if ((field == F_X) || (field == F_Y))
+ {
+ if ((value->op == OpNegate) || (value->op == OpUnaryPlus))
+ absolute = False;
+ else
+ absolute = True;
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "integer");
+ if (field == F_X)
+ {
+ if (absolute)
+ act->flags |= XkbSA_MoveAbsoluteX;
+ XkbSetPtrActionX(act, rtrn.ival);
+ }
+ else
+ {
+ if (absolute)
+ act->flags |= XkbSA_MoveAbsoluteY;
+ XkbSetPtrActionY(act, rtrn.ival);
+ }
+ return True;
}
- else if (field==F_Accel) {
- if (!ExprResolveBoolean(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"boolean");
- if (rtrn.uval) act->flags&= ~XkbSA_NoAcceleration;
- else act->flags|= XkbSA_NoAcceleration;
+ else if (field == F_Accel)
+ {
+ if (!ExprResolveBoolean(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "boolean");
+ if (rtrn.uval)
+ act->flags &= ~XkbSA_NoAcceleration;
+ else
+ act->flags |= XkbSA_NoAcceleration;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static LookupEntry btnNames[] = {
- { "button1", 1 },
- { "button2", 2 },
- { "button3", 3 },
- { "button4", 4 },
- { "button5", 5 },
- { "default", 0 },
- { NULL, 0 }
+ {"button1", 1},
+ {"button2", 2},
+ {"button3", 3},
+ {"button4", 4},
+ {"button5", 5},
+ {"default", 0},
+ {NULL, 0}
};
static LookupEntry lockWhich[] = {
- { "both", 0 },
- { "lock", XkbSA_LockNoUnlock },
- { "neither", (XkbSA_LockNoLock|XkbSA_LockNoUnlock) },
- { "unlock", XkbSA_LockNoLock },
- { NULL, 0 }
+ {"both", 0},
+ {"lock", XkbSA_LockNoUnlock},
+ {"neither", (XkbSA_LockNoLock | XkbSA_LockNoUnlock)},
+ {"unlock", XkbSA_LockNoLock},
+ {NULL, 0}
};
static Bool
-HandlePtrBtn( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandlePtrBtn(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbPtrBtnAction * act;
-
- act= (XkbPtrBtnAction *)action;
- if (field==F_Button) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveInteger(value,&rtrn,SimpleLookup,(XPointer)btnNames))
- return ReportMismatch(action->type,field,"integer (range 1..5)");
- if ((rtrn.ival<0)||(rtrn.ival>5)) {
- ERROR("Button must specify default or be in the range 1..5\n");
- ACTION1("Illegal button value %d ignored\n",rtrn.ival);
- return False;
- }
- act->button= rtrn.ival;
- return True;
+ ExprResult rtrn;
+ XkbPtrBtnAction *act;
+
+ act = (XkbPtrBtnAction *) action;
+ if (field == F_Button)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveInteger
+ (value, &rtrn, SimpleLookup, (XPointer) btnNames))
+ return ReportMismatch(action->type, field,
+ "integer (range 1..5)");
+ if ((rtrn.ival < 0) || (rtrn.ival > 5))
+ {
+ ERROR("Button must specify default or be in the range 1..5\n");
+ ACTION1("Illegal button value %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->button = rtrn.ival;
+ return True;
}
- else if ((action->type==XkbSA_LockPtrBtn)&&(field==F_Affect)) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveEnum(value,&rtrn,lockWhich))
- return ReportMismatch(action->type,field,"lock or unlock");
- act->flags&= ~(XkbSA_LockNoLock|XkbSA_LockNoUnlock);
- act->flags|= rtrn.ival;
- return True;
+ else if ((action->type == XkbSA_LockPtrBtn) && (field == F_Affect))
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveEnum(value, &rtrn, lockWhich))
+ return ReportMismatch(action->type, field, "lock or unlock");
+ act->flags &= ~(XkbSA_LockNoLock | XkbSA_LockNoUnlock);
+ act->flags |= rtrn.ival;
+ return True;
}
- else if (field==F_Count) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveInteger(value,&rtrn,SimpleLookup,(XPointer)btnNames))
- return ReportMismatch(action->type,field,"integer");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("The count field must have a value in the range 0..255\n");
- ACTION1("Illegal count %d ignored\n",rtrn.ival);
- return False;
- }
- act->count= rtrn.ival;
- return True;
+ else if (field == F_Count)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveInteger
+ (value, &rtrn, SimpleLookup, (XPointer) btnNames))
+ return ReportMismatch(action->type, field, "integer");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("The count field must have a value in the range 0..255\n");
+ ACTION1("Illegal count %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->count = rtrn.ival;
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static LookupEntry ptrDflts[] = {
- { "dfltbtn", XkbSA_AffectDfltBtn },
- { "defaultbutton", XkbSA_AffectDfltBtn },
- { "button", XkbSA_AffectDfltBtn },
- { NULL, 0 }
+ {"dfltbtn", XkbSA_AffectDfltBtn},
+ {"defaultbutton", XkbSA_AffectDfltBtn},
+ {"button", XkbSA_AffectDfltBtn},
+ {NULL, 0}
};
static Bool
-HandleSetPtrDflt( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleSetPtrDflt(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbPtrDfltAction * act;
-
- act= (XkbPtrDfltAction *)action;
- if (field==F_Affect) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveEnum(value,&rtrn,ptrDflts))
- return ReportMismatch(action->type,field,"pointer component");
- act->affect= rtrn.uval;
- return True;
+ ExprResult rtrn;
+ XkbPtrDfltAction *act;
+
+ act = (XkbPtrDfltAction *) action;
+ if (field == F_Affect)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveEnum(value, &rtrn, ptrDflts))
+ return ReportMismatch(action->type, field, "pointer component");
+ act->affect = rtrn.uval;
+ return True;
}
- else if ((field==F_Button)||(field==F_Value)) {
- ExprDef *btn;
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if ((value->op==OpNegate)||(value->op==OpUnaryPlus)) {
- act->flags&= ~XkbSA_DfltBtnAbsolute;
- btn= value->value.child;
- }
- else {
- act->flags|= XkbSA_DfltBtnAbsolute;
- btn= value;
- }
-
- if (!ExprResolveInteger(btn,&rtrn,SimpleLookup,(XPointer)btnNames))
- return ReportMismatch(action->type,field,"integer (range 1..5)");
- if ((rtrn.ival<0)||(rtrn.ival>5)) {
- ERROR("New default button value must be in the range 1..5\n");
- ACTION1("Illegal default button value %d ignored\n",rtrn.ival);
- return False;
- }
- if (rtrn.ival==0) {
- ERROR("Cannot set default pointer button to \"default\"\n");
- ACTION("Illegal default button setting ignored\n");
- return False;
- }
- if (value->op==OpNegate)
- XkbSASetPtrDfltValue(act,-rtrn.ival);
- else XkbSASetPtrDfltValue(act,rtrn.ival);
- return True;
+ else if ((field == F_Button) || (field == F_Value))
+ {
+ ExprDef *btn;
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if ((value->op == OpNegate) || (value->op == OpUnaryPlus))
+ {
+ act->flags &= ~XkbSA_DfltBtnAbsolute;
+ btn = value->value.child;
+ }
+ else
+ {
+ act->flags |= XkbSA_DfltBtnAbsolute;
+ btn = value;
+ }
+
+ if (!ExprResolveInteger
+ (btn, &rtrn, SimpleLookup, (XPointer) btnNames))
+ return ReportMismatch(action->type, field,
+ "integer (range 1..5)");
+ if ((rtrn.ival < 0) || (rtrn.ival > 5))
+ {
+ ERROR("New default button value must be in the range 1..5\n");
+ ACTION1("Illegal default button value %d ignored\n", rtrn.ival);
+ return False;
+ }
+ if (rtrn.ival == 0)
+ {
+ ERROR("Cannot set default pointer button to \"default\"\n");
+ ACTION("Illegal default button setting ignored\n");
+ return False;
+ }
+ if (value->op == OpNegate)
+ XkbSASetPtrDfltValue(act, -rtrn.ival);
+ else
+ XkbSASetPtrDfltValue(act, rtrn.ival);
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
-static LookupEntry isoNames[] = {
- { "mods", XkbSA_ISONoAffectMods },
- { "modifiers", XkbSA_ISONoAffectMods },
- { "group", XkbSA_ISONoAffectGroup },
- { "groups", XkbSA_ISONoAffectGroup },
- { "ptr", XkbSA_ISONoAffectPtr },
- { "pointer", XkbSA_ISONoAffectPtr },
- { "ctrls", XkbSA_ISONoAffectCtrls },
- { "controls", XkbSA_ISONoAffectCtrls },
- { "all", ~((unsigned)0) },
- { "none", 0 },
- { NULL, 0 },
+static LookupEntry isoNames[] = {
+ {"mods", XkbSA_ISONoAffectMods},
+ {"modifiers", XkbSA_ISONoAffectMods},
+ {"group", XkbSA_ISONoAffectGroup},
+ {"groups", XkbSA_ISONoAffectGroup},
+ {"ptr", XkbSA_ISONoAffectPtr},
+ {"pointer", XkbSA_ISONoAffectPtr},
+ {"ctrls", XkbSA_ISONoAffectCtrls},
+ {"controls", XkbSA_ISONoAffectCtrls},
+ {"all", ~((unsigned) 0)},
+ {"none", 0},
+ {NULL, 0},
};
static Bool
-HandleISOLock( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleISOLock(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbISOAction * act;
-unsigned flags,mods;
-int group;
-
- act= (XkbISOAction *)action;
- switch (field) {
- case F_Modifiers:
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- flags= act->flags;
- if (CheckModifierField(xkb,action->type,value,&flags,&mods)) {
- act->flags= flags&(~XkbSA_ISODfltIsGroup);
- act->real_mods= mods&0xff;
- mods= (mods>>8)&0xff;
- XkbSetModActionVMods(act,mods);
- return True;
- }
- return False;
- case F_Group:
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- flags= act->flags;
- if (CheckGroupField(action->type,value,&flags,&group)) {
- act->flags= flags|XkbSA_ISODfltIsGroup;
- XkbSASetGroup(act,group);
- return True;
- }
- return False;
- case F_Affect:
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,(XPointer)isoNames))
- return ReportMismatch(action->type,field,"keyboard component");
- act->affect= (~rtrn.uval)&XkbSA_ISOAffectMask;
- return True;
+ ExprResult rtrn;
+ XkbISOAction *act;
+ unsigned flags, mods;
+ int group;
+
+ act = (XkbISOAction *) action;
+ switch (field)
+ {
+ case F_Modifiers:
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ flags = act->flags;
+ if (CheckModifierField(xkb, action->type, value, &flags, &mods))
+ {
+ act->flags = flags & (~XkbSA_ISODfltIsGroup);
+ act->real_mods = mods & 0xff;
+ mods = (mods >> 8) & 0xff;
+ XkbSetModActionVMods(act, mods);
+ return True;
+ }
+ return False;
+ case F_Group:
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ flags = act->flags;
+ if (CheckGroupField(action->type, value, &flags, &group))
+ {
+ act->flags = flags | XkbSA_ISODfltIsGroup;
+ XkbSASetGroup(act, group);
+ return True;
+ }
+ return False;
+ case F_Affect:
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveMask(value, &rtrn, SimpleLookup, (XPointer) isoNames))
+ return ReportMismatch(action->type, field, "keyboard component");
+ act->affect = (~rtrn.uval) & XkbSA_ISOAffectMask;
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleSwitchScreen( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleSwitchScreen(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbSwitchScreenAction * act;
-
- act= (XkbSwitchScreenAction *)action;
- if (field==F_Screen) {
- ExprDef *scrn;
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if ((value->op==OpNegate)||(value->op==OpUnaryPlus)) {
- act->flags&= ~XkbSA_SwitchAbsolute;
- scrn= value->value.child;
- }
- else {
- act->flags|= XkbSA_SwitchAbsolute;
- scrn= value;
- }
-
- if (!ExprResolveInteger(scrn,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer (0..255)");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("Screen index must be in the range 1..255\n");
- ACTION1("Illegal screen value %d ignored\n",rtrn.ival);
- return False;
- }
- if (value->op==OpNegate)
- XkbSASetScreen(act,-rtrn.ival);
- else XkbSASetScreen(act,rtrn.ival);
- return True;
+ ExprResult rtrn;
+ XkbSwitchScreenAction *act;
+
+ act = (XkbSwitchScreenAction *) action;
+ if (field == F_Screen)
+ {
+ ExprDef *scrn;
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if ((value->op == OpNegate) || (value->op == OpUnaryPlus))
+ {
+ act->flags &= ~XkbSA_SwitchAbsolute;
+ scrn = value->value.child;
+ }
+ else
+ {
+ act->flags |= XkbSA_SwitchAbsolute;
+ scrn = value;
+ }
+
+ if (!ExprResolveInteger(scrn, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "integer (0..255)");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("Screen index must be in the range 1..255\n");
+ ACTION1("Illegal screen value %d ignored\n", rtrn.ival);
+ return False;
+ }
+ if (value->op == OpNegate)
+ XkbSASetScreen(act, -rtrn.ival);
+ else
+ XkbSASetScreen(act, rtrn.ival);
+ return True;
}
- else if (field==F_Same) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveBoolean(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"boolean");
- if (rtrn.uval) act->flags&= ~XkbSA_SwitchApplication;
- else act->flags|= XkbSA_SwitchApplication;
- return True;
+ else if (field == F_Same)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveBoolean(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "boolean");
+ if (rtrn.uval)
+ act->flags &= ~XkbSA_SwitchApplication;
+ else
+ act->flags |= XkbSA_SwitchApplication;
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
-LookupEntry ctrlNames[]= {
- { "repeatkeys", XkbRepeatKeysMask },
- { "repeat", XkbRepeatKeysMask },
- { "autorepeat", XkbRepeatKeysMask },
- { "slowkeys", XkbSlowKeysMask },
- { "bouncekeys", XkbBounceKeysMask },
- { "stickykeys", XkbStickyKeysMask },
- { "mousekeys", XkbMouseKeysMask },
- { "mousekeysaccel", XkbMouseKeysAccelMask },
- { "accessxkeys", XkbAccessXKeysMask },
- { "accessxtimeout", XkbAccessXTimeoutMask },
- { "accessxfeedback", XkbAccessXFeedbackMask },
- { "audiblebell", XkbAudibleBellMask },
- { "overlay1", XkbOverlay1Mask },
- { "overlay2", XkbOverlay2Mask },
- { "ignoregrouplock", XkbIgnoreGroupLockMask },
- { "all", XkbAllBooleanCtrlsMask },
- { "none", 0 },
- { NULL, 0 }
+LookupEntry ctrlNames[] = {
+ {"repeatkeys", XkbRepeatKeysMask}
+ ,
+ {"repeat", XkbRepeatKeysMask}
+ ,
+ {"autorepeat", XkbRepeatKeysMask}
+ ,
+ {"slowkeys", XkbSlowKeysMask}
+ ,
+ {"bouncekeys", XkbBounceKeysMask}
+ ,
+ {"stickykeys", XkbStickyKeysMask}
+ ,
+ {"mousekeys", XkbMouseKeysMask}
+ ,
+ {"mousekeysaccel", XkbMouseKeysAccelMask}
+ ,
+ {"accessxkeys", XkbAccessXKeysMask}
+ ,
+ {"accessxtimeout", XkbAccessXTimeoutMask}
+ ,
+ {"accessxfeedback", XkbAccessXFeedbackMask}
+ ,
+ {"audiblebell", XkbAudibleBellMask}
+ ,
+ {"overlay1", XkbOverlay1Mask}
+ ,
+ {"overlay2", XkbOverlay2Mask}
+ ,
+ {"ignoregrouplock", XkbIgnoreGroupLockMask}
+ ,
+ {"all", XkbAllBooleanCtrlsMask}
+ ,
+ {"none", 0}
+ ,
+ {NULL, 0}
};
static Bool
-HandleSetLockControls( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleSetLockControls(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbCtrlsAction * act;
-
- act= (XkbCtrlsAction *)action;
- if (field==F_Controls) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,(XPointer)ctrlNames))
- return ReportMismatch(action->type,field,"controls mask");
- XkbActionSetCtrls(act,rtrn.uval);
- return True;
+ ExprResult rtrn;
+ XkbCtrlsAction *act;
+
+ act = (XkbCtrlsAction *) action;
+ if (field == F_Controls)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveMask
+ (value, &rtrn, SimpleLookup, (XPointer) ctrlNames))
+ return ReportMismatch(action->type, field, "controls mask");
+ XkbActionSetCtrls(act, rtrn.uval);
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
-static LookupEntry evNames[]= {
- { "press", XkbSA_MessageOnPress },
- { "keypress", XkbSA_MessageOnPress },
- { "release", XkbSA_MessageOnRelease },
- { "keyrelease", XkbSA_MessageOnRelease },
- { "all", XkbSA_MessageOnPress|XkbSA_MessageOnRelease },
- { "none", 0 },
- { NULL, 0 }
+static LookupEntry evNames[] = {
+ {"press", XkbSA_MessageOnPress},
+ {"keypress", XkbSA_MessageOnPress},
+ {"release", XkbSA_MessageOnRelease},
+ {"keyrelease", XkbSA_MessageOnRelease},
+ {"all", XkbSA_MessageOnPress | XkbSA_MessageOnRelease},
+ {"none", 0},
+ {NULL, 0}
};
static Bool
-HandleActionMessage( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleActionMessage(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbMessageAction * act;
-
- act= (XkbMessageAction *)action;
- switch (field) {
- case F_Report:
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,(XPointer)evNames))
- return ReportMismatch(action->type,field,"key event mask");
- act->flags&= ~(XkbSA_MessageOnPress|XkbSA_MessageOnRelease);
- act->flags= rtrn.uval&(XkbSA_MessageOnPress|XkbSA_MessageOnRelease);
- return True;
- case F_GenKeyEvent:
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveBoolean(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"boolean");
- if (rtrn.uval) act->flags|= XkbSA_MessageGenKeyEvent;
- else act->flags&= ~XkbSA_MessageGenKeyEvent;
- return True;
- case F_Data:
- if (array_ndx==NULL) {
- if (!ExprResolveString(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"string");
- else {
- int len= strlen(rtrn.str);
- if ((len<1)||(len>6)) {
- WARN("An action message can hold only 6 bytes\n");
- ACTION1("Extra %d bytes ignored\n",len-6);
- }
- strncpy((char *)act->message,rtrn.str,6);
- }
- return True;
- }
- else {
- unsigned ndx;
- if (!ExprResolveInteger(array_ndx,&rtrn,NULL,NULL)) {
- ERROR("Array subscript must be integer\n");
- ACTION("Illegal subscript ignored\n");
- return False;
- }
- ndx= rtrn.uval;
- if (ndx>5) {
- ERROR("An action message is at most 6 bytes long\n");
- ACTION1("Attempt to use data[%d] ignored\n",ndx);
- return False;
- }
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("Message data must be in the range 0..255\n");
- ACTION1("Illegal datum %d ignored\n",rtrn.ival);
- return False;
- }
- act->message[ndx]= rtrn.uval;
- }
- return True;
+ ExprResult rtrn;
+ XkbMessageAction *act;
+
+ act = (XkbMessageAction *) action;
+ switch (field)
+ {
+ case F_Report:
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveMask(value, &rtrn, SimpleLookup, (XPointer) evNames))
+ return ReportMismatch(action->type, field, "key event mask");
+ act->flags &= ~(XkbSA_MessageOnPress | XkbSA_MessageOnRelease);
+ act->flags =
+ rtrn.uval & (XkbSA_MessageOnPress | XkbSA_MessageOnRelease);
+ return True;
+ case F_GenKeyEvent:
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveBoolean(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "boolean");
+ if (rtrn.uval)
+ act->flags |= XkbSA_MessageGenKeyEvent;
+ else
+ act->flags &= ~XkbSA_MessageGenKeyEvent;
+ return True;
+ case F_Data:
+ if (array_ndx == NULL)
+ {
+ if (!ExprResolveString(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "string");
+ else
+ {
+ int len = strlen(rtrn.str);
+ if ((len < 1) || (len > 6))
+ {
+ WARN("An action message can hold only 6 bytes\n");
+ ACTION1("Extra %d bytes ignored\n", len - 6);
+ }
+ strncpy((char *) act->message, rtrn.str, 6);
+ }
+ return True;
+ }
+ else
+ {
+ unsigned ndx;
+ if (!ExprResolveInteger(array_ndx, &rtrn, NULL, NULL))
+ {
+ ERROR("Array subscript must be integer\n");
+ ACTION("Illegal subscript ignored\n");
+ return False;
+ }
+ ndx = rtrn.uval;
+ if (ndx > 5)
+ {
+ ERROR("An action message is at most 6 bytes long\n");
+ ACTION1("Attempt to use data[%d] ignored\n", ndx);
+ return False;
+ }
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "integer");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("Message data must be in the range 0..255\n");
+ ACTION1("Illegal datum %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->message[ndx] = rtrn.uval;
+ }
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleRedirectKey( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleRedirectKey(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbRedirectKeyAction * act;
-unsigned t1,t2,vmods,vmask;
-unsigned long tmp;
-
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
-
- act= (XkbRedirectKeyAction *)action;
- switch (field) {
- case F_Keycode:
- if (!ExprResolveKeyName(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"key name");
- tmp= KeyNameToLong(rtrn.keyName.name);
- if (!FindNamedKey(xkb,tmp,&t1,True,CreateKeyNames(xkb),0)) {
- return ReportNotFound(action->type,field,"Key",
- XkbKeyNameText(rtrn.keyName.name,XkbMessage));
- }
- act->new_key= t1;
- return True;
- case F_ModsToClear:
- case F_Modifiers:
- t1= 0;
- if (CheckModifierField(xkb,action->type,value,&t1,&t2)) {
- act->mods_mask|= (t2&0xff);
- if (field==F_Modifiers)
- act->mods|= (t2&0xff);
- else act->mods&= ~(t2&0xff);
-
- t2= (t2>>8)&0xffff;
- vmods= XkbSARedirectVMods(act);
- vmask= XkbSARedirectVModsMask(act);
- vmask|= t2;
- if (field==F_Modifiers)
- vmods|= t2;
- else vmods&= ~t2;
- XkbSARedirectSetVMods(act,vmods);
- XkbSARedirectSetVModsMask(act,vmask);
- return True;
- }
- return True;
+ ExprResult rtrn;
+ XkbRedirectKeyAction *act;
+ unsigned t1, t2, vmods, vmask;
+ unsigned long tmp;
+
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+
+ act = (XkbRedirectKeyAction *) action;
+ switch (field)
+ {
+ case F_Keycode:
+ if (!ExprResolveKeyName(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "key name");
+ tmp = KeyNameToLong(rtrn.keyName.name);
+ if (!FindNamedKey(xkb, tmp, &t1, True, CreateKeyNames(xkb), 0))
+ {
+ return ReportNotFound(action->type, field, "Key",
+ XkbKeyNameText(rtrn.keyName.name,
+ XkbMessage));
+ }
+ act->new_key = t1;
+ return True;
+ case F_ModsToClear:
+ case F_Modifiers:
+ t1 = 0;
+ if (CheckModifierField(xkb, action->type, value, &t1, &t2))
+ {
+ act->mods_mask |= (t2 & 0xff);
+ if (field == F_Modifiers)
+ act->mods |= (t2 & 0xff);
+ else
+ act->mods &= ~(t2 & 0xff);
+
+ t2 = (t2 >> 8) & 0xffff;
+ vmods = XkbSARedirectVMods(act);
+ vmask = XkbSARedirectVModsMask(act);
+ vmask |= t2;
+ if (field == F_Modifiers)
+ vmods |= t2;
+ else
+ vmods &= ~t2;
+ XkbSARedirectSetVMods(act, vmods);
+ XkbSARedirectSetVModsMask(act, vmask);
+ return True;
+ }
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleDeviceBtn( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleDeviceBtn(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-XkbDeviceBtnAction * act;
-
- act= (XkbDeviceBtnAction *)action;
- if (field==F_Button) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer (range 1..255)");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("Button must specify default or be in the range 1..255\n");
- ACTION1("Illegal button value %d ignored\n",rtrn.ival);
- return False;
- }
- act->button= rtrn.ival;
- return True;
+ ExprResult rtrn;
+ XkbDeviceBtnAction *act;
+
+ act = (XkbDeviceBtnAction *) action;
+ if (field == F_Button)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field,
+ "integer (range 1..255)");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("Button must specify default or be in the range 1..255\n");
+ ACTION1("Illegal button value %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->button = rtrn.ival;
+ return True;
}
- else if ((action->type==XkbSA_LockDeviceBtn)&&(field==F_Affect)) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveEnum(value,&rtrn,lockWhich))
- return ReportMismatch(action->type,field,"lock or unlock");
- act->flags&= ~(XkbSA_LockNoLock|XkbSA_LockNoUnlock);
- act->flags|= rtrn.ival;
- return True;
+ else if ((action->type == XkbSA_LockDeviceBtn) && (field == F_Affect))
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveEnum(value, &rtrn, lockWhich))
+ return ReportMismatch(action->type, field, "lock or unlock");
+ act->flags &= ~(XkbSA_LockNoLock | XkbSA_LockNoUnlock);
+ act->flags |= rtrn.ival;
+ return True;
}
- else if (field==F_Count) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveInteger(value,&rtrn,SimpleLookup,(XPointer)btnNames))
- return ReportMismatch(action->type,field,"integer");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("The count field must have a value in the range 0..255\n");
- ACTION1("Illegal count %d ignored\n",rtrn.ival);
- return False;
- }
- act->count= rtrn.ival;
- return True;
+ else if (field == F_Count)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveInteger
+ (value, &rtrn, SimpleLookup, (XPointer) btnNames))
+ return ReportMismatch(action->type, field, "integer");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("The count field must have a value in the range 0..255\n");
+ ACTION1("Illegal count %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->count = rtrn.ival;
+ return True;
}
- else if (field==F_Device) {
- if (array_ndx!=NULL)
- return ReportActionNotArray(action->type,field);
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer (range 1..255)");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("Device must specify default or be in the range 1..255\n");
- ACTION1("Illegal device value %d ignored\n",rtrn.ival);
- return False;
- }
- act->device= rtrn.ival;
- return True;
+ else if (field == F_Device)
+ {
+ if (array_ndx != NULL)
+ return ReportActionNotArray(action->type, field);
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field,
+ "integer (range 1..255)");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("Device must specify default or be in the range 1..255\n");
+ ACTION1("Illegal device value %d ignored\n", rtrn.ival);
+ return False;
+ }
+ act->device = rtrn.ival;
+ return True;
}
- return ReportIllegal(action->type,field);
+ return ReportIllegal(action->type, field);
}
static Bool
-HandleDeviceValuator( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandleDeviceValuator(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
#if 0
-ExprResult rtrn;
-XkbDeviceValuatorAction * act;
+ ExprResult rtrn;
+ XkbDeviceValuatorAction *act;
- act= (XkbDeviceValuatorAction *)action;
+ act = (XkbDeviceValuatorAction *) action;
/* XXX - Not yet implemented */
#endif
return False;
}
static Bool
-HandlePrivate( XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned field,
- ExprDef * array_ndx,
- ExprDef * value)
+HandlePrivate(XkbDescPtr xkb,
+ XkbAnyAction * action,
+ unsigned field, ExprDef * array_ndx, ExprDef * value)
{
-ExprResult rtrn;
-
- switch (field) {
- case F_Type:
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(PrivateAction,field,"integer");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("Private action type must be in the range 0..255\n");
- ACTION1("Illegal type %d ignored\n",rtrn.ival);
- return False;
- }
- action->type= rtrn.uval;
- return True;
- case F_Data:
- if (array_ndx==NULL) {
- if (!ExprResolveString(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"string");
- else {
- int len= strlen(rtrn.str);
- if ((len<1)||(len>7)) {
- WARN("A private action has 7 data bytes\n");
- ACTION1("Extra %d bytes ignored\n",len-6);
- return False;
- }
- strncpy((char *)action->data,rtrn.str,7);
- }
- return True;
- }
- else {
- unsigned ndx;
- if (!ExprResolveInteger(array_ndx,&rtrn,NULL,NULL)) {
- ERROR("Array subscript must be integer\n");
- ACTION("Illegal subscript ignored\n");
- return False;
- }
- ndx= rtrn.uval;
- if (ndx>6) {
- ERROR("The data for a private action is 7 bytes long\n");
- ACTION1("Attempt to use data[%d] ignored\n",ndx);
- return False;
- }
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportMismatch(action->type,field,"integer");
- if ((rtrn.ival<0)||(rtrn.ival>255)) {
- ERROR("All data for a private action must be 0..255\n");
- ACTION1("Illegal datum %d ignored\n",rtrn.ival);
- return False;
- }
- action->data[ndx]= rtrn.uval;
- return True;
- }
+ ExprResult rtrn;
+
+ switch (field)
+ {
+ case F_Type:
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(PrivateAction, field, "integer");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("Private action type must be in the range 0..255\n");
+ ACTION1("Illegal type %d ignored\n", rtrn.ival);
+ return False;
+ }
+ action->type = rtrn.uval;
+ return True;
+ case F_Data:
+ if (array_ndx == NULL)
+ {
+ if (!ExprResolveString(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "string");
+ else
+ {
+ int len = strlen(rtrn.str);
+ if ((len < 1) || (len > 7))
+ {
+ WARN("A private action has 7 data bytes\n");
+ ACTION1("Extra %d bytes ignored\n", len - 6);
+ return False;
+ }
+ strncpy((char *) action->data, rtrn.str, 7);
+ }
+ return True;
+ }
+ else
+ {
+ unsigned ndx;
+ if (!ExprResolveInteger(array_ndx, &rtrn, NULL, NULL))
+ {
+ ERROR("Array subscript must be integer\n");
+ ACTION("Illegal subscript ignored\n");
+ return False;
+ }
+ ndx = rtrn.uval;
+ if (ndx > 6)
+ {
+ ERROR("The data for a private action is 7 bytes long\n");
+ ACTION1("Attempt to use data[%d] ignored\n", ndx);
+ return False;
+ }
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportMismatch(action->type, field, "integer");
+ if ((rtrn.ival < 0) || (rtrn.ival > 255))
+ {
+ ERROR("All data for a private action must be 0..255\n");
+ ACTION1("Illegal datum %d ignored\n", rtrn.ival);
+ return False;
+ }
+ action->data[ndx] = rtrn.uval;
+ return True;
+ }
}
- return ReportIllegal(PrivateAction,field);
+ return ReportIllegal(PrivateAction, field);
}
-typedef Bool (*actionHandler)(
- XkbDescPtr /* xkb */,
- XkbAnyAction * /* action */,
- unsigned /* field */,
- ExprDef * /* array_ndx */,
- ExprDef * /* value */
-);
-
-static actionHandler handleAction[XkbSA_NumActions+1] = {
- HandleNoAction /* NoAction */,
- HandleSetLatchMods /* SetMods */,
- HandleSetLatchMods /* LatchMods */,
- HandleLockMods /* LockMods */,
- HandleSetLatchGroup /* SetGroup */,
- HandleSetLatchGroup /* LatchGroup */,
- HandleLockGroup /* LockGroup */,
- HandleMovePtr /* MovePtr */,
- HandlePtrBtn /* PtrBtn */,
- HandlePtrBtn /* LockPtrBtn */,
- HandleSetPtrDflt /* SetPtrDflt */,
- HandleISOLock /* ISOLock */,
- HandleNoAction /* Terminate */,
- HandleSwitchScreen /* SwitchScreen */,
- HandleSetLockControls /* SetControls */,
- HandleSetLockControls /* LockControls */,
- HandleActionMessage /* ActionMessage*/,
- HandleRedirectKey /* RedirectKey */,
- HandleDeviceBtn /* DeviceBtn */,
- HandleDeviceBtn /* LockDeviceBtn*/,
- HandleDeviceValuator /* DeviceValuatr*/,
- HandlePrivate /* Private */
+typedef Bool(*actionHandler) (XkbDescPtr /* xkb */ ,
+ XkbAnyAction * /* action */ ,
+ unsigned /* field */ ,
+ ExprDef * /* array_ndx */ ,
+ ExprDef * /* value */
+ );
+
+static actionHandler handleAction[XkbSA_NumActions + 1] = {
+ HandleNoAction /* NoAction */ ,
+ HandleSetLatchMods /* SetMods */ ,
+ HandleSetLatchMods /* LatchMods */ ,
+ HandleLockMods /* LockMods */ ,
+ HandleSetLatchGroup /* SetGroup */ ,
+ HandleSetLatchGroup /* LatchGroup */ ,
+ HandleLockGroup /* LockGroup */ ,
+ HandleMovePtr /* MovePtr */ ,
+ HandlePtrBtn /* PtrBtn */ ,
+ HandlePtrBtn /* LockPtrBtn */ ,
+ HandleSetPtrDflt /* SetPtrDflt */ ,
+ HandleISOLock /* ISOLock */ ,
+ HandleNoAction /* Terminate */ ,
+ HandleSwitchScreen /* SwitchScreen */ ,
+ HandleSetLockControls /* SetControls */ ,
+ HandleSetLockControls /* LockControls */ ,
+ HandleActionMessage /* ActionMessage */ ,
+ HandleRedirectKey /* RedirectKey */ ,
+ HandleDeviceBtn /* DeviceBtn */ ,
+ HandleDeviceBtn /* LockDeviceBtn */ ,
+ HandleDeviceValuator /* DeviceValuatr */ ,
+ HandlePrivate /* Private */
};
/***====================================================================***/
static void
-ApplyActionFactoryDefaults(XkbAction *action)
+ApplyActionFactoryDefaults(XkbAction * action)
{
- if (action->type==XkbSA_SetPtrDflt) { /* increment default button */
- action->dflt.affect= XkbSA_AffectDfltBtn;
- action->dflt.flags= 0;
- XkbSASetPtrDfltValue(&action->dflt,1);
+ if (action->type == XkbSA_SetPtrDflt)
+ { /* increment default button */
+ action->dflt.affect = XkbSA_AffectDfltBtn;
+ action->dflt.flags = 0;
+ XkbSASetPtrDfltValue(&action->dflt, 1);
}
- else if (action->type==XkbSA_ISOLock) {
- action->iso.real_mods= LockMask;
+ else if (action->type == XkbSA_ISOLock)
+ {
+ action->iso.real_mods = LockMask;
}
return;
}
-int
-HandleActionDef( ExprDef * def,
- XkbDescPtr xkb,
- XkbAnyAction * action,
- unsigned mergeMode,
- ActionInfo * info)
+int
+HandleActionDef(ExprDef * def,
+ XkbDescPtr xkb,
+ XkbAnyAction * action, unsigned mergeMode, ActionInfo * info)
{
-ExprDef * arg;
-register char * str;
-unsigned tmp,hndlrType;
+ ExprDef *arg;
+ register char *str;
+ unsigned tmp, hndlrType;
if (!actionsInitialized)
- ActionsInit();
+ ActionsInit();
- if (def->op!=ExprActionDecl) {
- ERROR1("Expected an action definition, found %s\n",exprOpText(def->op));
- return False;
+ if (def->op != ExprActionDecl)
+ {
+ ERROR1("Expected an action definition, found %s\n",
+ exprOpText(def->op));
+ return False;
}
- str= XkbAtomGetString(NULL,def->value.action.name);
- if (!str) {
- WSGO("Missing name in action definition!!\n");
- return False;
+ str = XkbAtomGetString(NULL, def->value.action.name);
+ if (!str)
+ {
+ WSGO("Missing name in action definition!!\n");
+ return False;
}
- if (!stringToAction(str,&tmp)) {
- ERROR1("Unknown action %s\n",str);
- return False;
+ if (!stringToAction(str, &tmp))
+ {
+ ERROR1("Unknown action %s\n", str);
+ return False;
}
- action->type= hndlrType= tmp;
- if (action->type!=XkbSA_NoAction) {
- ApplyActionFactoryDefaults((XkbAction *)action);
- while (info) {
- if ((info->action==XkbSA_NoAction)||(info->action==hndlrType)) {
- if (!(*handleAction[hndlrType])(xkb,action,
- info->field,info->array_ndx,
- info->value)) {
- return False;
- }
- }
- info= info->next;
- }
+ action->type = hndlrType = tmp;
+ if (action->type != XkbSA_NoAction)
+ {
+ ApplyActionFactoryDefaults((XkbAction *) action);
+ while (info)
+ {
+ if ((info->action == XkbSA_NoAction)
+ || (info->action == hndlrType))
+ {
+ if (!(*handleAction[hndlrType]) (xkb, action,
+ info->field,
+ info->array_ndx,
+ info->value))
+ {
+ return False;
+ }
+ }
+ info = info->next;
+ }
}
- for (arg=def->value.action.args;arg!=NULL;arg=(ExprDef*)arg->common.next) {
- ExprDef *field,*value,*arrayRtrn;
- ExprResult elemRtrn,fieldRtrn;
- unsigned fieldNdx;
-
- if (arg->op==OpAssign) {
- field= arg->value.binary.left;
- value= arg->value.binary.right;
- }
- else {
- if ((arg->op==OpNot)||(arg->op==OpInvert)) {
- field= arg->value.child;
- value= &constFalse;
- }
- else {
- field= arg;
- value= &constTrue;
- }
- }
- if (!ExprResolveLhs(field,&elemRtrn,&fieldRtrn,&arrayRtrn))
- return False; /* internal error -- already reported */
-
- if (elemRtrn.str!=NULL) {
- ERROR("Cannot change defaults in an action definition\n");
- ACTION2("Ignoring attempt to change %s.%s\n",elemRtrn.str,
- fieldRtrn.str);
- return False;
- }
- if (!stringToField(fieldRtrn.str,&fieldNdx)) {
- ERROR1("Unknown field name %s\n",uStringText(fieldRtrn.str));
- return False;
- }
- if (!(*handleAction[hndlrType])(xkb,action,fieldNdx,arrayRtrn,value)) {
- return False;
- }
+ for (arg = def->value.action.args; arg != NULL;
+ arg = (ExprDef *) arg->common.next)
+ {
+ ExprDef *field, *value, *arrayRtrn;
+ ExprResult elemRtrn, fieldRtrn;
+ unsigned fieldNdx;
+
+ if (arg->op == OpAssign)
+ {
+ field = arg->value.binary.left;
+ value = arg->value.binary.right;
+ }
+ else
+ {
+ if ((arg->op == OpNot) || (arg->op == OpInvert))
+ {
+ field = arg->value.child;
+ value = &constFalse;
+ }
+ else
+ {
+ field = arg;
+ value = &constTrue;
+ }
+ }
+ if (!ExprResolveLhs(field, &elemRtrn, &fieldRtrn, &arrayRtrn))
+ return False; /* internal error -- already reported */
+
+ if (elemRtrn.str != NULL)
+ {
+ ERROR("Cannot change defaults in an action definition\n");
+ ACTION2("Ignoring attempt to change %s.%s\n", elemRtrn.str,
+ fieldRtrn.str);
+ return False;
+ }
+ if (!stringToField(fieldRtrn.str, &fieldNdx))
+ {
+ ERROR1("Unknown field name %s\n", uStringText(fieldRtrn.str));
+ return False;
+ }
+ if (!(*handleAction[hndlrType])
+ (xkb, action, fieldNdx, arrayRtrn, value))
+ {
+ return False;
+ }
}
return True;
}
/***====================================================================***/
-int
-SetActionField( XkbDescPtr xkb,
- char * elem,
- char * field,
- ExprDef * array_ndx,
- ExprDef * value,
- ActionInfo ** info_rtrn)
+int
+SetActionField(XkbDescPtr xkb,
+ char *elem,
+ char *field,
+ ExprDef * array_ndx, ExprDef * value, ActionInfo ** info_rtrn)
{
-ActionInfo *new,*old;
+ ActionInfo *new, *old;
if (!actionsInitialized)
- ActionsInit();
+ ActionsInit();
- new= uTypedAlloc(ActionInfo);
- if (new==NULL) {
- WSGO("Couldn't allocate space for action default\n");
- return False;
+ new = uTypedAlloc(ActionInfo);
+ if (new == NULL)
+ {
+ WSGO("Couldn't allocate space for action default\n");
+ return False;
}
- if (uStrCaseCmp(elem,"action")==0)
- new->action= XkbSA_NoAction;
- else {
- if (!stringToAction(elem,&new->action))
- return False;
- if (new->action==XkbSA_NoAction) {
- ERROR1("\"%s\" is not a valid field in a NoAction action\n",field);
- return False;
- }
+ if (uStrCaseCmp(elem, "action") == 0)
+ new->action = XkbSA_NoAction;
+ else
+ {
+ if (!stringToAction(elem, &new->action))
+ return False;
+ if (new->action == XkbSA_NoAction)
+ {
+ ERROR1("\"%s\" is not a valid field in a NoAction action\n",
+ field);
+ return False;
+ }
}
- if (!stringToField(field,&new->field)) {
- ERROR1("\"%s\" is not a legal field name\n",field);
- return False;
+ if (!stringToField(field, &new->field))
+ {
+ ERROR1("\"%s\" is not a legal field name\n", field);
+ return False;
}
- new->array_ndx= array_ndx;
- new->value= value;
- new->next= NULL;
- old= *info_rtrn;
- while ((old)&&(old->next))
- old= old->next;
- if (old==NULL) *info_rtrn= new;
- else old->next= new;
+ new->array_ndx = array_ndx;
+ new->value = value;
+ new->next = NULL;
+ old = *info_rtrn;
+ while ((old) && (old->next))
+ old = old->next;
+ if (old == NULL)
+ *info_rtrn = new;
+ else
+ old->next = new;
return True;
}
@@ -1232,21 +1448,21 @@ ActionInfo *new,*old;
void
ActionsInit(void)
{
- if (!actionsInitialized) {
- bzero((char *)&constTrue,sizeof(constTrue));
- bzero((char *)&constFalse,sizeof(constFalse));
- constTrue.common.stmtType= StmtExpr;
- constTrue.common.next= NULL;
- constTrue.op= ExprIdent;
- constTrue.type= TypeBoolean;
- constTrue.value.str= XkbInternAtom(NULL,"true",False);
- constFalse.common.stmtType= StmtExpr;
- constFalse.common.next= NULL;
- constFalse.op= ExprIdent;
- constFalse.type= TypeBoolean;
- constFalse.value.str= XkbInternAtom(NULL,"false",False);
- actionsInitialized= 1;
+ if (!actionsInitialized)
+ {
+ bzero((char *) &constTrue, sizeof(constTrue));
+ bzero((char *) &constFalse, sizeof(constFalse));
+ constTrue.common.stmtType = StmtExpr;
+ constTrue.common.next = NULL;
+ constTrue.op = ExprIdent;
+ constTrue.type = TypeBoolean;
+ constTrue.value.str = XkbInternAtom(NULL, "true", False);
+ constFalse.common.stmtType = StmtExpr;
+ constFalse.common.next = NULL;
+ constFalse.op = ExprIdent;
+ constFalse.type = TypeBoolean;
+ constFalse.value.str = XkbInternAtom(NULL, "false", False);
+ actionsInitialized = 1;
}
return;
}
-
diff --git a/app/xkbcomp/action.h b/app/xkbcomp/action.h
index 4a1166420..2fb7a5eb9 100644
--- a/app/xkbcomp/action.h
+++ b/app/xkbcomp/action.h
@@ -1,4 +1,3 @@
-/* $Xorg: action.h,v 1.3 2000/08/17 19:54:30 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
#ifndef ACTION_H
#define ACTION_H 1
@@ -57,34 +55,31 @@
#define PrivateAction (XkbSA_LastAction+1)
-typedef struct _ActionInfo {
- unsigned action;
- unsigned field;
- ExprDef * array_ndx;
- ExprDef * value;
- struct _ActionInfo * next;
+typedef struct _ActionInfo
+{
+ unsigned action;
+ unsigned field;
+ ExprDef *array_ndx;
+ ExprDef *value;
+ struct _ActionInfo *next;
} ActionInfo;
-extern int HandleActionDef(
- ExprDef * /* def */,
- XkbDescPtr /* xkb */,
- XkbAnyAction * /* action */,
- unsigned /* mergeMode */,
- ActionInfo * /* info */
-);
+extern int HandleActionDef(ExprDef * /* def */ ,
+ XkbDescPtr /* xkb */ ,
+ XkbAnyAction * /* action */ ,
+ unsigned /* mergeMode */ ,
+ ActionInfo * /* info */
+ );
-extern int SetActionField(
- XkbDescPtr /* xkb */,
- char * /* elem */,
- char * /* field */,
- ExprDef * /* index */,
- ExprDef * /* value */,
- ActionInfo ** /* info_rtrn */
-);
+extern int SetActionField(XkbDescPtr /* xkb */ ,
+ char * /* elem */ ,
+ char * /* field */ ,
+ ExprDef * /* index */ ,
+ ExprDef * /* value */ ,
+ ActionInfo ** /* info_rtrn */
+ );
-extern void ActionsInit(
- void
-);
+extern void ActionsInit(void);
extern LookupEntry ctrlNames[];
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;
}
diff --git a/app/xkbcomp/alias.h b/app/xkbcomp/alias.h
index fd0338847..b6fac5bfa 100644
--- a/app/xkbcomp/alias.h
+++ b/app/xkbcomp/alias.h
@@ -1,4 +1,3 @@
-/* $Xorg: alias.h,v 1.3 2000/08/17 19:54:30 cpqbld Exp $ */
/************************************************************
Copyright (c) 1995 by Silicon Graphics Computer Systems, Inc.
@@ -24,38 +23,34 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
#ifndef ALIAS_H
#define ALIAS_H 1
-typedef struct _AliasInfo {
- CommonInfo def;
- char alias[XkbKeyNameLength+1];
- char real[XkbKeyNameLength+1];
+typedef struct _AliasInfo
+{
+ CommonInfo def;
+ char alias[XkbKeyNameLength + 1];
+ char real[XkbKeyNameLength + 1];
} AliasInfo;
-extern int HandleAliasDef(
- KeyAliasDef * /* def */,
- unsigned /* merge */,
- unsigned /* file_id */,
- AliasInfo ** /* info */
-);
-
-extern void ClearAliases(
- AliasInfo ** /* info */
-);
-
-extern Bool MergeAliases(
- AliasInfo ** /* into */,
- AliasInfo ** /* merge */,
- unsigned /* how_merge */
-);
-
-extern int ApplyAliases(
- XkbDescPtr /* xkb */,
- Bool /* toGeom */,
- AliasInfo ** /* info */
-);
+extern int HandleAliasDef(KeyAliasDef * /* def */ ,
+ unsigned /* merge */ ,
+ unsigned /* file_id */ ,
+ AliasInfo ** /* info */
+ );
+
+extern void ClearAliases(AliasInfo ** /* info */
+ );
+
+extern Bool MergeAliases(AliasInfo ** /* into */ ,
+ AliasInfo ** /* merge */ ,
+ unsigned /* how_merge */
+ );
+
+extern int ApplyAliases(XkbDescPtr /* xkb */ ,
+ Bool /* toGeom */ ,
+ AliasInfo ** /* info */
+ );
#endif /* ALIAS_H */
diff --git a/app/xkbcomp/compat.c b/app/xkbcomp/compat.c
index 00eb72b81..03c29efdc 100644
--- a/app/xkbcomp/compat.c
+++ b/app/xkbcomp/compat.c
@@ -1,4 +1,3 @@
-/* $Xorg: compat.c,v 1.3 2000/08/17 19:54:30 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/compat.c,v 3.3 2001/01/17 23:45:43 dawes Exp $ */
#include <X11/Xos.h>
#include "xkbcomp.h"
@@ -34,10 +32,12 @@
#include "misc.h"
#include "indicators.h"
#include "action.h"
+#include "compat.h"
-typedef struct _SymInterpInfo {
- CommonInfo defs;
- XkbSymInterpretRec interp;
+typedef struct _SymInterpInfo
+{
+ CommonInfo defs;
+ XkbSymInterpretRec interp;
} SymInterpInfo;
#define _SI_VirtualMod (1<<0)
@@ -46,26 +46,28 @@ typedef struct _SymInterpInfo {
#define _SI_LockingKey (1<<3)
#define _SI_LevelOneOnly (1<<4)
-typedef struct _GroupCompatInfo {
- unsigned char fileID;
- unsigned char merge;
- unsigned char real_mods;
- unsigned short vmods;
+typedef struct _GroupCompatInfo
+{
+ unsigned char fileID;
+ unsigned char merge;
+ unsigned char real_mods;
+ unsigned short vmods;
} GroupCompatInfo;
-typedef struct _CompatInfo {
- char * name;
- unsigned fileID;
- int errorCount;
- int nInterps;
- SymInterpInfo * interps;
- SymInterpInfo dflt;
- LEDInfo ledDflt;
- GroupCompatInfo groupCompat[XkbNumKbdGroups];
- LEDInfo * leds;
- VModInfo vmods;
- ActionInfo * act;
- XkbDescPtr xkb;
+typedef struct _CompatInfo
+{
+ char *name;
+ unsigned fileID;
+ int errorCount;
+ int nInterps;
+ SymInterpInfo *interps;
+ SymInterpInfo dflt;
+ LEDInfo ledDflt;
+ GroupCompatInfo groupCompat[XkbNumKbdGroups];
+ LEDInfo *leds;
+ VModInfo vmods;
+ ActionInfo *act;
+ XkbDescPtr xkb;
} CompatInfo;
/***====================================================================***/
@@ -78,234 +80,265 @@ typedef struct _CompatInfo {
/***====================================================================***/
static char *
-siText(SymInterpInfo * si,CompatInfo * info)
+siText(SymInterpInfo * si, CompatInfo * info)
{
-static char buf[128];
+ static char buf[128];
- if (si==&info->dflt) {
- sprintf(buf,"default");
+ if (si == &info->dflt)
+ {
+ snprintf(buf, sizeof(buf), "default");
}
- else {
- sprintf(buf,"%s+%s(%s)",XkbKeysymText(si->interp.sym,XkbMessage),
- XkbSIMatchText(si->interp.match,XkbMessage),
- XkbModMaskText(si->interp.mods,XkbMessage));
+ else
+ {
+ snprintf(buf, sizeof(buf), "%s+%s(%s)",
+ XkbKeysymText(si->interp.sym, XkbMessage),
+ XkbSIMatchText(si->interp.match, XkbMessage),
+ XkbModMaskText(si->interp.mods, XkbMessage));
}
return buf;
}
static void
-InitCompatInfo(CompatInfo *info,XkbDescPtr xkb)
+InitCompatInfo(CompatInfo * info, XkbDescPtr xkb)
{
-register int i;
-
- info->xkb= xkb;
- info->name= NULL;
- info->fileID= 0;
- info->errorCount= 0;
- info->nInterps= 0;
- info->interps= NULL;
- info->act= NULL;
- info->dflt.defs.fileID= info->fileID;
- info->dflt.defs.defined= 0;
- info->dflt.defs.merge= MergeOverride;
- info->dflt.interp.flags= 0;
- info->dflt.interp.virtual_mod= XkbNoModifier;
- info->dflt.interp.act.type= XkbSA_NoAction;
- for (i=0;i<XkbAnyActionDataSize;i++) {
- info->dflt.interp.act.data[i]= 0;
- }
- ClearIndicatorMapInfo(xkb->dpy,&info->ledDflt);
- info->ledDflt.defs.fileID= info->fileID;
- info->ledDflt.defs.defined= 0;
- info->ledDflt.defs.merge= MergeOverride;
- bzero((char *)&info->groupCompat[0],XkbNumKbdGroups*sizeof(GroupCompatInfo));
- info->leds= NULL;
- InitVModInfo(&info->vmods,xkb);
+ register int i;
+
+ info->xkb = xkb;
+ info->name = NULL;
+ info->fileID = 0;
+ info->errorCount = 0;
+ info->nInterps = 0;
+ info->interps = NULL;
+ info->act = NULL;
+ info->dflt.defs.fileID = info->fileID;
+ info->dflt.defs.defined = 0;
+ info->dflt.defs.merge = MergeOverride;
+ info->dflt.interp.flags = 0;
+ info->dflt.interp.virtual_mod = XkbNoModifier;
+ info->dflt.interp.act.type = XkbSA_NoAction;
+ for (i = 0; i < XkbAnyActionDataSize; i++)
+ {
+ info->dflt.interp.act.data[i] = 0;
+ }
+ ClearIndicatorMapInfo(xkb->dpy, &info->ledDflt);
+ info->ledDflt.defs.fileID = info->fileID;
+ info->ledDflt.defs.defined = 0;
+ info->ledDflt.defs.merge = MergeOverride;
+ bzero((char *) &info->groupCompat[0],
+ XkbNumKbdGroups * sizeof(GroupCompatInfo));
+ info->leds = NULL;
+ InitVModInfo(&info->vmods, xkb);
return;
}
static void
-ClearCompatInfo(CompatInfo *info,XkbDescPtr xkb)
+ClearCompatInfo(CompatInfo * info, XkbDescPtr xkb)
{
-register int i;
-
- if (info->name!=NULL)
- uFree(info->name);
- info->name= NULL;
- info->dflt.defs.defined= 0;
- info->dflt.defs.merge= MergeAugment;
- info->dflt.interp.flags= 0;
- info->dflt.interp.virtual_mod= XkbNoModifier;
- info->dflt.interp.act.type= XkbSA_NoAction;
- for (i=0;i<XkbAnyActionDataSize;i++) {
- info->dflt.interp.act.data[i]= 0;
- }
- ClearIndicatorMapInfo(xkb->dpy,&info->ledDflt);
- info->nInterps= 0;
- info->interps= (SymInterpInfo *)ClearCommonInfo(&info->interps->defs);
- bzero((char *)&info->groupCompat[0],XkbNumKbdGroups*sizeof(GroupCompatInfo));
- info->leds= (LEDInfo *)ClearCommonInfo(&info->leds->defs);
+ register int i;
+
+ if (info->name != NULL)
+ uFree(info->name);
+ info->name = NULL;
+ info->dflt.defs.defined = 0;
+ info->dflt.defs.merge = MergeAugment;
+ info->dflt.interp.flags = 0;
+ info->dflt.interp.virtual_mod = XkbNoModifier;
+ info->dflt.interp.act.type = XkbSA_NoAction;
+ for (i = 0; i < XkbAnyActionDataSize; i++)
+ {
+ info->dflt.interp.act.data[i] = 0;
+ }
+ ClearIndicatorMapInfo(xkb->dpy, &info->ledDflt);
+ info->nInterps = 0;
+ info->interps = (SymInterpInfo *) ClearCommonInfo(&info->interps->defs);
+ bzero((char *) &info->groupCompat[0],
+ XkbNumKbdGroups * sizeof(GroupCompatInfo));
+ info->leds = (LEDInfo *) ClearCommonInfo(&info->leds->defs);
/* 3/30/94 (ef) -- XXX! Should free action info here */
- ClearVModInfo(&info->vmods,xkb);
+ ClearVModInfo(&info->vmods, xkb);
return;
}
static SymInterpInfo *
-NextInterp(CompatInfo *info)
+NextInterp(CompatInfo * info)
{
-SymInterpInfo * si;
+ SymInterpInfo *si;
- si= uTypedAlloc(SymInterpInfo);
- if (si) {
- bzero((char *)si,sizeof(SymInterpInfo));
- info->interps= (SymInterpInfo *)AddCommonInfo(&info->interps->defs,
- (CommonInfo *)si);
- info->nInterps++;
+ si = uTypedAlloc(SymInterpInfo);
+ if (si)
+ {
+ bzero((char *) si, sizeof(SymInterpInfo));
+ info->interps =
+ (SymInterpInfo *) AddCommonInfo(&info->interps->defs,
+ (CommonInfo *) si);
+ info->nInterps++;
}
return si;
}
static SymInterpInfo *
-FindMatchingInterp(CompatInfo *info,SymInterpInfo *new)
+FindMatchingInterp(CompatInfo * info, SymInterpInfo * new)
{
-SymInterpInfo * old;
-
- for (old= info->interps;old!=NULL;old=(SymInterpInfo *)old->defs.next) {
- if ((old->interp.sym==new->interp.sym)&&
- (old->interp.mods==new->interp.mods)&&
- (old->interp.match==new->interp.match)) {
- return old;
- }
+ SymInterpInfo *old;
+
+ for (old = info->interps; old != NULL;
+ old = (SymInterpInfo *) old->defs.next)
+ {
+ if ((old->interp.sym == new->interp.sym) &&
+ (old->interp.mods == new->interp.mods) &&
+ (old->interp.match == new->interp.match))
+ {
+ return old;
+ }
}
return NULL;
}
static Bool
-AddInterp(CompatInfo *info,SymInterpInfo *new)
+AddInterp(CompatInfo * info, SymInterpInfo * new)
{
-unsigned collide;
-SymInterpInfo * old;
-
- collide= 0;
- old= FindMatchingInterp(info,new);
- if (old!=NULL) {
- if (new->defs.merge==MergeReplace) {
- SymInterpInfo *next= (SymInterpInfo *)old->defs.next;
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple definitions for \"%s\"\n",siText(new,info));
- ACTION("Earlier interpretation ignored\n");
- }
- *old= *new;
- old->defs.next= &next->defs;
- return True;
- }
- if (UseNewField(_SI_VirtualMod,&old->defs,&new->defs,&collide)) {
- old->interp.virtual_mod= new->interp.virtual_mod;
- old->defs.defined|= _SI_VirtualMod;
- }
- if (UseNewField(_SI_Action,&old->defs,&new->defs,&collide)) {
- old->interp.act= new->interp.act;
- old->defs.defined|= _SI_Action;
- }
- if (UseNewField(_SI_AutoRepeat,&old->defs,&new->defs,&collide)) {
- old->interp.flags&= ~XkbSI_AutoRepeat;
- old->interp.flags|= (new->interp.flags&XkbSI_AutoRepeat);
- old->defs.defined|= _SI_AutoRepeat;
- }
- if (UseNewField(_SI_LockingKey,&old->defs,&new->defs,&collide)) {
- old->interp.flags&= ~XkbSI_LockingKey;
- old->interp.flags|= (new->interp.flags&XkbSI_LockingKey);
- old->defs.defined|= _SI_LockingKey;
- }
- if (UseNewField(_SI_LevelOneOnly,&old->defs,&new->defs,&collide)) {
- old->interp.match&= ~XkbSI_LevelOneOnly;
- old->interp.match|= (new->interp.match&XkbSI_LevelOneOnly);
- old->defs.defined|= _SI_LevelOneOnly;
- }
- if (collide) {
- WARN1("Multiple interpretations of \"%s\"\n",siText(new,info));
- ACTION1("Using %s definition for duplicate fields\n",
- (new->defs.merge!=MergeAugment?"last":"first"));
- }
- return True;
- }
- old= new;
- if ((new= NextInterp(info))==NULL)
- return False;
- *new= *old;
- new->defs.next= NULL;
+ unsigned collide;
+ SymInterpInfo *old;
+
+ collide = 0;
+ old = FindMatchingInterp(info, new);
+ if (old != NULL)
+ {
+ if (new->defs.merge == MergeReplace)
+ {
+ SymInterpInfo *next = (SymInterpInfo *) old->defs.next;
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Multiple definitions for \"%s\"\n", siText(new, info));
+ ACTION("Earlier interpretation ignored\n");
+ }
+ *old = *new;
+ old->defs.next = &next->defs;
+ return True;
+ }
+ if (UseNewField(_SI_VirtualMod, &old->defs, &new->defs, &collide))
+ {
+ old->interp.virtual_mod = new->interp.virtual_mod;
+ old->defs.defined |= _SI_VirtualMod;
+ }
+ if (UseNewField(_SI_Action, &old->defs, &new->defs, &collide))
+ {
+ old->interp.act = new->interp.act;
+ old->defs.defined |= _SI_Action;
+ }
+ if (UseNewField(_SI_AutoRepeat, &old->defs, &new->defs, &collide))
+ {
+ old->interp.flags &= ~XkbSI_AutoRepeat;
+ old->interp.flags |= (new->interp.flags & XkbSI_AutoRepeat);
+ old->defs.defined |= _SI_AutoRepeat;
+ }
+ if (UseNewField(_SI_LockingKey, &old->defs, &new->defs, &collide))
+ {
+ old->interp.flags &= ~XkbSI_LockingKey;
+ old->interp.flags |= (new->interp.flags & XkbSI_LockingKey);
+ old->defs.defined |= _SI_LockingKey;
+ }
+ if (UseNewField(_SI_LevelOneOnly, &old->defs, &new->defs, &collide))
+ {
+ old->interp.match &= ~XkbSI_LevelOneOnly;
+ old->interp.match |= (new->interp.match & XkbSI_LevelOneOnly);
+ old->defs.defined |= _SI_LevelOneOnly;
+ }
+ if (collide)
+ {
+ WARN1("Multiple interpretations of \"%s\"\n", siText(new, info));
+ ACTION1("Using %s definition for duplicate fields\n",
+ (new->defs.merge != MergeAugment ? "last" : "first"));
+ }
+ return True;
+ }
+ old = new;
+ if ((new = NextInterp(info)) == NULL)
+ return False;
+ *new = *old;
+ new->defs.next = NULL;
return True;
}
static Bool
-AddGroupCompat(CompatInfo *info,unsigned group,GroupCompatInfo *newGC)
+AddGroupCompat(CompatInfo * info, unsigned group, GroupCompatInfo * newGC)
{
-GroupCompatInfo * gc;
-unsigned merge;
-
- merge= newGC->merge;
- gc= &info->groupCompat[group];
- if (((gc->real_mods==newGC->real_mods)&&(gc->vmods==newGC->vmods))) {
- return True;
- }
- if (((gc->fileID==newGC->fileID)&&(warningLevel>0))||(warningLevel>9)) {
- WARN1("Compat map for group %d redefined\n",group+1);
- ACTION1("Using %s definition\n",(merge==MergeAugment?"old":"new"));
- }
- if (merge!=MergeAugment)
- *gc= *newGC;
+ GroupCompatInfo *gc;
+ unsigned merge;
+
+ merge = newGC->merge;
+ gc = &info->groupCompat[group];
+ if (((gc->real_mods == newGC->real_mods) && (gc->vmods == newGC->vmods)))
+ {
+ return True;
+ }
+ if (((gc->fileID == newGC->fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Compat map for group %d redefined\n", group + 1);
+ ACTION1("Using %s definition\n",
+ (merge == MergeAugment ? "old" : "new"));
+ }
+ if (merge != MergeAugment)
+ *gc = *newGC;
return True;
}
/***====================================================================***/
static Bool
-ResolveStateAndPredicate( ExprDef * expr,
- unsigned * pred_rtrn,
- unsigned * mods_rtrn,
- CompatInfo * info)
+ResolveStateAndPredicate(ExprDef * expr,
+ unsigned *pred_rtrn,
+ unsigned *mods_rtrn, CompatInfo * info)
{
-ExprResult result;
-
- if (expr==NULL) {
- *pred_rtrn= XkbSI_AnyOfOrNone;
- *mods_rtrn= ~0;
- return True;
- }
-
- *pred_rtrn= XkbSI_Exactly;
- if (expr->op==ExprActionDecl) {
- char *pred_txt= XkbAtomText(NULL,expr->value.action.name,XkbMessage);
- if (uStrCaseCmp(pred_txt,"noneof")==0)
- *pred_rtrn= XkbSI_NoneOf;
- else if (uStrCaseCmp(pred_txt,"anyofornone")==0)
- *pred_rtrn= XkbSI_AnyOfOrNone;
- else if (uStrCaseCmp(pred_txt,"anyof")==0)
- *pred_rtrn= XkbSI_AnyOf;
- else if (uStrCaseCmp(pred_txt,"allof")==0)
- *pred_rtrn= XkbSI_AllOf;
- else if (uStrCaseCmp(pred_txt,"exactly")==0)
- *pred_rtrn= XkbSI_Exactly;
- else {
- ERROR1("Illegal modifier predicate \"%s\"\n",pred_txt);
- ACTION("Ignored\n");
- return False;
- }
- expr= expr->value.action.args;
- }
- else if (expr->op==ExprIdent) {
- char *pred_txt= XkbAtomText(NULL,expr->value.str,XkbMessage);
- if ((pred_txt)&&(uStrCaseCmp(pred_txt,"any")==0)) {
- *pred_rtrn= XkbSI_AnyOf;
- *mods_rtrn= 0xff;
- return True;
- }
- }
-
- if (ExprResolveModMask(expr,&result,NULL,NULL)) {
- *mods_rtrn= result.uval;
- return True;
+ ExprResult result;
+
+ if (expr == NULL)
+ {
+ *pred_rtrn = XkbSI_AnyOfOrNone;
+ *mods_rtrn = ~0;
+ return True;
+ }
+
+ *pred_rtrn = XkbSI_Exactly;
+ if (expr->op == ExprActionDecl)
+ {
+ char *pred_txt =
+ XkbAtomText(NULL, expr->value.action.name, XkbMessage);
+ if (uStrCaseCmp(pred_txt, "noneof") == 0)
+ *pred_rtrn = XkbSI_NoneOf;
+ else if (uStrCaseCmp(pred_txt, "anyofornone") == 0)
+ *pred_rtrn = XkbSI_AnyOfOrNone;
+ else if (uStrCaseCmp(pred_txt, "anyof") == 0)
+ *pred_rtrn = XkbSI_AnyOf;
+ else if (uStrCaseCmp(pred_txt, "allof") == 0)
+ *pred_rtrn = XkbSI_AllOf;
+ else if (uStrCaseCmp(pred_txt, "exactly") == 0)
+ *pred_rtrn = XkbSI_Exactly;
+ else
+ {
+ ERROR1("Illegal modifier predicate \"%s\"\n", pred_txt);
+ ACTION("Ignored\n");
+ return False;
+ }
+ expr = expr->value.action.args;
+ }
+ else if (expr->op == ExprIdent)
+ {
+ char *pred_txt = XkbAtomText(NULL, expr->value.str, XkbMessage);
+ if ((pred_txt) && (uStrCaseCmp(pred_txt, "any") == 0))
+ {
+ *pred_rtrn = XkbSI_AnyOf;
+ *mods_rtrn = 0xff;
+ return True;
+ }
+ }
+
+ if (ExprResolveModMask(expr, &result, NULL, NULL))
+ {
+ *mods_rtrn = result.uval;
+ return True;
}
return False;
}
@@ -313,468 +346,535 @@ ExprResult result;
/***====================================================================***/
static void
-MergeIncludedCompatMaps( CompatInfo * into,
- CompatInfo * from,
- unsigned merge)
+MergeIncludedCompatMaps(CompatInfo * into, CompatInfo * from, unsigned merge)
{
-SymInterpInfo * si;
-LEDInfo * led,*rtrn,*next;
-GroupCompatInfo * gcm;
-register int i;
-
- if (from->errorCount>0) {
- into->errorCount+= from->errorCount;
- return;
- }
- if (into->name==NULL) {
- into->name= from->name;
- from->name= NULL;
- }
- for (si=from->interps;si;si=(SymInterpInfo *)si->defs.next) {
- if (merge!=MergeDefault)
- si->defs.merge= merge;
- if (!AddInterp(into,si))
- into->errorCount++;
- }
- for (i=0,gcm=&from->groupCompat[0];i<XkbNumKbdGroups;i++,gcm++) {
- if (merge!=MergeDefault)
- gcm->merge= merge;
- if (!AddGroupCompat(into,i,gcm))
- into->errorCount++;
- }
- for (led=from->leds;led!=NULL;led=next) {
- next= (LEDInfo *)led->defs.next;
- if (merge!=MergeDefault)
- led->defs.merge= merge;
- rtrn= AddIndicatorMap(into->leds,led);
- if (rtrn!=NULL)
- into->leds= rtrn;
- else into->errorCount++;
+ SymInterpInfo *si;
+ LEDInfo *led, *rtrn, *next;
+ GroupCompatInfo *gcm;
+ register int i;
+
+ if (from->errorCount > 0)
+ {
+ into->errorCount += from->errorCount;
+ return;
+ }
+ if (into->name == NULL)
+ {
+ into->name = from->name;
+ from->name = NULL;
+ }
+ for (si = from->interps; si; si = (SymInterpInfo *) si->defs.next)
+ {
+ if (merge != MergeDefault)
+ si->defs.merge = merge;
+ if (!AddInterp(into, si))
+ into->errorCount++;
+ }
+ for (i = 0, gcm = &from->groupCompat[0]; i < XkbNumKbdGroups; i++, gcm++)
+ {
+ if (merge != MergeDefault)
+ gcm->merge = merge;
+ if (!AddGroupCompat(into, i, gcm))
+ into->errorCount++;
+ }
+ for (led = from->leds; led != NULL; led = next)
+ {
+ next = (LEDInfo *) led->defs.next;
+ if (merge != MergeDefault)
+ led->defs.merge = merge;
+ rtrn = AddIndicatorMap(into->leds, led);
+ if (rtrn != NULL)
+ into->leds = rtrn;
+ else
+ into->errorCount++;
}
return;
}
-typedef void (*FileHandler)(
- XkbFile * /* rtrn */,
- XkbDescPtr /* xkb */,
- unsigned /* merge */,
- CompatInfo * /* info */
-);
+typedef void (*FileHandler) (XkbFile * /* rtrn */ ,
+ XkbDescPtr /* xkb */ ,
+ unsigned /* merge */ ,
+ CompatInfo * /* info */
+ );
static Bool
-HandleIncludeCompatMap( IncludeStmt * stmt,
- XkbDescPtr xkb,
- CompatInfo * info,
- FileHandler hndlr)
+HandleIncludeCompatMap(IncludeStmt * stmt,
+ XkbDescPtr xkb, CompatInfo * info, FileHandler hndlr)
{
-unsigned newMerge;
-XkbFile * rtrn;
-CompatInfo included;
-Bool haveSelf;
-
- haveSelf= False;
- if ((stmt->file==NULL)&&(stmt->map==NULL)) {
- haveSelf= True;
- included= *info;
- bzero(info,sizeof(CompatInfo));
- }
- else if (ProcessIncludeFile(stmt,XkmCompatMapIndex,&rtrn,&newMerge)) {
- InitCompatInfo(&included,xkb);
- included.fileID= rtrn->id;
- included.dflt= info->dflt;
- included.dflt.defs.fileID= rtrn->id;
- included.dflt.defs.merge= newMerge;
- included.ledDflt.defs.fileID= rtrn->id;
- included.ledDflt.defs.merge= newMerge;
- included.act= info->act;
- (*hndlr)(rtrn,xkb,MergeOverride,&included);
- if (stmt->stmt!=NULL) {
- if (included.name!=NULL)
- uFree(included.name);
- included.name= stmt->stmt;
- stmt->stmt= NULL;
- }
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- if ((stmt->next!=NULL)&&(included.errorCount<1)) {
- IncludeStmt * next;
- unsigned op;
- CompatInfo next_incl;
-
- for (next=stmt->next;next!=NULL;next=next->next) {
- if ((next->file==NULL)&&(next->map==NULL)) {
- haveSelf= True;
- MergeIncludedCompatMaps(&included,info,next->merge);
- ClearCompatInfo(info,xkb);
- }
- else if (ProcessIncludeFile(next,XkmCompatMapIndex,&rtrn,&op)) {
- InitCompatInfo(&next_incl,xkb);
- next_incl.fileID= rtrn->id;
- next_incl.dflt= info->dflt;
- next_incl.dflt.defs.fileID= rtrn->id;
- next_incl.dflt.defs.merge= op;
- next_incl.ledDflt.defs.fileID= rtrn->id;
- next_incl.ledDflt.defs.merge= op;
- next_incl.act= info->act;
- (*hndlr)(rtrn,xkb,MergeOverride,&next_incl);
- MergeIncludedCompatMaps(&included,&next_incl,op);
- ClearCompatInfo(&next_incl,xkb);
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- }
+ unsigned newMerge;
+ XkbFile *rtrn;
+ CompatInfo included;
+ Bool haveSelf;
+
+ haveSelf = False;
+ if ((stmt->file == NULL) && (stmt->map == NULL))
+ {
+ haveSelf = True;
+ included = *info;
+ bzero(info, sizeof(CompatInfo));
+ }
+ else if (ProcessIncludeFile(stmt, XkmCompatMapIndex, &rtrn, &newMerge))
+ {
+ InitCompatInfo(&included, xkb);
+ included.fileID = rtrn->id;
+ included.dflt = info->dflt;
+ included.dflt.defs.fileID = rtrn->id;
+ included.dflt.defs.merge = newMerge;
+ included.ledDflt.defs.fileID = rtrn->id;
+ included.ledDflt.defs.merge = newMerge;
+ included.act = info->act;
+ (*hndlr) (rtrn, xkb, MergeOverride, &included);
+ if (stmt->stmt != NULL)
+ {
+ if (included.name != NULL)
+ uFree(included.name);
+ included.name = stmt->stmt;
+ stmt->stmt = NULL;
+ }
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ if ((stmt->next != NULL) && (included.errorCount < 1))
+ {
+ IncludeStmt *next;
+ unsigned op;
+ CompatInfo next_incl;
+
+ for (next = stmt->next; next != NULL; next = next->next)
+ {
+ if ((next->file == NULL) && (next->map == NULL))
+ {
+ haveSelf = True;
+ MergeIncludedCompatMaps(&included, info, next->merge);
+ ClearCompatInfo(info, xkb);
+ }
+ else if (ProcessIncludeFile(next, XkmCompatMapIndex, &rtrn, &op))
+ {
+ InitCompatInfo(&next_incl, xkb);
+ next_incl.fileID = rtrn->id;
+ next_incl.dflt = info->dflt;
+ next_incl.dflt.defs.fileID = rtrn->id;
+ next_incl.dflt.defs.merge = op;
+ next_incl.ledDflt.defs.fileID = rtrn->id;
+ next_incl.ledDflt.defs.merge = op;
+ next_incl.act = info->act;
+ (*hndlr) (rtrn, xkb, MergeOverride, &next_incl);
+ MergeIncludedCompatMaps(&included, &next_incl, op);
+ ClearCompatInfo(&next_incl, xkb);
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ }
}
if (haveSelf)
- *info= included;
- else {
- MergeIncludedCompatMaps(info,&included,newMerge);
- ClearCompatInfo(&included,xkb);
+ *info = included;
+ else
+ {
+ MergeIncludedCompatMaps(info, &included, newMerge);
+ ClearCompatInfo(&included, xkb);
}
- return (info->errorCount==0);
+ return (info->errorCount == 0);
}
static LookupEntry useModMapValues[] = {
- { "levelone", 1 },
- { "level1", 1 },
- { "anylevel", 0 },
- { "any", 0 },
- { NULL, 0 }
+ {"levelone", 1},
+ {"level1", 1},
+ {"anylevel", 0},
+ {"any", 0},
+ {NULL, 0}
};
static int
-SetInterpField( SymInterpInfo * si,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- CompatInfo * info)
+SetInterpField(SymInterpInfo * si,
+ XkbDescPtr xkb,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, CompatInfo * info)
{
-int ok= 1;
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"action")==0) {
- if (arrayNdx!=NULL)
- return ReportSINotArray(si,field,info);
- ok= HandleActionDef(value,xkb,&si->interp.act,si->defs.merge,info->act);
- if (ok)
- si->defs.defined|= _SI_Action;
- }
- else if ((uStrCaseCmp(field,"virtualmodifier")==0)||
- (uStrCaseCmp(field,"virtualmod")==0)) {
- if (arrayNdx!=NULL)
- return ReportSINotArray(si,field,info);
- ok= ResolveVirtualModifier(value,&tmp,&info->vmods);
- if (ok) {
- si->interp.virtual_mod= tmp.uval;
- si->defs.defined|= _SI_VirtualMod;
- }
- else return ReportSIBadType(si,field,"virtual modifier",info);
- }
- else if (uStrCaseCmp(field,"repeat")==0) {
- if (arrayNdx!=NULL)
- return ReportSINotArray(si,field,info);
- ok= ExprResolveBoolean(value,&tmp,NULL,NULL);
- if (ok) {
- if (tmp.uval) si->interp.flags|= XkbSI_AutoRepeat;
- else si->interp.flags&= ~XkbSI_AutoRepeat;
- si->defs.defined|= _SI_AutoRepeat;
- }
- else return ReportSIBadType(si,field,"boolean",info);
- }
- else if (uStrCaseCmp(field,"locking")==0) {
- if (arrayNdx!=NULL)
- return ReportSINotArray(si,field,info);
- ok= ExprResolveBoolean(value,&tmp,NULL,NULL);
- if (ok) {
- if (tmp.uval) si->interp.flags|= XkbSI_LockingKey;
- else si->interp.flags&= ~XkbSI_LockingKey;
- si->defs.defined|= _SI_LockingKey;
- }
- else return ReportSIBadType(si,field,"boolean",info);
- }
- else if ((uStrCaseCmp(field,"usemodmap")==0)||
- (uStrCaseCmp(field,"usemodmapmods")==0)) {
- if (arrayNdx!=NULL)
- return ReportSINotArray(si,field,info);
- ok= ExprResolveEnum(value,&tmp,useModMapValues);
- if (ok) {
- if (tmp.uval) si->interp.match|= XkbSI_LevelOneOnly;
- else si->interp.match&= ~XkbSI_LevelOneOnly;
- si->defs.defined|= _SI_LevelOneOnly;
- }
- else return ReportSIBadType(si,field,"level specification",info);
- }
- else {
- ok= ReportBadField("symbol interpretation",field,siText(si,info));
+ int ok = 1;
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "action") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportSINotArray(si, field, info);
+ ok = HandleActionDef(value, xkb, &si->interp.act, si->defs.merge,
+ info->act);
+ if (ok)
+ si->defs.defined |= _SI_Action;
+ }
+ else if ((uStrCaseCmp(field, "virtualmodifier") == 0) ||
+ (uStrCaseCmp(field, "virtualmod") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportSINotArray(si, field, info);
+ ok = ResolveVirtualModifier(value, &tmp, &info->vmods);
+ if (ok)
+ {
+ si->interp.virtual_mod = tmp.uval;
+ si->defs.defined |= _SI_VirtualMod;
+ }
+ else
+ return ReportSIBadType(si, field, "virtual modifier", info);
+ }
+ else if (uStrCaseCmp(field, "repeat") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportSINotArray(si, field, info);
+ ok = ExprResolveBoolean(value, &tmp, NULL, NULL);
+ if (ok)
+ {
+ if (tmp.uval)
+ si->interp.flags |= XkbSI_AutoRepeat;
+ else
+ si->interp.flags &= ~XkbSI_AutoRepeat;
+ si->defs.defined |= _SI_AutoRepeat;
+ }
+ else
+ return ReportSIBadType(si, field, "boolean", info);
+ }
+ else if (uStrCaseCmp(field, "locking") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportSINotArray(si, field, info);
+ ok = ExprResolveBoolean(value, &tmp, NULL, NULL);
+ if (ok)
+ {
+ if (tmp.uval)
+ si->interp.flags |= XkbSI_LockingKey;
+ else
+ si->interp.flags &= ~XkbSI_LockingKey;
+ si->defs.defined |= _SI_LockingKey;
+ }
+ else
+ return ReportSIBadType(si, field, "boolean", info);
+ }
+ else if ((uStrCaseCmp(field, "usemodmap") == 0) ||
+ (uStrCaseCmp(field, "usemodmapmods") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportSINotArray(si, field, info);
+ ok = ExprResolveEnum(value, &tmp, useModMapValues);
+ if (ok)
+ {
+ if (tmp.uval)
+ si->interp.match |= XkbSI_LevelOneOnly;
+ else
+ si->interp.match &= ~XkbSI_LevelOneOnly;
+ si->defs.defined |= _SI_LevelOneOnly;
+ }
+ else
+ return ReportSIBadType(si, field, "level specification", info);
+ }
+ else
+ {
+ ok = ReportBadField("symbol interpretation", field, siText(si, info));
}
return ok;
}
-LookupEntry groupNames[]= {
- { "group1", 0x01 },
- { "group2", 0x02 },
- { "group3", 0x04 },
- { "group4", 0x08 },
- { "group5", 0x10 },
- { "group6", 0x20 },
- { "group7", 0x40 },
- { "group8", 0x80 },
- { "none", 0x00 },
- { "all", 0xff },
- { NULL, 0 }
+LookupEntry groupNames[] = {
+ {"group1", 0x01}
+ ,
+ {"group2", 0x02}
+ ,
+ {"group3", 0x04}
+ ,
+ {"group4", 0x08}
+ ,
+ {"group5", 0x10}
+ ,
+ {"group6", 0x20}
+ ,
+ {"group7", 0x40}
+ ,
+ {"group8", 0x80}
+ ,
+ {"none", 0x00}
+ ,
+ {"all", 0xff}
+ ,
+ {NULL, 0}
};
static int
-HandleInterpVar(VarDef *stmt,XkbDescPtr xkb,CompatInfo *info)
+HandleInterpVar(VarDef * stmt, XkbDescPtr xkb, CompatInfo * info)
{
-ExprResult elem,field;
-ExprDef * ndx;
-
- if (ExprResolveLhs(stmt->name,&elem,&field,&ndx)==0)
- return 0; /* internal error, already reported */
- if (elem.str&&(uStrCaseCmp(elem.str,"interpret")==0))
- return SetInterpField(&info->dflt,xkb,field.str,ndx,stmt->value,info);
- if (elem.str&&(uStrCaseCmp(elem.str,"indicator")==0)) {
- return SetIndicatorMapField(&info->ledDflt,xkb,field.str,ndx,
- stmt->value);
- }
- return SetActionField(xkb,elem.str,field.str,ndx,stmt->value,&info->act);
+ ExprResult elem, field;
+ ExprDef *ndx;
+
+ if (ExprResolveLhs(stmt->name, &elem, &field, &ndx) == 0)
+ return 0; /* internal error, already reported */
+ if (elem.str && (uStrCaseCmp(elem.str, "interpret") == 0))
+ return SetInterpField(&info->dflt, xkb, field.str, ndx, stmt->value,
+ info);
+ if (elem.str && (uStrCaseCmp(elem.str, "indicator") == 0))
+ {
+ return SetIndicatorMapField(&info->ledDflt, xkb, field.str, ndx,
+ stmt->value);
+ }
+ return SetActionField(xkb, elem.str, field.str, ndx, stmt->value,
+ &info->act);
}
static int
-HandleInterpBody(VarDef *def,XkbDescPtr xkb,SymInterpInfo *si,CompatInfo *info)
+HandleInterpBody(VarDef * def, XkbDescPtr xkb, SymInterpInfo * si,
+ CompatInfo * info)
{
-int ok= 1;
-ExprResult tmp,field;
-ExprDef * arrayNdx;
-
- for (;def!=NULL;def= (VarDef *)def->common.next) {
- if ((def->name)&&(def->name->type==ExprFieldRef)) {
- ok= HandleInterpVar(def,xkb,info);
- continue;
- }
- ok= ExprResolveLhs(def->name,&tmp,&field,&arrayNdx);
- if (ok)
- ok= SetInterpField(si,xkb,field.str,arrayNdx,def->value,info);
+ int ok = 1;
+ ExprResult tmp, field;
+ ExprDef *arrayNdx;
+
+ for (; def != NULL; def = (VarDef *) def->common.next)
+ {
+ if ((def->name) && (def->name->type == ExprFieldRef))
+ {
+ ok = HandleInterpVar(def, xkb, info);
+ continue;
+ }
+ ok = ExprResolveLhs(def->name, &tmp, &field, &arrayNdx);
+ if (ok)
+ ok = SetInterpField(si, xkb, field.str, arrayNdx, def->value,
+ info);
}
return ok;
}
static int
-HandleInterpDef(InterpDef *def,XkbDescPtr xkb,unsigned merge,CompatInfo *info)
+HandleInterpDef(InterpDef * def, XkbDescPtr xkb, unsigned merge,
+ CompatInfo * info)
{
-unsigned pred,mods;
-SymInterpInfo si;
-
- if (!ResolveStateAndPredicate(def->match,&pred,&mods,info)) {
- ERROR("Couldn't determine matching modifiers\n");
- ACTION("Symbol interpretation ignored\n");
- return False;
- }
- if (def->merge!=MergeDefault)
- merge= def->merge;
-
- si= info->dflt;
- si.defs.merge= merge;
- si.interp.sym= def->sym;
- si.interp.match= pred & XkbSI_OpMask;
- si.interp.mods= mods;
- if (!HandleInterpBody(def->def,xkb,&si,info)) {
- info->errorCount++;
- return False;
- }
-
- if (!AddInterp(info,&si)) {
- info->errorCount++;
- return False;
+ unsigned pred, mods;
+ SymInterpInfo si;
+
+ if (!ResolveStateAndPredicate(def->match, &pred, &mods, info))
+ {
+ ERROR("Couldn't determine matching modifiers\n");
+ ACTION("Symbol interpretation ignored\n");
+ return False;
+ }
+ if (def->merge != MergeDefault)
+ merge = def->merge;
+
+ si = info->dflt;
+ si.defs.merge = merge;
+ si.interp.sym = def->sym;
+ si.interp.match = pred & XkbSI_OpMask;
+ si.interp.mods = mods;
+ if (!HandleInterpBody(def->def, xkb, &si, info))
+ {
+ info->errorCount++;
+ return False;
+ }
+
+ if (!AddInterp(info, &si))
+ {
+ info->errorCount++;
+ return False;
}
return True;
}
static int
-HandleGroupCompatDef( GroupCompatDef * def,
- XkbDescPtr xkb,
- unsigned merge,
- CompatInfo * info)
+HandleGroupCompatDef(GroupCompatDef * def,
+ XkbDescPtr xkb, unsigned merge, CompatInfo * info)
{
-ExprResult val;
-GroupCompatInfo tmp;
-
- if (def->merge!=MergeDefault)
- merge= def->merge;
- if (!XkbIsLegalGroup(def->group-1)) {
- ERROR1("Keyboard group must be in the range 1..%d\n",XkbNumKbdGroups+1);
- ACTION1("Compatibility map for illegal group %d ignored\n",def->group);
- return False;
- }
- tmp.fileID= info->fileID;
- tmp.merge= merge;
- if (!ExprResolveModMask(def->def,&val,LookupVModMask,(XPointer)xkb)) {
- ERROR("Expected a modifier mask in group compatibility definition\n");
- ACTION1("Ignoring illegal compatibility map for group %d\n",def->group);
- return False;
- }
- tmp.real_mods= val.uval&0xff;
- tmp.vmods= (val.uval>>8)&0xffff;
- return AddGroupCompat(info,def->group-1,&tmp);
+ ExprResult val;
+ GroupCompatInfo tmp;
+
+ if (def->merge != MergeDefault)
+ merge = def->merge;
+ if (!XkbIsLegalGroup(def->group - 1))
+ {
+ ERROR1("Keyboard group must be in the range 1..%d\n",
+ XkbNumKbdGroups + 1);
+ ACTION1("Compatibility map for illegal group %d ignored\n",
+ def->group);
+ return False;
+ }
+ tmp.fileID = info->fileID;
+ tmp.merge = merge;
+ if (!ExprResolveModMask(def->def, &val, LookupVModMask, (XPointer) xkb))
+ {
+ ERROR("Expected a modifier mask in group compatibility definition\n");
+ ACTION1("Ignoring illegal compatibility map for group %d\n",
+ def->group);
+ return False;
+ }
+ tmp.real_mods = val.uval & 0xff;
+ tmp.vmods = (val.uval >> 8) & 0xffff;
+ return AddGroupCompat(info, def->group - 1, &tmp);
}
static void
-HandleCompatMapFile( XkbFile * file,
- XkbDescPtr xkb,
- unsigned merge,
- CompatInfo * info)
+HandleCompatMapFile(XkbFile * file,
+ XkbDescPtr xkb, unsigned merge, CompatInfo * info)
{
-ParseCommon *stmt;
-
- if (merge==MergeDefault)
- merge= MergeAugment;
- info->name= uStringDup(file->name);
- stmt= file->defs;
- while (stmt) {
- switch (stmt->stmtType) {
- case StmtInclude:
- if (!HandleIncludeCompatMap((IncludeStmt *)stmt,xkb,info,
- HandleCompatMapFile))
- info->errorCount++;
- break;
- case StmtInterpDef:
- if (!HandleInterpDef((InterpDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtGroupCompatDef:
- if (!HandleGroupCompatDef((GroupCompatDef*)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtIndicatorMapDef:
- {
- LEDInfo *rtrn;
- rtrn= HandleIndicatorMapDef((IndicatorMapDef *)stmt,xkb,
- &info->ledDflt,info->leds,
- merge);
- if (rtrn!=NULL)
- info->leds= rtrn;
- else info->errorCount++;
- }
- break;
- case StmtVarDef:
- if (!HandleInterpVar((VarDef *)stmt,xkb,info))
- info->errorCount++;
- break;
- case StmtVModDef:
- if (!HandleVModDef((VModDef *)stmt,merge,&info->vmods))
- info->errorCount++;
- break;
- case StmtKeycodeDef:
- ERROR("Interpretation files may not include other types\n");
- ACTION("Ignoring definition of key name\n");
- info->errorCount++;
- break;
- default:
- WSGO1("Unexpected statement type %d in HandleCompatMapFile\n",
- stmt->stmtType);
- break;
- }
- stmt= stmt->next;
- if (info->errorCount>10) {
+ ParseCommon *stmt;
+
+ if (merge == MergeDefault)
+ merge = MergeAugment;
+ info->name = uStringDup(file->name);
+ stmt = file->defs;
+ while (stmt)
+ {
+ switch (stmt->stmtType)
+ {
+ case StmtInclude:
+ if (!HandleIncludeCompatMap((IncludeStmt *) stmt, xkb, info,
+ HandleCompatMapFile))
+ info->errorCount++;
+ break;
+ case StmtInterpDef:
+ if (!HandleInterpDef((InterpDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtGroupCompatDef:
+ if (!HandleGroupCompatDef
+ ((GroupCompatDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtIndicatorMapDef:
+ {
+ LEDInfo *rtrn;
+ rtrn = HandleIndicatorMapDef((IndicatorMapDef *) stmt, xkb,
+ &info->ledDflt, info->leds, merge);
+ if (rtrn != NULL)
+ info->leds = rtrn;
+ else
+ info->errorCount++;
+ }
+ break;
+ case StmtVarDef:
+ if (!HandleInterpVar((VarDef *) stmt, xkb, info))
+ info->errorCount++;
+ break;
+ case StmtVModDef:
+ if (!HandleVModDef((VModDef *) stmt, merge, &info->vmods))
+ info->errorCount++;
+ break;
+ case StmtKeycodeDef:
+ ERROR("Interpretation files may not include other types\n");
+ ACTION("Ignoring definition of key name\n");
+ info->errorCount++;
+ break;
+ default:
+ WSGO1("Unexpected statement type %d in HandleCompatMapFile\n",
+ stmt->stmtType);
+ break;
+ }
+ stmt = stmt->next;
+ if (info->errorCount > 10)
+ {
#ifdef NOISY
- ERROR("Too many errors\n");
+ ERROR("Too many errors\n");
#endif
- ACTION1("Abandoning compatibility map \"%s\"\n",file->topName);
- break;
- }
+ ACTION1("Abandoning compatibility map \"%s\"\n", file->topName);
+ break;
+ }
}
return;
}
static void
-CopyInterps( CompatInfo * info,
- XkbCompatMapPtr compat,
- Bool needSymbol,
- unsigned pred)
+CopyInterps(CompatInfo * info,
+ XkbCompatMapPtr compat, Bool needSymbol, unsigned pred)
{
-SymInterpInfo * si;
-
- for (si=info->interps;si;si=(SymInterpInfo *)si->defs.next) {
- if (((si->interp.match&XkbSI_OpMask)!=pred)||
- (needSymbol&&(si->interp.sym==NoSymbol))||
- ((!needSymbol)&&(si->interp.sym!=NoSymbol)))
- continue;
- if (compat->num_si>=compat->size_si) {
- WSGO("No room to merge symbol interpretations\n");
- ACTION("Symbol interpretations lost\n");
- return;
- }
- compat->sym_interpret[compat->num_si++]= si->interp;
+ SymInterpInfo *si;
+
+ for (si = info->interps; si; si = (SymInterpInfo *) si->defs.next)
+ {
+ if (((si->interp.match & XkbSI_OpMask) != pred) ||
+ (needSymbol && (si->interp.sym == NoSymbol)) ||
+ ((!needSymbol) && (si->interp.sym != NoSymbol)))
+ continue;
+ if (compat->num_si >= compat->size_si)
+ {
+ WSGO("No room to merge symbol interpretations\n");
+ ACTION("Symbol interpretations lost\n");
+ return;
+ }
+ compat->sym_interpret[compat->num_si++] = si->interp;
}
return;
}
Bool
-CompileCompatMap( XkbFile * file,
- XkbFileInfo * result,
- unsigned merge,
- LEDInfo ** unboundLEDs)
+CompileCompatMap(XkbFile * file,
+ XkbFileInfo * result, unsigned merge, LEDInfo ** unboundLEDs)
{
-int i;
-CompatInfo info;
-XkbDescPtr xkb;
-GroupCompatInfo * gcm;
-
- xkb= result->xkb;
- InitCompatInfo(&info,xkb);
- info.dflt.defs.merge= merge;
- info.ledDflt.defs.merge= merge;
- HandleCompatMapFile(file,xkb,merge,&info);
-
- if (info.errorCount==0) {
- int size;
- if (XkbAllocCompatMap(xkb,XkbAllCompatMask,info.nInterps)!=Success) {
- WSGO("Couldn't allocate compatibility map\n");
- ACTION("Exiting\n");
- return False;
- }
- if (info.name!=NULL) {
- if (XkbAllocNames(xkb,XkbCompatNameMask,0,0)==Success)
- xkb->names->compat= XkbInternAtom(xkb->dpy,info.name,False);
- else {
- WSGO("Couldn't allocate space for compat name\n");
- ACTION2("Name \"%s\" (from %s) NOT assigned\n",scanFile,
- info.name);
- }
- }
- size= info.nInterps*sizeof(XkbSymInterpretRec);
- if (size>0) {
- CopyInterps(&info,xkb->compat,True,XkbSI_Exactly);
- CopyInterps(&info,xkb->compat,True,XkbSI_AllOf|XkbSI_NoneOf);
- CopyInterps(&info,xkb->compat,True,XkbSI_AnyOf);
- CopyInterps(&info,xkb->compat,True,XkbSI_AnyOfOrNone);
- CopyInterps(&info,xkb->compat,False,XkbSI_Exactly);
- CopyInterps(&info,xkb->compat,False,XkbSI_AllOf|XkbSI_NoneOf);
- CopyInterps(&info,xkb->compat,False,XkbSI_AnyOf);
- CopyInterps(&info,xkb->compat,False,XkbSI_AnyOfOrNone);
- }
- for (i=0,gcm=&info.groupCompat[0];i<XkbNumKbdGroups;i++,gcm++) {
- if ((gcm->fileID!=0)||(gcm->real_mods!=0)||(gcm->vmods!=0)) {
- xkb->compat->groups[i].mask= gcm->real_mods;
- xkb->compat->groups[i].real_mods= gcm->real_mods;
- xkb->compat->groups[i].vmods= gcm->vmods;
- }
- }
- if (info.leds!=NULL) {
- if (!CopyIndicatorMapDefs(result,info.leds,unboundLEDs))
- info.errorCount++;
- info.leds= NULL;
- }
- ClearCompatInfo(&info,xkb);
- return True;
- }
- if (info.interps!=NULL)
- uFree(info.interps);
+ int i;
+ CompatInfo info;
+ XkbDescPtr xkb;
+ GroupCompatInfo *gcm;
+
+ xkb = result->xkb;
+ InitCompatInfo(&info, xkb);
+ info.dflt.defs.merge = merge;
+ info.ledDflt.defs.merge = merge;
+ HandleCompatMapFile(file, xkb, merge, &info);
+
+ if (info.errorCount == 0)
+ {
+ int size;
+ if (XkbAllocCompatMap(xkb, XkbAllCompatMask, info.nInterps) !=
+ Success)
+ {
+ WSGO("Couldn't allocate compatibility map\n");
+ ACTION("Exiting\n");
+ return False;
+ }
+ if (info.name != NULL)
+ {
+ if (XkbAllocNames(xkb, XkbCompatNameMask, 0, 0) == Success)
+ xkb->names->compat =
+ XkbInternAtom(xkb->dpy, info.name, False);
+ else
+ {
+ WSGO("Couldn't allocate space for compat name\n");
+ ACTION2("Name \"%s\" (from %s) NOT assigned\n",
+ scanFile, info.name);
+ }
+ }
+ size = info.nInterps * sizeof(XkbSymInterpretRec);
+ if (size > 0)
+ {
+ CopyInterps(&info, xkb->compat, True, XkbSI_Exactly);
+ CopyInterps(&info, xkb->compat, True, XkbSI_AllOf | XkbSI_NoneOf);
+ CopyInterps(&info, xkb->compat, True, XkbSI_AnyOf);
+ CopyInterps(&info, xkb->compat, True, XkbSI_AnyOfOrNone);
+ CopyInterps(&info, xkb->compat, False, XkbSI_Exactly);
+ CopyInterps(&info, xkb->compat, False,
+ XkbSI_AllOf | XkbSI_NoneOf);
+ CopyInterps(&info, xkb->compat, False, XkbSI_AnyOf);
+ CopyInterps(&info, xkb->compat, False, XkbSI_AnyOfOrNone);
+ }
+ for (i = 0, gcm = &info.groupCompat[0]; i < XkbNumKbdGroups;
+ i++, gcm++)
+ {
+ if ((gcm->fileID != 0) || (gcm->real_mods != 0)
+ || (gcm->vmods != 0))
+ {
+ xkb->compat->groups[i].mask = gcm->real_mods;
+ xkb->compat->groups[i].real_mods = gcm->real_mods;
+ xkb->compat->groups[i].vmods = gcm->vmods;
+ }
+ }
+ if (info.leds != NULL)
+ {
+ if (!CopyIndicatorMapDefs(result, info.leds, unboundLEDs))
+ info.errorCount++;
+ info.leds = NULL;
+ }
+ ClearCompatInfo(&info, xkb);
+ return True;
+ }
+ if (info.interps != NULL)
+ uFree(info.interps);
return False;
}
diff --git a/app/xkbcomp/compat.h b/app/xkbcomp/compat.h
index 4edf78879..799b215ee 100644
--- a/app/xkbcomp/compat.h
+++ b/app/xkbcomp/compat.h
@@ -1,4 +1,3 @@
-/* $XFree86$ */
#ifndef COMPAT_H
#define COMPAT_H 1
diff --git a/app/xkbcomp/config.h.in b/app/xkbcomp/config.h.in
index 1ca40928b..b0cfb7241 100644
--- a/app/xkbcomp/config.h.in
+++ b/app/xkbcomp/config.h.in
@@ -1,5 +1,38 @@
/* config.h.in. Generated from configure.ac by autoheader. */
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
/* Name of package */
#undef PACKAGE
@@ -27,5 +60,8 @@
/* Patch version of this package */
#undef PACKAGE_VERSION_PATCHLEVEL
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
/* Version number of package */
#undef VERSION
diff --git a/app/xkbcomp/configure b/app/xkbcomp/configure
index 28bd093e0..833d445d8 100644
--- a/app/xkbcomp/configure
+++ b/app/xkbcomp/configure
@@ -1,27 +1,84 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for xkbcomp 1.0.5.
+# Generated by GNU Autoconf 2.62 for xkbcomp 1.2.0.
#
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
#
-# Copyright (C) 2003 Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## --------------------- ##
## M4sh Initialization. ##
## --------------------- ##
-# Be Bourne compatible
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
fi
-DUALCASE=1; export DUALCASE # for MKS sh
# Support unset when possible.
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
@@ -31,33 +88,60 @@ else
fi
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
PS1='$ '
PS2='> '
PS4='+ '
# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- $as_unset $as_var
- fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
@@ -65,157 +149,391 @@ fi
# Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
+if test "x$CONFIG_SHELL" = x; then
+ if (eval ":") 2>/dev/null; then
+ as_have_required=yes
+else
+ as_have_required=no
+fi
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
+ if test $as_have_required = yes && (eval ":
+(as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
fi
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
- # Find who we are. Look in the path if we contain no path at all
- # relative or not.
- case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
- ;;
- esac
- # We did not find ourselves, most probably we were run as `sh COMMAND'
- # in which case we are not to be found in the path.
- if test "x$as_myself" = x; then
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
- { (exit 1); exit 1; }; }
- fi
- case $CONFIG_SHELL in
- '')
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=\$LINENO
+ as_lineno_2=\$LINENO
+ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+ :
+else
+ as_candidate_shells=
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for as_base in sh bash ksh sh5; do
- case $as_dir in
+ case $as_dir in
/*)
- if ("$as_dir/$as_base" -c '
+ for as_base in sh bash ksh sh5; do
+ as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+ done;;
+ esac
+done
+IFS=$as_save_IFS
+
+
+ for as_shell in $as_candidate_shells $SHELL; do
+ # Try only shells that exist, to save several forks.
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+ CONFIG_SHELL=$as_shell
+ as_have_required=yes
+ if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+ (exit $1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
as_lineno_1=$LINENO
as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- CONFIG_SHELL=$as_dir/$as_base
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
- fi;;
- esac
- done
-done
-;;
- esac
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+ break
+fi
+
+fi
+
+ done
+
+ if test "x$CONFIG_SHELL" != x; then
+ for as_var in BASH_ENV ENV
+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ done
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+ if test $as_have_required = no; then
+ echo This script requires a shell more modern than all the
+ echo shells that I found on your system. Please install a
+ echo modern shell, or manually run the script under such a
+ echo shell if you do have one.
+ { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+ echo No shell found that supports shell functions.
+ echo Please tell bug-autoconf@gnu.org about your system,
+ echo including any error possibly output before this message.
+ echo This can help us improve future autoconf versions.
+ echo Configuration will now proceed without shell functions.
+}
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO
# uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line before each line; the second 'sed' does the real
- # work. The second script uses 'N' to pair each line-number line
- # with the numbered line, and appends trailing '-' during
- # substitution so that $LINENO is not a special case at line end.
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
- sed '=' <$as_myself |
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
+ s/-\n.*//
' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
{ (exit 1); exit 1; }; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
-if expr a : '\(a\)' >/dev/null 2>&1; then
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
- as_ln_s='cp -p'
- else
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
else
as_ln_s='cp -p'
fi
-rm -f conf$$ conf$$.exe conf$$.file
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
@@ -224,7 +542,28 @@ else
as_mkdir_p=false
fi
-as_executable_p="test -f"
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -233,52 +572,215 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
+exec 7<&0 </dev/null 6>&1
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-exec 6>&1
-
#
# Initializations.
#
ac_default_prefix=/usr/local
+ac_clean_files=
ac_config_libobj_dir=.
+LIBOBJS=
cross_compiling=no
subdirs=
MFLAGS=
MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete. It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
# Identity of this package.
PACKAGE_NAME='xkbcomp'
PACKAGE_TARNAME='xkbcomp'
-PACKAGE_VERSION='1.0.5'
-PACKAGE_STRING='xkbcomp 1.0.5'
+PACKAGE_VERSION='1.2.0'
+PACKAGE_STRING='xkbcomp 1.2.0'
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE YACC PKG_CONFIG ac_pt_PKG_CONFIG XKBCOMP_CFLAGS XKBCOMP_LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os APP_MAN_SUFFIX LIB_MAN_SUFFIX FILE_MAN_SUFFIX MISC_MAN_SUFFIX DRIVER_MAN_SUFFIX ADMIN_MAN_SUFFIX APP_MAN_DIR LIB_MAN_DIR FILE_MAN_DIR MISC_MAN_DIR DRIVER_MAN_DIR ADMIN_MAN_DIR LIBOBJS LTLIBOBJS'
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+CYGPATH_W
+PACKAGE
+VERSION
+ACLOCAL
+AUTOCONF
+AUTOMAKE
+AUTOHEADER
+MAKEINFO
+install_sh
+STRIP
+INSTALL_STRIP_PROGRAM
+mkdir_p
+AWK
+SET_MAKE
+am__leading_dot
+AMTAR
+am__tar
+am__untar
+MAINTAINER_MODE_TRUE
+MAINTAINER_MODE_FALSE
+MAINT
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+DEPDIR
+am__include
+am__quote
+AMDEP_TRUE
+AMDEP_FALSE
+AMDEPBACKSLASH
+CCDEPMODE
+am__fastdepCC_TRUE
+am__fastdepCC_FALSE
+CPP
+GREP
+EGREP
+CWARNFLAGS
+CHANGELOG_CMD
+PKG_CONFIG
+INSTALL_CMD
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+SED
+APP_MAN_SUFFIX
+LIB_MAN_SUFFIX
+FILE_MAN_SUFFIX
+MISC_MAN_SUFFIX
+DRIVER_MAN_SUFFIX
+ADMIN_MAN_SUFFIX
+APP_MAN_DIR
+LIB_MAN_DIR
+FILE_MAN_DIR
+MISC_MAN_DIR
+DRIVER_MAN_DIR
+ADMIN_MAN_DIR
+XORG_MAN_PAGE
+MAN_SUBSTS
+AM_DEFAULT_VERBOSITY
+YACC
+YFLAGS
+YACC_INST
+XKBCOMP_CFLAGS
+XKBCOMP_LIBS
+XKBCONFIGROOT
+LIBOBJS
+LTLIBOBJS'
ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_maintainer_mode
+enable_dependency_tracking
+enable_strict_compilation
+with_xkb_config_root
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+PKG_CONFIG
+YACC
+YFLAGS
+XKBCOMP_CFLAGS
+XKBCOMP_LIBS'
+
# Initialize some variables set by options.
ac_init_help=
ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
# The variables have the same names as the options, with
# dashes changed to underlines.
cache_file=/dev/null
@@ -301,34 +803,48 @@ x_libraries=NONE
# and all the variables that are supposed to be based on exec_prefix
# by default will actually change.
# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
ac_prev=
+ac_dashdash=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
+ eval $ac_prev=\$ac_option
ac_prev=
continue
fi
- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+ case $ac_option in
+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *) ac_optarg=yes ;;
+ esac
# Accept the important Cygnus configure options, so we can diagnose typos.
- case $ac_option in
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
@@ -350,33 +866,61 @@ do
--config-cache | -C)
cache_file=config.cache ;;
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ -datadir | --datadir | --datadi | --datad)
ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
datadir=$ac_optarg ;;
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
-disable-* | --disable-*)
- ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
{ (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- eval "enable_$ac_feature=no" ;;
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
-enable-* | --enable-*)
- ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
{ (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
esac
- eval "enable_$ac_feature='$ac_optarg'" ;;
+ eval enable_$ac_useropt=\$ac_optarg ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -403,6 +947,12 @@ do
-host=* | --host=* | --hos=* | --ho=*)
host_alias=$ac_optarg ;;
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
@@ -427,13 +977,16 @@ do
| --libexe=* | --libex=* | --libe=*)
libexecdir=$ac_optarg ;;
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
-localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
+ | --localstate | --localstat | --localsta | --localst | --locals)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
@@ -498,6 +1051,16 @@ do
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name=$ac_optarg ;;
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
@@ -548,26 +1111,38 @@ do
ac_init_version=: ;;
-with-* | --with-*)
- ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
{ (exit 1); exit 1; }; }
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
esac
- eval "with_$ac_package='$ac_optarg'" ;;
+ eval with_$ac_useropt=\$ac_optarg ;;
-without-* | --without-*)
- ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
{ (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/-/_/g'`
- eval "with_$ac_package=no" ;;
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
--x)
# Obsolete; use --with-x.
@@ -587,7 +1162,7 @@ do
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries=$ac_optarg ;;
- -*) { echo "$as_me: error: unrecognized option: $ac_option
+ -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
Try \`$0 --help' for more information." >&2
{ (exit 1); exit 1; }; }
;;
@@ -596,17 +1171,16 @@ Try \`$0 --help' for more information." >&2
ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
# Reject names that are not valid shell variable names.
expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
{ (exit 1); exit 1; }; }
- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
- eval "$ac_envvar='$ac_optarg'"
+ eval $ac_envvar=\$ac_optarg
export $ac_envvar ;;
*)
# FIXME: should be removed in autoconf 3.0.
- echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
: ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
;;
@@ -615,31 +1189,39 @@ done
if test -n "$ac_prev"; then
ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { echo "$as_me: error: missing argument to $ac_option" >&2
+ { $as_echo "$as_me: error: missing argument to $ac_option" >&2
{ (exit 1); exit 1; }; }
fi
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
- [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2
+ { (exit 1); exit 1; }; } ;;
+ *) $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
-done
+fi
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
- localstatedir libdir includedir oldincludedir infodir mandir
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
do
- eval ac_val=$`echo $ac_var`
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
case $ac_val in
- [\\/$]* | ?:[\\/]* ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
esac
+ { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; }
done
# There might be people who depend on the old broken behavior: `$host'
@@ -653,7 +1235,7 @@ target=$target_alias
if test "x$host_alias" != x; then
if test "x$build_alias" = x; then
cross_compiling=maybe
- echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
If a cross compiler is detected then cross compile mode will be used." >&2
elif test "x$build_alias" != "x$host_alias"; then
cross_compiling=yes
@@ -666,82 +1248,76 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias-
test "$silent" = yes && exec 6>/dev/null
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ { $as_echo "$as_me: error: Working directory cannot be determined" >&2
+ { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
+ { (exit 1); exit 1; }; }
+
+
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
- # Try the directory containing this script, then its parent.
- ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$0" : 'X\(//\)[^/]' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
srcdir=$ac_confdir
- if test ! -r $srcdir/$ac_unique_file; then
+ if test ! -r "$srcdir/$ac_unique_file"; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
-if test ! -r $srcdir/$ac_unique_file; then
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
- { (exit 1); exit 1; }; }
- else
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
{ (exit 1); exit 1; }; }
- fi
fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
{ (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_PKG_CONFIG_set=${PKG_CONFIG+set}
-ac_env_PKG_CONFIG_value=$PKG_CONFIG
-ac_cv_env_PKG_CONFIG_set=${PKG_CONFIG+set}
-ac_cv_env_PKG_CONFIG_value=$PKG_CONFIG
-ac_env_XKBCOMP_CFLAGS_set=${XKBCOMP_CFLAGS+set}
-ac_env_XKBCOMP_CFLAGS_value=$XKBCOMP_CFLAGS
-ac_cv_env_XKBCOMP_CFLAGS_set=${XKBCOMP_CFLAGS+set}
-ac_cv_env_XKBCOMP_CFLAGS_value=$XKBCOMP_CFLAGS
-ac_env_XKBCOMP_LIBS_set=${XKBCOMP_LIBS+set}
-ac_env_XKBCOMP_LIBS_value=$XKBCOMP_LIBS
-ac_cv_env_XKBCOMP_LIBS_set=${XKBCOMP_LIBS+set}
-ac_cv_env_XKBCOMP_LIBS_value=$XKBCOMP_LIBS
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
#
# Report the --help message.
@@ -750,7 +1326,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures xkbcomp 1.0.5 to adapt to many kinds of systems.
+\`configure' configures xkbcomp 1.2.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -770,14 +1346,11 @@ Configuration:
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or \`..']
-_ACEOF
-
- cat <<_ACEOF
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
+ [$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
+ [PREFIX]
By default, \`make install' will install all the files in
\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
@@ -787,18 +1360,25 @@ for instance \`--prefix=\$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --infodir=DIR info documentation [PREFIX/info]
- --mandir=DIR man documentation [PREFIX/man]
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/xkbcomp]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
_ACEOF
cat <<\_ACEOF
@@ -816,32 +1396,44 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of xkbcomp 1.0.5:";;
+ short | recursive ) echo "Configuration of xkbcomp 1.2.0:";;
esac
cat <<\_ACEOF
Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
+ --enable-strict-compilation
+ Enable all warnings from compiler and make them
+ errors (default: disabled)
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-release-version=STRING
- Use release version string in package name
+ --with-xkb-config-root=<paths>
+ Set default XKB config root (default:
+ ${datadir}/X11/xkb)
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
- CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
- headers in a nonstandard directory <include dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
PKG_CONFIG path to pkg-config utility
+ YACC The `Yet Another C Compiler' implementation to use. Defaults to
+ the first program found out of: `bison -y', `byacc', `yacc'.
+ YFLAGS The list of arguments that will be passed by default to $YACC.
+ This script will default YFLAGS to the empty string to avoid a
+ default value of `-d' given by some make applications.
XKBCOMP_CFLAGS
C compiler flags for XKBCOMP, overriding pkg-config
XKBCOMP_LIBS
@@ -852,120 +1444,88 @@ it to find libraries and programs with nonstandard names/locations.
Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
_ACEOF
+ac_status=$?
fi
if test "$ac_init_help" = "recursive"; then
# If there are subdirs, report their specific --help.
- ac_popdir=`pwd`
for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d $ac_dir || continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
ac_builddir=.
-if test "$ac_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
case $srcdir in
- .) # No --srcdir option. We are building in place.
+ .) # We are building in place.
ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
-
- cd $ac_dir
- # Check for guested configure; otherwise get Cygnus style configure.
- if test -f $ac_srcdir/configure.gnu; then
- echo
- $SHELL $ac_srcdir/configure.gnu --help=recursive
- elif test -f $ac_srcdir/configure; then
- echo
- $SHELL $ac_srcdir/configure --help=recursive
- elif test -f $ac_srcdir/configure.ac ||
- test -f $ac_srcdir/configure.in; then
- echo
- $ac_configure --help
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
else
- echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi
- cd $ac_popdir
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
done
fi
-test -n "$ac_init_help" && exit 0
+test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-xkbcomp configure 1.0.5
-generated by GNU Autoconf 2.59
+xkbcomp configure 1.2.0
+generated by GNU Autoconf 2.62
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
- exit 0
+ exit
fi
-exec 5>config.log
-cat >&5 <<_ACEOF
+cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by xkbcomp $as_me 1.0.5, which was
-generated by GNU Autoconf 2.59. Invocation command line was
+It was created by xkbcomp $as_me 1.2.0, which was
+generated by GNU Autoconf 2.62. Invocation command line was
$ $0 $@
_ACEOF
+exec 5>>config.log
{
cat <<_ASUNAME
## --------- ##
@@ -984,7 +1544,7 @@ uname -v = `(uname -v) 2>/dev/null || echo unknown`
/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
@@ -996,8 +1556,9 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- echo "PATH: $as_dir"
+ $as_echo "PATH: $as_dir"
done
+IFS=$as_save_IFS
} >&5
@@ -1019,7 +1580,6 @@ _ACEOF
ac_configure_args=
ac_configure_args0=
ac_configure_args1=
-ac_sep=
ac_must_keep_next=false
for ac_pass in 1 2
do
@@ -1030,8 +1590,8 @@ do
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
continue ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
@@ -1052,9 +1612,7 @@ do
-* ) ac_must_keep_next=true ;;
esac
fi
- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
- # Get rid of the leading space.
- ac_sep=" "
+ ac_configure_args="$ac_configure_args '$ac_arg'"
;;
esac
done
@@ -1065,8 +1623,8 @@ $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_
# When interrupted or exit'd, cleanup temporary files, and complete
# config.log. We remove comments because anyway the quotes in there
# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
# Save into config.log some information that might help in debugging.
{
@@ -1079,20 +1637,35 @@ trap 'exit_status=$?
_ASBOX
echo
# The following way of writing the cache mishandles newlines in values,
-{
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
(set) 2>&1 |
- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
sed -n \
- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
- ;;
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
*)
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
- esac;
-}
+ esac |
+ sort
+)
echo
cat <<\_ASBOX
@@ -1103,22 +1676,28 @@ _ASBOX
echo
for ac_var in $ac_subst_vars
do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
_ASBOX
echo
for ac_var in $ac_subst_files
do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
@@ -1130,26 +1709,24 @@ _ASBOX
## ----------- ##
_ASBOX
echo
- sed "/^$/d" confdefs.h | sort
+ cat confdefs.h
echo
fi
test "$ac_signal" != 0 &&
- echo "$as_me: caught signal $ac_signal"
- echo "$as_me: exit $exit_status"
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
} >&5
- rm -f core *.core &&
- rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
exit $exit_status
- ' 0
+' 0
for ac_signal in 1 2 13 15; do
trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
done
ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
+rm -f -r conftest* confdefs.h
# Predefined preprocessor variables.
@@ -1179,18 +1756,24 @@ _ACEOF
# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ ac_site_file1=$CONFIG_SITE
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
fi
-for ac_site_file in $CONFIG_SITE; do
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
if test -r "$ac_site_file"; then
- { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
+ { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file"
fi
@@ -1200,54 +1783,61 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special
# files actually), so we avoid doing that.
if test -f "$cache_file"; then
- { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
+ { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
- [\\/]* | ?:[\\/]* ) . $cache_file;;
- *) . ./$cache_file;;
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
esac
fi
else
- { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
+ { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+for ac_var in $ac_precious_vars; do
eval ac_old_set=\$ac_cv_env_${ac_var}_set
eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val="\$ac_cv_env_${ac_var}_value"
- eval ac_new_val="\$ac_env_${ac_var}_value"
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
if test "x$ac_old_val" != "x$ac_new_val"; then
- { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
-echo "$as_me: former value: $ac_old_val" >&2;}
- { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
-echo "$as_me: current value: $ac_new_val" >&2;}
- ac_cache_corrupted=:
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -1257,19 +1847,13 @@ echo "$as_me: current value: $ac_new_val" >&2;}
fi
done
if $ac_cache_corrupted; then
- { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
{ (exit 1); exit 1; }; }
fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
@@ -1294,33 +1878,44 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
am__api_version="1.9"
ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/install-sh; then
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
break
- elif test -f $ac_dir/install.sh; then
+ elif test -f "$ac_dir/install.sh"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
- elif test -f $ac_dir/shtool; then
+ elif test -f "$ac_dir/shtool"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/shtool install -c"
break
fi
done
if test -z "$ac_aux_dir"; then
- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
{ (exit 1); exit 1; }; }
fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
@@ -1335,11 +1930,12 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# OS/2's system install, which has a completely different semantic
# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
if test -z "$INSTALL"; then
if test "${ac_cv_path_install+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -1358,7 +1954,7 @@ case $as_dir/ in
# by default.
for ac_prog in ginstall scoinst install; do
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
if test $ac_prog = install &&
grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
@@ -1368,30 +1964,43 @@ case $as_dir/ in
# program-specific install script used by HP pwplus--don't use.
:
else
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
fi
fi
done
done
;;
esac
+
done
+IFS=$as_save_IFS
+rm -rf conftest.one conftest.two conftest.dir
fi
if test "${ac_cv_path_install+set}" = set; then
INSTALL=$ac_cv_path_install
else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
# break other packages using the cache if that directory is
- # removed, or if the path is relative.
+ # removed, or if the value is a relative name.
INSTALL=$ac_install_sh
fi
fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
+{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
@@ -1402,17 +2011,14 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
test "$program_prefix" != NONE &&
- program_transform_name="s,^,$program_prefix,;$program_transform_name"
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
# Use a double $ so make ignores it.
test "$program_suffix" != NONE &&
- program_transform_name="s,\$,$program_suffix,;$program_transform_name"
-# Double any \ or $. echo might interpret backslashes.
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
# By default was `s,x,x', remove it if useless.
-cat <<\_ACEOF >conftest.sed
-s/[\\$]/&&/g;s/;s,x,x,$//
-_ACEOF
-program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
-rm conftest.sed
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
@@ -1423,8 +2029,8 @@ if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
else
am_missing_run=
- { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
-echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
fi
if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
@@ -1464,10 +2070,10 @@ for ac_prog in gawk mawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_AWK+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
if test -n "$AWK"; then
ac_cv_prog_AWK="$AWK" # Let the user override the test.
@@ -1478,54 +2084,58 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_AWK="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
AWK=$ac_cv_prog_AWK
if test -n "$AWK"; then
- echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6
+ { $as_echo "$as_me:$LINENO: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
+
test -n "$AWK" && break
done
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
else
cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
all:
- @echo 'ac_maketemp="$(MAKE)"'
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
_ACEOF
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
- eval ac_cv_prog_make_${ac_make}_set=yes
-else
- eval ac_cv_prog_make_${ac_make}_set=no
-fi
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
rm -f conftest.make
fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
SET_MAKE=
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
SET_MAKE="MAKE=${MAKE-make}"
fi
@@ -1541,8 +2151,8 @@ rmdir .tst 2>/dev/null
# test to see if srcdir already configured
if test "`cd $srcdir && pwd`" != "`pwd`" &&
test -f $srcdir/config.status; then
- { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
-echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
{ (exit 1); exit 1; }; }
fi
@@ -1558,7 +2168,7 @@ fi
# Define the identity of the package.
PACKAGE='xkbcomp'
- VERSION='1.0.5'
+ VERSION='1.2.0'
cat >>confdefs.h <<_ACEOF
@@ -1596,10 +2206,10 @@ if test "$cross_compiling" != no; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_STRIP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
if test -n "$STRIP"; then
ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
@@ -1610,34 +2220,36 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
- echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6
+ { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
+
fi
if test -z "$ac_cv_prog_STRIP"; then
ac_ct_STRIP=$STRIP
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_STRIP"; then
ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
@@ -1648,27 +2260,41 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_STRIP="strip"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
fi
fi
ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
if test -n "$ac_ct_STRIP"; then
- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
- STRIP=$ac_ct_STRIP
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
else
STRIP="$ac_cv_prog_STRIP"
fi
@@ -1688,17 +2314,17 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
-echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
-echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
- # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
- enableval="$enable_maintainer_mode"
- USE_MAINTAINER_MODE=$enableval
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
else
USE_MAINTAINER_MODE=no
-fi;
- echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
-echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+fi
+
+ { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
if test $USE_MAINTAINER_MODE = yes; then
@@ -1713,7 +2339,81 @@ fi
- ac_config_headers="$ac_config_headers config.h"
+# Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
+
+
+
+
+
+
+
+
+
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+
+
+{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
ac_ext=c
@@ -1724,10 +2424,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1738,34 +2438,36 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
+
fi
if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -1776,38 +2478,53 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CC="gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
- CC=$ac_ct_CC
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
else
CC="$ac_cv_prog_CC"
fi
if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1818,76 +2535,36 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-fi
+ fi
fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1899,17 +2576,18 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
@@ -1927,24 +2605,25 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
+
fi
if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
- for ac_prog in cl
+ for ac_prog in cl.exe
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1955,38 +2634,40 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
+
test -n "$CC" && break
done
fi
if test -z "$CC"; then
ac_ct_CC=$CC
- for ac_prog in cl
+ for ac_prog in cl.exe
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -1997,58 +2678,92 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
+
test -n "$ac_ct_CC" && break
done
- CC=$ac_ct_CC
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
fi
fi
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compiler --version >&5") 2>&5
ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compiler -v >&5") 2>&5
ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compiler -V >&5") 2>&5
ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
cat >conftest.$ac_ext <<_ACEOF
@@ -2067,111 +2782,146 @@ main ()
}
_ACEOF
ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
- (eval $ac_link_default) 2>&5
+{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link_default") 2>&5
ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- # Find the output, starting from the most likely. This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
do
test -f "$ac_file" || continue
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
- ;;
- conftest.$ac_ext )
- # This is the source file.
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
;;
[ab].out )
# We found the default executable, but exeext='' is most
# certainly right.
break;;
*.* )
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- # FIXME: I believe we export ac_cv_exeext for Libtool,
- # but it would be cool to find out if it's true. Does anybody
- # maintain Libtool? --akim.
- export ac_cv_exeext
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
break;;
* )
break;;
esac
done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
else
- echo "$as_me: failed program was:" >&5
+ ac_file=''
+fi
+
+{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then
+ $as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
+$as_echo "$as_me: error: C compiler cannot create executables
See \`config.log' for more details." >&2;}
{ (exit 77); exit 77; }; }
fi
ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-# Check the compiler produces executables we can run. If not, either
+# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
# If not cross compiling, check that we can run a simple program.
if test "$cross_compiling" != yes; then
if { ac_try='./$ac_file'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+ { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
+$as_echo "$as_me: error: cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
fi
fi
fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run. If not, either
+# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
@@ -2180,32 +2930,31 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
for ac_file in conftest.exe conftest conftest.*; do
test -f "$ac_file" || continue
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
*.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- export ac_cv_exeext
break;;
* ) break;;
esac
done
else
- { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+ { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
fi
rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
if test "${ac_cv_objext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -2223,39 +2972,46 @@ main ()
}
_ACEOF
rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>&5
ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
*) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
break;;
esac
done
else
- echo "$as_me: failed program was:" >&5
+ $as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
+$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
if test "${ac_cv_c_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -2276,50 +3032,54 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
ac_compiler_gnu=yes
else
- echo "$as_me: failed program was:" >&5
+ $as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_compiler_gnu=no
+ ac_compiler_gnu=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
ac_test_CFLAGS=${CFLAGS+set}
ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
if test "${ac_cv_prog_cc_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -2335,38 +3095,121 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_g=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ CFLAGS=""
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
ac_cv_prog_cc_g=yes
else
- echo "$as_me: failed program was:" >&5
+ $as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_prog_cc_g=no
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
if test "$ac_test_CFLAGS" = set; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
@@ -2382,12 +3225,12 @@ else
CFLAGS=
fi
fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+ $as_echo_n "(cached) " >&6
else
- ac_cv_prog_cc_stdc=no
+ ac_cv_prog_cc_c89=no
ac_save_CC=$CC
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -2421,12 +3264,17 @@ static char *f (char * (*g) (char **, int), char **p, ...)
/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
function prototypes and stuff, but not '\xHH' hex character constants.
These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std1 is added to get
+ as 'x'. The following induces an error, until -std is added to get
proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std1. */
+ that's true only with -std. */
int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
int test (int i, double x);
struct s1 {int (*f) (int a);};
struct s2 {int (*f) (double a);};
@@ -2441,282 +3289,70 @@ return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
return 0;
}
_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX 10.20 and later -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_stdc=$ac_arg
-break
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_c89=$ac_arg
else
- echo "$as_me: failed program was:" >&5
+ $as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext
+
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
done
-rm -f conftest.$ac_ext conftest.$ac_objext
+rm -f conftest.$ac_ext
CC=$ac_save_CC
fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
*)
- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
- CC="$CC $ac_cv_prog_cc_stdc" ;;
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
esac
-# Some people use a C++ compiler to compile C. Since we use `exit',
-# in C++ we need to declare it. In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
- choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- for ac_declaration in \
- '' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
-fi
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-DEPDIR="${am__leading_dot}deps"
-
- ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
- @echo done
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
- am__include=include
- am__quote=
- _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
- am__include=.include
- am__quote="\""
- _am_result=BSD
- fi
-fi
-
-
-echo "$as_me:$LINENO: result: $_am_result" >&5
-echo "${ECHO_T}$_am_result" >&6
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then
- enableval="$enable_dependency_tracking"
-
-fi;
-if test "x$enable_dependency_tracking" != xno; then
- am_depcomp="$ac_aux_dir/depcomp"
- AMDEPBACKSLASH='\'
-fi
-
-
-if test "x$enable_dependency_tracking" != xno; then
- AMDEP_TRUE=
- AMDEP_FALSE='#'
-else
- AMDEP_TRUE='#'
- AMDEP_FALSE=
-fi
-
-
-
depcc="$CC" am_compiler_list=
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
# We make a subdir and do the tests there. Otherwise we can end up
@@ -2803,8 +3439,8 @@ else
fi
fi
-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
@@ -2820,138 +3456,838 @@ else
fi
-for ac_prog in 'bison -y' byacc
+ { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C99" >&5
+$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
+if test "${ac_cv_prog_cc_c99+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+ your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static void
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str;
+ int number;
+ float fnumber;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case 's': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case 'd': // int
+ number = va_arg (args_copy, int);
+ break;
+ case 'f': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+}
+
+int
+main ()
+{
+
+ // Check bool.
+ _Bool success = false;
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ test_varargs ("s, d' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+ || dynamic_array[ni.number - 1] != 543);
+
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99
do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_YACC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_c99=$ac_arg
else
- if test -n "$YACC"; then
- ac_cv_prog_YACC="$YACC" # Let the user override the test.
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c99" in
+ x)
+ { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c99"
+ { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c99" >&5
+$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
+esac
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ $as_echo_n "(cached) " >&6
else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_YACC="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ # Broken: success on invalid input.
+continue
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
fi
-YACC=$ac_cv_prog_YACC
-if test -n "$YACC"; then
- echo "$as_me:$LINENO: result: $YACC" >&5
-echo "${ECHO_T}$YACC" >&6
+{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ :
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
fi
- test -n "$YACC" && break
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ # Broken: success on invalid input.
+continue
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
done
-test -n "$YACC" || YACC="yacc"
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+ $as_echo_n "(cached) " >&6
else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- done
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
done
- ;;
+ done
+done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stdc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_header_stdc=no
fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the path is relative.
- INSTALL=$ac_install_sh
- fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
+rm -f conftest*
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+fi
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test `eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
-# Checks for pkg-config packages
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
case $PKG_CONFIG in
[\\/]* | ?:[\\/]*)
@@ -2964,36 +4300,37 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-
if test -n "$PKG_CONFIG"; then
- echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-echo "${ECHO_T}$PKG_CONFIG" >&6
+ { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
+
fi
if test -z "$ac_cv_path_PKG_CONFIG"; then
ac_pt_PKG_CONFIG=$PKG_CONFIG
# Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ $as_echo_n "(cached) " >&6
else
case $ac_pt_PKG_CONFIG in
[\\/]* | ?:[\\/]*)
@@ -3006,28 +4343,42 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
-
if test -n "$ac_pt_PKG_CONFIG"; then
- echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
-echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6
+ { $as_echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
- PKG_CONFIG=$ac_pt_PKG_CONFIG
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
else
PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
fi
@@ -3035,184 +4386,433 @@ fi
fi
if test -n "$PKG_CONFIG"; then
_pkg_min_version=0.9.0
- echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
-echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6
+ { $as_echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
PKG_CONFIG=""
fi
fi
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+ { (exit 1); exit 1; }; }
-pkg_failed=no
-echo "$as_me:$LINENO: checking for XKBCOMP" >&5
-echo $ECHO_N "checking for XKBCOMP... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
-if test -n "$PKG_CONFIG"; then
- if test -n "$XKBCOMP_CFLAGS"; then
- pkg_cv_XKBCOMP_CFLAGS="$XKBCOMP_CFLAGS"
- else
- if test -n "$PKG_CONFIG" && \
- { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"x11 xkbfile\"") >&5
- ($PKG_CONFIG --exists --print-errors "x11 xkbfile") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- pkg_cv_XKBCOMP_CFLAGS=`$PKG_CONFIG --cflags "x11 xkbfile" 2>/dev/null`
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+$as_echo "$as_me: error: invalid value of canonical build" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:$LINENO: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then
+ $as_echo_n "(cached) " >&6
else
- pkg_failed=yes
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+$as_echo "$as_me: error: invalid value of canonical host" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ $as_unset ac_script || ac_script=
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
else
- pkg_failed=untried
+ ac_cv_path_SED=$SED
fi
-if test -n "$PKG_CONFIG"; then
- if test -n "$XKBCOMP_LIBS"; then
- pkg_cv_XKBCOMP_LIBS="$XKBCOMP_LIBS"
- else
- if test -n "$PKG_CONFIG" && \
- { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"x11 xkbfile\"") >&5
- ($PKG_CONFIG --exists --print-errors "x11 xkbfile") 2>&5
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+
+
+
+
+if test "x$GCC" = xyes ; then
+ CWARNFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \
+-Wmissing-declarations -Wnested-externs -fno-strict-aliasing \
+-Wbad-function-cast -Wformat=2"
+ case `$CC -dumpversion` in
+ 3.4.* | 4.*)
+ CWARNFLAGS="$CWARNFLAGS -Wold-style-definition -Wdeclaration-after-statement"
+ ;;
+ esac
+else
+ { $as_echo "$as_me:$LINENO: checking whether __SUNPRO_C is declared" >&5
+$as_echo_n "checking whether __SUNPRO_C is declared... " >&6; }
+if test "${ac_cv_have_decl___SUNPRO_C+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef __SUNPRO_C
+ (void) __SUNPRO_C;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- pkg_cv_XKBCOMP_LIBS=`$PKG_CONFIG --libs "x11 xkbfile" 2>/dev/null`
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl___SUNPRO_C=yes
else
- pkg_failed=yes
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl___SUNPRO_C=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl___SUNPRO_C" >&5
+$as_echo "$ac_cv_have_decl___SUNPRO_C" >&6; }
+if test $ac_cv_have_decl___SUNPRO_C = yes; then
+ SUNCC="yes"
+else
+ SUNCC="no"
fi
+
+ if test "x$SUNCC" = "xyes"; then
+ CWARNFLAGS="-v"
fi
+fi
+
+
+
+# If the module's configure.ac calls AC_PROG_CC later on, CC gets set to C89
+
+
+
+# Check whether --enable-strict-compilation was given.
+if test "${enable_strict_compilation+set}" = set; then
+ enableval=$enable_strict_compilation; STRICT_COMPILE=$enableval
else
- pkg_failed=untried
+ STRICT_COMPILE=no
fi
+if test "x$STRICT_COMPILE" = "xyes"; then
+ { $as_echo "$as_me:$LINENO: checking whether __SUNPRO_C is declared" >&5
+$as_echo_n "checking whether __SUNPRO_C is declared... " >&6; }
+if test "${ac_cv_have_decl___SUNPRO_C+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef __SUNPRO_C
+ (void) __SUNPRO_C;
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl___SUNPRO_C=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-if test $pkg_failed = yes; then
+ ac_cv_have_decl___SUNPRO_C=no
+fi
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl___SUNPRO_C" >&5
+$as_echo "$ac_cv_have_decl___SUNPRO_C" >&6; }
+if test $ac_cv_have_decl___SUNPRO_C = yes; then
+ SUNCC="yes"
else
- _pkg_short_errors_supported=no
+ SUNCC="no"
fi
- if test $_pkg_short_errors_supported = yes; then
- XKBCOMP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "x11 xkbfile"`
- else
- XKBCOMP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "x11 xkbfile"`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$XKBCOMP_PKG_ERRORS" >&5
- { { echo "$as_me:$LINENO: error: Package requirements (x11 xkbfile) were not met:
+ { $as_echo "$as_me:$LINENO: checking whether __INTEL_COMPILER is declared" >&5
+$as_echo_n "checking whether __INTEL_COMPILER is declared... " >&6; }
+if test "${ac_cv_have_decl___INTEL_COMPILER+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef __INTEL_COMPILER
+ (void) __INTEL_COMPILER;
+#endif
-$XKBCOMP_PKG_ERRORS
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl___INTEL_COMPILER=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
+ ac_cv_have_decl___INTEL_COMPILER=no
+fi
-Alternatively, you may set the environment variables XKBCOMP_CFLAGS
-and XKBCOMP_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" >&5
-echo "$as_me: error: Package requirements (x11 xkbfile) were not met:
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl___INTEL_COMPILER" >&5
+$as_echo "$ac_cv_have_decl___INTEL_COMPILER" >&6; }
+if test $ac_cv_have_decl___INTEL_COMPILER = yes; then
+ INTELCC="yes"
+else
+ INTELCC="no"
+fi
-$XKBCOMP_PKG_ERRORS
+ if test "x$GCC" = xyes ; then
+ STRICT_CFLAGS="-pedantic -Werror"
+ elif test "x$SUNCC" = "xyes"; then
+ STRICT_CFLAGS="-errwarn"
+ elif test "x$INTELCC" = "xyes"; then
+ STRICT_CFLAGS="-Werror"
+ fi
+fi
+CWARNFLAGS="$CWARNFLAGS $STRICT_CFLAGS"
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-Alternatively, you may set the environment variables XKBCOMP_CFLAGS
-and XKBCOMP_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" >&2;}
- { (exit 1); exit 1; }; }
-elif test $pkg_failed = untried; then
- { { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-Alternatively, you may set the environment variables XKBCOMP_CFLAGS
-and XKBCOMP_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
-See \`config.log' for more details." >&5
-echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION_MAJOR `echo $PACKAGE_VERSION | cut -d . -f 1`
+_ACEOF
-Alternatively, you may set the environment variables XKBCOMP_CFLAGS
-and XKBCOMP_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
+ PVM=`echo $PACKAGE_VERSION | cut -d . -f 2 | cut -d - -f 1`
+ if test "x$PVM" = "x"; then
+ PVM="0"
+ fi
-To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
- XKBCOMP_CFLAGS=$pkg_cv_XKBCOMP_CFLAGS
- XKBCOMP_LIBS=$pkg_cv_XKBCOMP_LIBS
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- :
-fi
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION_MINOR $PVM
+_ACEOF
+ PVP=`echo $PACKAGE_VERSION | cut -d . -f 3 | cut -d - -f 1`
+ if test "x$PVP" = "x"; then
+ PVP="0"
+ fi
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION_PATCHLEVEL $PVP
+_ACEOF
-# Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
- { (exit 1); exit 1; }; }
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
-if test "${ac_cv_build+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
- ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
- { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
- { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
-build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp && \
+mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \
+|| (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \
+echo 'git directory not found: installing possibly empty changelog.' >&2)"
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
-if test "${ac_cv_host+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
- ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
-host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros`
+INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \
+mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \
+|| (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \
+echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)"
+
@@ -3286,47 +4886,373 @@ fi
+XORG_MAN_PAGE="X Version 11"
+
+MAN_SUBSTS="\
+ -e 's|__vendorversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \
+ -e 's|__xorgversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \
+ -e 's|__xservername__|Xorg|g' \
+ -e 's|__xconfigfile__|xorg.conf|g' \
+ -e 's|__projectroot__|\$(prefix)|g' \
+ -e 's|__apploaddir__|\$(appdefaultdir)|g' \
+ -e 's|__appmansuffix__|\$(APP_MAN_SUFFIX)|g' \
+ -e 's|__drivermansuffix__|\$(DRIVER_MAN_SUFFIX)|g' \
+ -e 's|__adminmansuffix__|\$(ADMIN_MAN_SUFFIX)|g' \
+ -e 's|__libmansuffix__|\$(LIB_MAN_SUFFIX)|g' \
+ -e 's|__miscmansuffix__|\$(MISC_MAN_SUFFIX)|g' \
+ -e 's|__filemansuffix__|\$(FILE_MAN_SUFFIX)|g'"
+
+
+AM_DEFAULT_VERBOSITY=1
-# Check whether --with-release-version or --without-release-version was given.
-if test "${with_release_version+set}" = set; then
- withval="$with_release_version"
- RELEASE_VERSION="$withval"
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+for ac_prog in 'bison -y' byacc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_YACC+set}" = set; then
+ $as_echo_n "(cached) " >&6
else
- RELEASE_VERSION=""
-fi;
- if test "x$RELEASE_VERSION" != "x"; then
- PACKAGE="$PACKAGE-$RELEASE_VERSION"
- PACKAGE_TARNAME="$PACKAGE_TARNAME-$RELEASE_VERSION"
- { echo "$as_me:$LINENO: Building with package name set to $PACKAGE" >&5
-echo "$as_me: Building with package name set to $PACKAGE" >&6;}
- fi
+ if test -n "$YACC"; then
+ ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_YACC="$ac_prog"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION_MAJOR `echo $PACKAGE_VERSION | cut -d . -f 1`
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+ { $as_echo "$as_me:$LINENO: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+# Extract the first word of "$YACC", so it can be a program name with args.
+set dummy $YACC; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_YACC_INST+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ case $YACC_INST in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_YACC_INST="$YACC_INST" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_YACC_INST="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+YACC_INST=$ac_cv_path_YACC_INST
+if test -n "$YACC_INST"; then
+ { $as_echo "$as_me:$LINENO: result: $YACC_INST" >&5
+$as_echo "$YACC_INST" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+as_ac_File=`$as_echo "ac_cv_file_$srcdir/xkbparse.c" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $srcdir/xkbparse.c" >&5
+$as_echo_n "checking for $srcdir/xkbparse.c... " >&6; }
+if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ test "$cross_compiling" = yes &&
+ { { $as_echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
+$as_echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
+ { (exit 1); exit 1; }; }
+if test -r "$srcdir/xkbparse.c"; then
+ eval "$as_ac_File=yes"
+else
+ eval "$as_ac_File=no"
+fi
+fi
+ac_res=`eval 'as_val=${'$as_ac_File'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test `eval 'as_val=${'$as_ac_File'}
+ $as_echo "$as_val"'` = yes; then
+ :
+else
+ test -z "$YACC_INST" && { { $as_echo "$as_me:$LINENO: error: yacc not found - unable to compile xkbparse.y" >&5
+$as_echo "$as_me: error: yacc not found - unable to compile xkbparse.y" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+for ac_func in strdup strcasecmp
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
- PVM=`echo $PACKAGE_VERSION | cut -d . -f 2 | cut -d - -f 1`
- if test "x$PVM" = "x"; then
- PVM="0"
- fi
+#undef $ac_func
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION_MINOR $PVM
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
- PVP=`echo $PACKAGE_VERSION | cut -d . -f 3 | cut -d - -f 1`
- if test "x$PVP" = "x"; then
- PVP="0"
- fi
+ eval "$as_ac_var=no"
+fi
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION_PATCHLEVEL $PVP
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test `eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
+fi
+done
+
+
+# Checks for pkg-config packages
+
+pkg_failed=no
+{ $as_echo "$as_me:$LINENO: checking for XKBCOMP" >&5
+$as_echo_n "checking for XKBCOMP... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$XKBCOMP_CFLAGS"; then
+ pkg_cv_XKBCOMP_CFLAGS="$XKBCOMP_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"x11 xkbfile\"") >&5
+ ($PKG_CONFIG --exists --print-errors "x11 xkbfile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ pkg_cv_XKBCOMP_CFLAGS=`$PKG_CONFIG --cflags "x11 xkbfile" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$XKBCOMP_LIBS"; then
+ pkg_cv_XKBCOMP_LIBS="$XKBCOMP_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"x11 xkbfile\"") >&5
+ ($PKG_CONFIG --exists --print-errors "x11 xkbfile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ pkg_cv_XKBCOMP_LIBS=`$PKG_CONFIG --libs "x11 xkbfile" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ XKBCOMP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "x11 xkbfile"`
+ else
+ XKBCOMP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "x11 xkbfile"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$XKBCOMP_PKG_ERRORS" >&5
+
+ { { $as_echo "$as_me:$LINENO: error: Package requirements (x11 xkbfile) were not met:
+
+$XKBCOMP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables XKBCOMP_CFLAGS
+and XKBCOMP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+$as_echo "$as_me: error: Package requirements (x11 xkbfile) were not met:
+
+$XKBCOMP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables XKBCOMP_CFLAGS
+and XKBCOMP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+ { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+ { { $as_echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables XKBCOMP_CFLAGS
+and XKBCOMP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables XKBCOMP_CFLAGS
+and XKBCOMP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ XKBCOMP_CFLAGS=$pkg_cv_XKBCOMP_CFLAGS
+ XKBCOMP_LIBS=$pkg_cv_XKBCOMP_LIBS
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+fi
+
+
+# Check whether --with-xkb_config_root was given.
+if test "${with_xkb_config_root+set}" = set; then
+ withval=$with_xkb_config_root; XKBCONFIGROOT="$withval"
+else
+ XKBCONFIGROOT='${datadir}/X11/xkb'
+fi
+
- ac_config_files="$ac_config_files Makefile"
+
+ac_config_files="$ac_config_files Makefile"
+
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
@@ -3345,39 +5271,59 @@ _ACEOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
+# So, we kill variables containing newlines.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
-{
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
+
(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote
# substitution turns \\\\ into \\, and sed turns \\ into \).
sed -n \
"s/'/'\\\\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;;
+ ;; #(
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
- esac;
-} |
+ esac |
+ sort
+) |
sed '
+ /^ac_cv_env_/b end
t clear
- : clear
+ :clear
s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
t end
- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
- if test -w $cache_file; then
- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+ { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
cat confcache >$cache_file
else
- echo "not updating unwritable cache $cache_file"
+ { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -3386,32 +5332,18 @@ test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[ ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[ ]*$//;
-}'
-fi
-
DEFS=-DHAVE_CONFIG_H
ac_libobjs=
ac_ltlibobjs=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
- ac_i=`echo "$ac_i" |
- sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
- # 2. Add them.
- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
done
LIBOBJS=$ac_libobjs
@@ -3419,33 +5351,34 @@ LTLIBOBJS=$ac_ltlibobjs
if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+ { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+$as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
- { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+ { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"AMDEP\" was never defined.
+$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
- { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+ { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
+{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
#! $SHELL
# Generated by $as_me.
# Run this file to recreate the current configuration.
@@ -3458,22 +5391,78 @@ ac_cs_silent=false
SHELL=\${CONFIG_SHELL-$SHELL}
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
## --------------------- ##
## M4sh Initialization. ##
## --------------------- ##
-# Be Bourne compatible
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
fi
-DUALCASE=1; export DUALCASE # for MKS sh
# Support unset when possible.
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
@@ -3483,33 +5472,60 @@ else
fi
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
PS1='$ '
PS2='> '
PS4='+ '
# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- $as_unset $as_var
- fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
@@ -3517,159 +5533,122 @@ fi
# Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
-
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
+# CDPATH.
+$as_unset CDPATH
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
as_lineno_1=$LINENO
as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
- # Find who we are. Look in the path if we contain no path at all
- # relative or not.
- case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
- ;;
- esac
- # We did not find ourselves, most probably we were run as `sh COMMAND'
- # in which case we are not to be found in the path.
- if test "x$as_myself" = x; then
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
- { (exit 1); exit 1; }; }
- fi
- case $CONFIG_SHELL in
- '')
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for as_base in sh bash ksh sh5; do
- case $as_dir in
- /*)
- if ("$as_dir/$as_base" -c '
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- CONFIG_SHELL=$as_dir/$as_base
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
- fi;;
- esac
- done
-done
-;;
- esac
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO
# uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line before each line; the second 'sed' does the real
- # work. The second script uses 'N' to pair each line-number line
- # with the numbered line, and appends trailing '-' during
- # substitution so that $LINENO is not a special case at line end.
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
- sed '=' <$as_myself |
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
+ s/-\n.*//
' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
{ (exit 1); exit 1; }; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
-if expr a : '\(a\)' >/dev/null 2>&1; then
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
- as_ln_s='cp -p'
- else
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
else
as_ln_s='cp -p'
fi
-rm -f conf$$ conf$$.exe conf$$.file
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
@@ -3678,7 +5657,28 @@ else
as_mkdir_p=false
fi
-as_executable_p="test -f"
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -3687,31 +5687,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
exec 6>&1
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# Save the log message, to keep $[0] and so on meaningful, and to
# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling. Logging --version etc. is OK.
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by xkbcomp $as_me 1.0.5, which was
-generated by GNU Autoconf 2.59. Invocation command line was
+# values after options handling.
+ac_log="
+This file was extended by xkbcomp $as_me 1.2.0, which was
+generated by GNU Autoconf 2.62. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -3719,30 +5702,20 @@ generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_COMMANDS = $CONFIG_COMMANDS
$ $0 $@
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# Files that config.status was made for.
-if test -n "$ac_config_files"; then
- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
-if test -n "$ac_config_links"; then
- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
ac_cs_usage="\
\`$as_me' instantiates files from templates according to the
current configuration.
@@ -3750,14 +5723,14 @@ current configuration.
Usage: $0 [OPTIONS] [FILE]...
-h, --help print this help, then exit
- -V, --version print version number, then exit
+ -V, --version print version number and configuration settings, then exit
-q, --quiet do not print progress messages
-d, --debug don't remove temporary files
--recheck update $as_me by reconfiguring in the same conditions
--file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
+ instantiate the configuration file FILE
--header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
+ instantiate the configuration header FILE
Configuration files:
$config_files
@@ -3769,83 +5742,83 @@ Configuration commands:
$config_commands
Report bugs to <bug-autoconf@gnu.org>."
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
-xkbcomp config.status 1.0.5
-configured by $0, generated by GNU Autoconf 2.59,
- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+xkbcomp config.status 1.2.0
+configured by $0, generated by GNU Autoconf 2.62,
+ with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 2008 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value. By we need to know if files were specified by the user.
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
ac_need_defaults=:
while test $# != 0
do
case $1 in
--*=*)
- ac_option=`expr "x$1" : 'x\([^=]*\)='`
- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
ac_shift=:
;;
- -*)
+ *)
ac_option=$1
ac_optarg=$2
ac_shift=shift
;;
- *) # This is not an option, so the user has probably given explicit
- # arguments.
- ac_option=$1
- ac_need_defaults=false;;
esac
case $ac_option in
# Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
- --version | --vers* | -V )
- echo "$ac_cs_version"; exit 0 ;;
- --he | --h)
- # Conflict between --help and --header
- { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
- echo "$ac_cs_usage"; exit 0 ;;
- --debug | --d* | -d )
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
- CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
ac_need_defaults=false;;
--header | --heade | --head | --hea )
$ac_shift
- CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ { $as_echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
# This is an error.
- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
+ -*) { $as_echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
{ (exit 1); exit 1; }; } ;;
- *) ac_config_targets="$ac_config_targets $1" ;;
+ *) ac_config_targets="$ac_config_targets $1"
+ ac_need_defaults=false ;;
esac
shift
@@ -3859,39 +5832,53 @@ if $ac_cs_silent; then
fi
_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
fi
_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
-cat >>$CONFIG_STATUS <<_ACEOF
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
#
-# INIT-COMMANDS section.
+# INIT-COMMANDS
#
-
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF
+# Handling of arguments.
for ac_config_target in $ac_config_targets
do
- case "$ac_config_target" in
- # Handling of arguments.
- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ case $ac_config_target in
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+ *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
{ (exit 1); exit 1; }; };;
esac
done
+
# If the user did not use the arguments to specify the items to instantiate,
# then the envvar interface is used. Set only those that are not.
# We use the long form for the default assignment because of an extremely
@@ -3903,740 +5890,634 @@ if $ac_need_defaults; then
fi
# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
+# simply because there is no reason against having it here, and in addition,
# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
trap '{ (exit 1); exit 1; }' 1 2 13 15
}
-
# Create a (secure) tmp directory for tmp files.
{
- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
test -n "$tmp" && test -d "$tmp"
} ||
{
- tmp=./confstat$$-$RANDOM
- (umask 077 && mkdir $tmp)
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
} ||
{
- echo "$me: cannot create a temporary directory in ." >&2
+ $as_echo "$as_me: cannot create a temporary directory in ." >&2
{ (exit 1); exit 1; }
}
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=' '
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-#
-# CONFIG_FILES section.
-#
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
- # Protect against being on the right side of a sed subst in config.status.
- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@SHELL@,$SHELL,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@DEFS@,$DEFS,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@LIBS@,$LIBS,;t t
-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-s,@CYGPATH_W@,$CYGPATH_W,;t t
-s,@PACKAGE@,$PACKAGE,;t t
-s,@VERSION@,$VERSION,;t t
-s,@ACLOCAL@,$ACLOCAL,;t t
-s,@AUTOCONF@,$AUTOCONF,;t t
-s,@AUTOMAKE@,$AUTOMAKE,;t t
-s,@AUTOHEADER@,$AUTOHEADER,;t t
-s,@MAKEINFO@,$MAKEINFO,;t t
-s,@install_sh@,$install_sh,;t t
-s,@STRIP@,$STRIP,;t t
-s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
-s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
-s,@mkdir_p@,$mkdir_p,;t t
-s,@AWK@,$AWK,;t t
-s,@SET_MAKE@,$SET_MAKE,;t t
-s,@am__leading_dot@,$am__leading_dot,;t t
-s,@AMTAR@,$AMTAR,;t t
-s,@am__tar@,$am__tar,;t t
-s,@am__untar@,$am__untar,;t t
-s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
-s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
-s,@MAINT@,$MAINT,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@DEPDIR@,$DEPDIR,;t t
-s,@am__include@,$am__include,;t t
-s,@am__quote@,$am__quote,;t t
-s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
-s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
-s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
-s,@CCDEPMODE@,$CCDEPMODE,;t t
-s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
-s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
-s,@YACC@,$YACC,;t t
-s,@PKG_CONFIG@,$PKG_CONFIG,;t t
-s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t
-s,@XKBCOMP_CFLAGS@,$XKBCOMP_CFLAGS,;t t
-s,@XKBCOMP_LIBS@,$XKBCOMP_LIBS,;t t
-s,@build@,$build,;t t
-s,@build_cpu@,$build_cpu,;t t
-s,@build_vendor@,$build_vendor,;t t
-s,@build_os@,$build_os,;t t
-s,@host@,$host,;t t
-s,@host_cpu@,$host_cpu,;t t
-s,@host_vendor@,$host_vendor,;t t
-s,@host_os@,$host_os,;t t
-s,@APP_MAN_SUFFIX@,$APP_MAN_SUFFIX,;t t
-s,@LIB_MAN_SUFFIX@,$LIB_MAN_SUFFIX,;t t
-s,@FILE_MAN_SUFFIX@,$FILE_MAN_SUFFIX,;t t
-s,@MISC_MAN_SUFFIX@,$MISC_MAN_SUFFIX,;t t
-s,@DRIVER_MAN_SUFFIX@,$DRIVER_MAN_SUFFIX,;t t
-s,@ADMIN_MAN_SUFFIX@,$ADMIN_MAN_SUFFIX,;t t
-s,@APP_MAN_DIR@,$APP_MAN_DIR,;t t
-s,@LIB_MAN_DIR@,$LIB_MAN_DIR,;t t
-s,@FILE_MAN_DIR@,$FILE_MAN_DIR,;t t
-s,@MISC_MAN_DIR@,$MISC_MAN_DIR,;t t
-s,@DRIVER_MAN_DIR@,$DRIVER_MAN_DIR,;t t
-s,@ADMIN_MAN_DIR@,$ADMIN_MAN_DIR,;t t
-s,@LIBOBJS@,$LIBOBJS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
- cat >>$CONFIG_STATUS <<\_ACEOF
- # Split the substitutions into bite-sized pieces for seds with
- # small command number limits, like on Digital OSF/1 and HP-UX.
- ac_max_sed_lines=48
- ac_sed_frag=1 # Number of current file.
- ac_beg=1 # First line for current file.
- ac_end=$ac_max_sed_lines # Line after last line for current file.
- ac_more_lines=:
- ac_sed_cmds=
- while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- else
- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- fi
- if test ! -s $tmp/subs.frag; then
- ac_more_lines=false
- else
- # The purpose of the label and of the branching condition is to
- # speed up the sed processing (if there are no `@' at all, there
- # is no need to browse any of the substitutions).
- # These are the two extra sed commands mentioned above.
- (echo ':t
- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
- fi
- ac_sed_frag=`expr $ac_sed_frag + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_lines`
- fi
- done
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
- fi
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
+$as_echo "$as_me: error: could not setup config files machinery" >&2;}
+ { (exit 1); exit 1; }; }
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[ ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
fi # test -n "$CONFIG_FILES"
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_t"; then
+ break
+ elif $ac_last_try; then
+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", line, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
+$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
+ { (exit 1); exit 1; }; }
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+$as_echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+ { (exit 1); exit 1; }; };;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ ac_file_inputs="$ac_file_inputs '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; } ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir="$ac_dir"
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
{ (exit 1); exit 1; }; }; }
-
ac_builddir=.
-if test "$ac_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
case $srcdir in
- .) # No --srcdir option. We are building in place.
+ .) # We are building in place.
ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
case $INSTALL in
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
esac
+_ACEOF
- if test x"$ac_file" != x-; then
- { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
- rm -f "$ac_file"
- fi
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- configure_input=
- else
- configure_input="$ac_file. "
- fi
- configure_input=$configure_input"Generated from `echo $ac_file_in |
- sed 's,.*/,,'` by configure."
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
- sed "$ac_vpsub
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
$extrasub
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
:t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
- rm -f $tmp/stdin
- if test x"$ac_file" != x-; then
- mv $tmp/out $ac_file
- else
- cat $tmp/out
- rm -f $tmp/out
- fi
-
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
-#
-# CONFIG_HEADER section.
-#
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&2;}
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='[ ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ rm -f "$tmp/stdin"
case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
- esac
-
- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- # Do quote $f, to prevent DOS paths from being IFS'd.
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ esac \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
{ (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
- # Remove the trailing spaces.
- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h. The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status. Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless. Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments. This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo ' :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
- # Write a limited-size here document to $tmp/defines.sed.
- echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#define' lines.
- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/defines.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
- rm -f conftest.defines
- mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo ' fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
- # Write a limited-size here document to $tmp/undefs.sed.
- echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#undef'
- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/undefs.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
- rm -f conftest.undefs
- mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\_ACEOF
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- echo "/* Generated by configure. */" >$tmp/config.h
- else
- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
- fi
- cat $tmp/in >>$tmp/config.h
- rm -f $tmp/in
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
if test x"$ac_file" != x-; then
- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
- { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+ } >"$tmp/config.h" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
+ if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
else
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- rm -f $ac_file
- mv $tmp/config.h $ac_file
+ rm -f "$ac_file"
+ mv "$tmp/config.h" "$ac_file" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
fi
else
- cat $tmp/config.h
- rm -f $tmp/config.h
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
+$as_echo "$as_me: error: could not create -" >&2;}
+ { (exit 1); exit 1; }; }
fi
-# Compute $ac_file's index in $config_headers.
+# Compute "$ac_file"'s index in $config_headers.
_am_stamp_count=1
for _am_header in $config_headers :; do
case $_am_header in
- $ac_file | $ac_file:* )
+ "$ac_file" | "$ac_file":* )
break ;;
* )
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
esac
done
-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
-$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X$ac_file : 'X\(//\)[^/]' \| \
- X$ac_file : 'X\(//\)$' \| \
- X$ac_file : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X$ac_file |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`/stamp-h$_am_stamp_count
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_COMMANDS section.
-#
-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
- ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_dest" : 'X\(//\)[^/]' \| \
- X"$ac_dest" : 'X\(//\)$' \| \
- X"$ac_dest" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_dest" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- ac_builddir=.
-
-if test "$ac_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
+echo "timestamp for "$ac_file"" >`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
+ :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
-echo "$as_me: executing $ac_dest commands" >&6;}
- case $ac_dest in
- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
# Strip MF so we end up with the name of the file.
mf=`echo "$mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile or not.
@@ -4646,18 +6527,29 @@ echo "$as_me: executing $ac_dest commands" >&6;}
# each Makefile.in and add a new line on top of each file to say so.
# So let's grep whole file.
if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
- dirpart=`(dirname "$mf") 2>/dev/null ||
+ dirpart=`$as_dirname -- "$mf" ||
$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$mf" : 'X\(//\)[^/]' \| \
X"$mf" : 'X\(//\)$' \| \
- X"$mf" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$mf" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
else
continue
fi
@@ -4679,59 +6571,90 @@ echo X"$mf" |
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
- fdir=`(dirname "$file") 2>/dev/null ||
+ fdir=`$as_dirname -- "$file" ||
$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$file" : 'X\(//\)[^/]' \| \
X"$file" : 'X\(//\)$' \| \
- X"$file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p $dirpart/$fdir
- else
- as_dir=$dirpart/$fdir
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir=$dirpart/$fdir
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
{ (exit 1); exit 1; }; }; }
-
# echo "creating $dirpart/$file"
echo '# dummy' > "$dirpart/$file"
done
done
;;
+
esac
-done
-_ACEOF
+done # for ac_tag
-cat >>$CONFIG_STATUS <<\_ACEOF
{ (exit 0); exit 0; }
_ACEOF
chmod +x $CONFIG_STATUS
ac_clean_files=$ac_clean_files_save
+test $ac_write_fail = 0 ||
+ { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+
# configure is writing to config.log, and then calls config.status.
# config.status does its own redirection, appending to config.log.
@@ -4753,4 +6676,8 @@ if test "$no_create" != yes; then
# would make configure fail if this is the last instruction.
$ac_cs_success || { (exit 1); exit 1; }
fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
diff --git a/app/xkbcomp/configure.ac b/app/xkbcomp/configure.ac
index 2f3468fbb..c69230b78 100644
--- a/app/xkbcomp/configure.ac
+++ b/app/xkbcomp/configure.ac
@@ -20,23 +20,37 @@ dnl PERFORMANCE OF THIS SOFTWARE.
dnl
dnl Process this file with autoconf to create configure.
-AC_PREREQ([2.57])
-AC_INIT(xkbcomp,[1.0.5], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],xkbcomp)
-AM_INIT_AUTOMAKE([dist-bzip2])
+AC_PREREQ([2.60])
+AC_INIT([xkbcomp], [1.2.0],
+ [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [xkbcomp])
+AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
+# Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
+m4_ifndef([XORG_MACROS_VERSION],
+ [m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.8)
+XORG_DEFAULT_OPTIONS
+
AM_CONFIG_HEADER(config.h)
-AC_PROG_CC
AC_PROG_YACC
-AC_PROG_INSTALL
+AC_PATH_PROG([YACC_INST], $YACC)
+AC_CHECK_FILE([$srcdir/xkbparse.c], [],
+ [test -z "$YACC_INST" && AC_MSG_ERROR([yacc not found - unable to compile xkbparse.y])])
+
+
+AC_CHECK_FUNCS([strdup strcasecmp])
# Checks for pkg-config packages
PKG_CHECK_MODULES(XKBCOMP, x11 xkbfile)
-AC_SUBST(XKBCOMP_CFLAGS)
-AC_SUBST(XKBCOMP_LIBS)
-XORG_MANPAGE_SECTIONS
-XORG_RELEASE_VERSION
+AC_ARG_WITH([xkb_config_root],
+ [AC_HELP_STRING([--with-xkb-config-root=<paths>],
+ [Set default XKB config root (default: ${datadir}/X11/xkb)])],
+ [XKBCONFIGROOT="$withval"],
+ [XKBCONFIGROOT='${datadir}/X11/xkb'])
+AC_SUBST([XKBCONFIGROOT])
+
AC_OUTPUT([Makefile])
diff --git a/app/xkbcomp/expr.c b/app/xkbcomp/expr.c
index 6e01d7daf..96fd95675 100644
--- a/app/xkbcomp/expr.c
+++ b/app/xkbcomp/expr.c
@@ -1,5 +1,3 @@
-/* $XdotOrg: expr.c,v 1.5 2000/08/17 19:54:30 cpqbld Exp $ */
-/* $Xorg: expr.c,v 1.5 2000/08/17 19:54:30 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -25,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/expr.c,v 3.7 2003/08/06 14:04:05 eich Exp $ */
#include "xkbcomp.h"
#include "tokens.h"
@@ -38,789 +35,868 @@
char *
exprOpText(unsigned type)
{
-static char buf[32];
-
- switch (type) {
- case ExprValue:
- strcpy(buf,"literal");
- break;
- case ExprIdent:
- strcpy(buf,"identifier");
- break;
- case ExprActionDecl:
- strcpy(buf,"action declaration");
- break;
- case ExprFieldRef:
- strcpy(buf,"field reference");
- break;
- case ExprArrayRef:
- strcpy(buf,"array reference");
- break;
- case ExprKeysymList:
- strcpy(buf,"list of keysyms");
- break;
- case ExprActionList:
- strcpy(buf,"list of actions");
- break;
- case OpAdd:
- strcpy(buf,"addition");
- break;
- case OpSubtract:
- strcpy(buf,"subtraction");
- break;
- case OpMultiply:
- strcpy(buf,"multiplication");
- break;
- case OpDivide:
- strcpy(buf,"division");
- break;
- case OpAssign:
- strcpy(buf,"assignment");
- break;
- case OpNot:
- strcpy(buf,"logical not");
- break;
- case OpNegate:
- strcpy(buf,"arithmetic negation");
- break;
- case OpInvert:
- strcpy(buf,"bitwise inversion");
- break;
- case OpUnaryPlus:
- strcpy(buf,"plus sign");
- break;
- default:
- sprintf(buf,"illegal(%d)",type);
- break;
- }
- return buf;
+ static char buf[32];
+
+ switch (type)
+ {
+ case ExprValue:
+ strcpy(buf, "literal");
+ break;
+ case ExprIdent:
+ strcpy(buf, "identifier");
+ break;
+ case ExprActionDecl:
+ strcpy(buf, "action declaration");
+ break;
+ case ExprFieldRef:
+ strcpy(buf, "field reference");
+ break;
+ case ExprArrayRef:
+ strcpy(buf, "array reference");
+ break;
+ case ExprKeysymList:
+ strcpy(buf, "list of keysyms");
+ break;
+ case ExprActionList:
+ strcpy(buf, "list of actions");
+ break;
+ case OpAdd:
+ strcpy(buf, "addition");
+ break;
+ case OpSubtract:
+ strcpy(buf, "subtraction");
+ break;
+ case OpMultiply:
+ strcpy(buf, "multiplication");
+ break;
+ case OpDivide:
+ strcpy(buf, "division");
+ break;
+ case OpAssign:
+ strcpy(buf, "assignment");
+ break;
+ case OpNot:
+ strcpy(buf, "logical not");
+ break;
+ case OpNegate:
+ strcpy(buf, "arithmetic negation");
+ break;
+ case OpInvert:
+ strcpy(buf, "bitwise inversion");
+ break;
+ case OpUnaryPlus:
+ strcpy(buf, "plus sign");
+ break;
+ default:
+ snprintf(buf, sizeof(buf), "illegal(%d)", type);
+ break;
+ }
+ return buf;
}
char *
exprTypeText(unsigned type)
{
-static char buf[20];
-
- switch (type) {
- case TypeUnknown:
- strcpy(buf,"unknown");
- break;
- case TypeBoolean:
- strcpy(buf,"boolean");
- break;
- case TypeInt:
- strcpy(buf,"int");
- break;
- case TypeString:
- strcpy(buf,"string");
- break;
- case TypeAction:
- strcpy(buf,"action");
- break;
- case TypeKeyName:
- strcpy(buf,"keyname");
- break;
- default:
- sprintf(buf,"illegal(%d)",type);
- break;
- }
- return buf;
+ static char buf[20];
+
+ switch (type)
+ {
+ case TypeUnknown:
+ strcpy(buf, "unknown");
+ break;
+ case TypeBoolean:
+ strcpy(buf, "boolean");
+ break;
+ case TypeInt:
+ strcpy(buf, "int");
+ break;
+ case TypeString:
+ strcpy(buf, "string");
+ break;
+ case TypeAction:
+ strcpy(buf, "action");
+ break;
+ case TypeKeyName:
+ strcpy(buf, "keyname");
+ break;
+ default:
+ snprintf(buf, sizeof(buf), "illegal(%d)", type);
+ break;
+ }
+ return buf;
}
int
-ExprResolveLhs( ExprDef * expr,
- ExprResult * elem_rtrn,
- ExprResult * field_rtrn,
- ExprDef ** index_rtrn)
+ExprResolveLhs(ExprDef * expr,
+ ExprResult * elem_rtrn,
+ ExprResult * field_rtrn, ExprDef ** index_rtrn)
{
- switch (expr->op) {
- case ExprIdent:
- elem_rtrn->str= NULL;
- field_rtrn->str= XkbAtomGetString(NULL,expr->value.str);
- *index_rtrn= NULL;
- return True;
- case ExprFieldRef:
- elem_rtrn->str= XkbAtomGetString(NULL,expr->value.field.element);
- field_rtrn->str= XkbAtomGetString(NULL,expr->value.field.field);
- *index_rtrn= NULL;
- return True;
- case ExprArrayRef:
- elem_rtrn->str= XkbAtomGetString(NULL,expr->value.array.element);
- field_rtrn->str= XkbAtomGetString(NULL,expr->value.array.field);
- *index_rtrn= expr->value.array.entry;
- return True;
+ switch (expr->op)
+ {
+ case ExprIdent:
+ elem_rtrn->str = NULL;
+ field_rtrn->str = XkbAtomGetString(NULL, expr->value.str);
+ *index_rtrn = NULL;
+ return True;
+ case ExprFieldRef:
+ elem_rtrn->str = XkbAtomGetString(NULL, expr->value.field.element);
+ field_rtrn->str = XkbAtomGetString(NULL, expr->value.field.field);
+ *index_rtrn = NULL;
+ return True;
+ case ExprArrayRef:
+ elem_rtrn->str = XkbAtomGetString(NULL, expr->value.array.element);
+ field_rtrn->str = XkbAtomGetString(NULL, expr->value.array.field);
+ *index_rtrn = expr->value.array.entry;
+ return True;
}
- WSGO1("Unexpected operator %d in ResolveLhs\n",expr->op);
+ WSGO1("Unexpected operator %d in ResolveLhs\n", expr->op);
return False;
}
Bool
-SimpleLookup( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+SimpleLookup(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
-LookupEntry * entry;
-register char * str;
+ LookupEntry *entry;
+ register char *str;
- if ((priv==NULL)||
- (field==None)||(elem!=None)||
- ((type!=TypeInt)&&(type!=TypeFloat))) {
- return False;
+ if ((priv == NULL) ||
+ (field == None) || (elem != None) ||
+ ((type != TypeInt) && (type != TypeFloat)))
+ {
+ return False;
}
- str= XkbAtomGetString(NULL,field);
- for (entry=(LookupEntry *)priv;(entry!=NULL)&&(entry->name!=NULL);entry++) {
- if (uStrCaseCmp(str,entry->name)==0) {
- val_rtrn->uval= entry->result;
- if (type==TypeFloat)
- val_rtrn->uval*= XkbGeomPtsPerMM;
- return True;
- }
+ str = XkbAtomGetString(NULL, field);
+ for (entry = (LookupEntry *) priv;
+ (entry != NULL) && (entry->name != NULL); entry++)
+ {
+ if (uStrCaseCmp(str, entry->name) == 0)
+ {
+ val_rtrn->uval = entry->result;
+ if (type == TypeFloat)
+ val_rtrn->uval *= XkbGeomPtsPerMM;
+ return True;
+ }
}
return False;
}
Bool
-RadioLookup( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+RadioLookup(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
-register char * str;
-int rg;
-
- if ((field==None)||(elem!=None)||(type!=TypeInt))
- return False;
- str= XkbAtomGetString(NULL,field);
- if (str) {
- if (uStrCasePrefix("group",str))
- str+= strlen("group");
- else if (uStrCasePrefix("radiogroup",str))
- str+= strlen("radiogroup");
- else if (uStrCasePrefix("rg",str))
- str+= strlen("rg");
- else if (!isdigit(str[0]))
- str= NULL;
+ register char *str;
+ int rg;
+
+ if ((field == None) || (elem != None) || (type != TypeInt))
+ return False;
+ str = XkbAtomGetString(NULL, field);
+ if (str)
+ {
+ if (uStrCasePrefix("group", str))
+ str += strlen("group");
+ else if (uStrCasePrefix("radiogroup", str))
+ str += strlen("radiogroup");
+ else if (uStrCasePrefix("rg", str))
+ str += strlen("rg");
+ else if (!isdigit(str[0]))
+ str = NULL;
}
- if ((!str)||(sscanf(str,"%i",&rg)<1)||(rg<1)||(rg>XkbMaxRadioGroups))
- return False;
- val_rtrn->uval= rg;
+ if ((!str) || (sscanf(str, "%i", &rg) < 1) || (rg < 1)
+ || (rg > XkbMaxRadioGroups))
+ return False;
+ val_rtrn->uval = rg;
return True;
}
int
-TableLookup( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+TableLookup(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
-LookupTable * tbl= (LookupTable *)priv;
-register char * str;
-
- if ((priv==NULL)||(field==None)||(type!=TypeInt))
- return False;
- str= XkbAtomGetString(NULL,elem);
- while (tbl) {
- if (((str==NULL)&&(tbl->element==NULL))||
- ((str!=NULL)&&(tbl->element!=NULL)&&
- (uStrCaseCmp(str,tbl->element)==0))) {
- break;
- }
- tbl= tbl->nextElement;
+ LookupTable *tbl = (LookupTable *) priv;
+ register char *str;
+
+ if ((priv == NULL) || (field == None) || (type != TypeInt))
+ return False;
+ str = XkbAtomGetString(NULL, elem);
+ while (tbl)
+ {
+ if (((str == NULL) && (tbl->element == NULL)) ||
+ ((str != NULL) && (tbl->element != NULL) &&
+ (uStrCaseCmp(str, tbl->element) == 0)))
+ {
+ break;
+ }
+ tbl = tbl->nextElement;
}
- if (tbl==NULL) /* didn't find a matching element */
- return False;
- priv= (XPointer)tbl->entries;
- return SimpleLookup(priv,(Atom)None,field,type,val_rtrn);
+ if (tbl == NULL) /* didn't find a matching element */
+ return False;
+ priv = (XPointer) tbl->entries;
+ return SimpleLookup(priv, (Atom) None, field, type, val_rtrn);
}
static LookupEntry modIndexNames[] = {
- { "shift", ShiftMapIndex },
- { "control", ControlMapIndex },
- { "lock", LockMapIndex },
- { "mod1", Mod1MapIndex },
- { "mod2", Mod2MapIndex },
- { "mod3", Mod3MapIndex },
- { "mod4", Mod4MapIndex },
- { "mod5", Mod5MapIndex },
- { "none", XkbNoModifier },
- { NULL, 0 }
+ {"shift", ShiftMapIndex},
+ {"control", ControlMapIndex},
+ {"lock", LockMapIndex},
+ {"mod1", Mod1MapIndex},
+ {"mod2", Mod2MapIndex},
+ {"mod3", Mod3MapIndex},
+ {"mod4", Mod4MapIndex},
+ {"mod5", Mod5MapIndex},
+ {"none", XkbNoModifier},
+ {NULL, 0}
};
int
-LookupModIndex( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+LookupModIndex(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
- return SimpleLookup((XPointer)modIndexNames,elem,field,type,val_rtrn);
+ return SimpleLookup((XPointer) modIndexNames, elem, field, type,
+ val_rtrn);
}
int
-LookupModMask( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+LookupModMask(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
-char *str;
-
- if ((elem!=None)||(type!=TypeInt))
- return False;
- str= XkbAtomGetString(NULL,field);
- if (str==NULL)
- return False;
- if (uStrCaseCmp(str,"all")==0)
- val_rtrn->uval= 0xff;
- else if (uStrCaseCmp(str,"none")==0)
- val_rtrn->uval= 0;
- else if (LookupModIndex(priv,elem,field,type,val_rtrn))
- val_rtrn->uval= (1<<val_rtrn->uval);
- else if (priv != NULL) {
- LookupPriv *lpriv= (LookupPriv *)priv;
- if ((lpriv->chain==NULL)||
- (!(*lpriv->chain)(lpriv->chainPriv,elem,field,type,val_rtrn)))
- return False;
+ char *str;
+
+ if ((elem != None) || (type != TypeInt))
+ return False;
+ str = XkbAtomGetString(NULL, field);
+ if (str == NULL)
+ return False;
+ if (uStrCaseCmp(str, "all") == 0)
+ val_rtrn->uval = 0xff;
+ else if (uStrCaseCmp(str, "none") == 0)
+ val_rtrn->uval = 0;
+ else if (LookupModIndex(priv, elem, field, type, val_rtrn))
+ val_rtrn->uval = (1 << val_rtrn->uval);
+ else if (priv != NULL)
+ {
+ LookupPriv *lpriv = (LookupPriv *) priv;
+ if ((lpriv->chain == NULL) ||
+ (!(*lpriv->chain) (lpriv->chainPriv, elem, field, type,
+ val_rtrn)))
+ return False;
}
- else return False;
+ else
+ return False;
return True;
}
int
-ExprResolveModIndex( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveModIndex(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-char *bogus= NULL;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type!=TypeInt) {
- ERROR1("Found constant of type %s where a modifier mask was expected\n",
- exprTypeText(expr->type));
- return False;
- }
- else if ((expr->value.ival>=XkbNumModifiers)||(expr->value.ival<0)){
- ERROR2("Illegal modifier index (%d, must be 0..%d)\n",
- expr->value.ival,XkbNumModifiers-1);
- return False;
- }
- val_rtrn->ival= expr->value.ival;
- return True;
- case ExprIdent:
- if (LookupModIndex(lookupPriv,(Atom)None,expr->value.str,
- (unsigned)TypeInt,val_rtrn)) {
- return True;
- }
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeInt,val_rtrn);
- }
- if (!ok)
- ERROR1("Cannot determine modifier index for \"%s\"\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- break;
- case ExprFieldRef:
- bogus= "field reference";
- break;
- case ExprArrayRef:
- bogus= "array reference";
- break;
- case ExprActionDecl:
- bogus= "function";
- break;
- case OpAdd:
- case OpSubtract:
- case OpMultiply:
- case OpDivide:
- case OpInvert:
- case OpNegate:
- case OpNot:
- case OpUnaryPlus:
- bogus= "arithmetic operations";
- break;
- case OpAssign:
- bogus= "assignment";
- break;
- default:
- WSGO1("Unknown operator %d in ResolveModIndex\n",expr->op);
- return False;
+ int ok = 0;
+ char *bogus = NULL;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type != TypeInt)
+ {
+ ERROR1
+ ("Found constant of type %s where a modifier mask was expected\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ else if ((expr->value.ival >= XkbNumModifiers)
+ || (expr->value.ival < 0))
+ {
+ ERROR2("Illegal modifier index (%d, must be 0..%d)\n",
+ expr->value.ival, XkbNumModifiers - 1);
+ return False;
+ }
+ val_rtrn->ival = expr->value.ival;
+ return True;
+ case ExprIdent:
+ if (LookupModIndex(lookupPriv, (Atom) None, expr->value.str,
+ (unsigned) TypeInt, val_rtrn))
+ {
+ return True;
+ }
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeInt, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Cannot determine modifier index for \"%s\"\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ break;
+ case ExprFieldRef:
+ bogus = "field reference";
+ break;
+ case ExprArrayRef:
+ bogus = "array reference";
+ break;
+ case ExprActionDecl:
+ bogus = "function";
+ break;
+ case OpAdd:
+ case OpSubtract:
+ case OpMultiply:
+ case OpDivide:
+ case OpInvert:
+ case OpNegate:
+ case OpNot:
+ case OpUnaryPlus:
+ bogus = "arithmetic operations";
+ break;
+ case OpAssign:
+ bogus = "assignment";
+ break;
+ default:
+ WSGO1("Unknown operator %d in ResolveModIndex\n", expr->op);
+ return False;
}
- if (bogus) {
- ERROR1("Modifier index must be a name or number, %s ignored\n",bogus);
- return False;
+ if (bogus)
+ {
+ ERROR1("Modifier index must be a name or number, %s ignored\n",
+ bogus);
+ return False;
}
return ok;
}
int
-ExprResolveModMask( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveModMask(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-LookupPriv priv;
+ LookupPriv priv;
- priv.priv= NULL;
- priv.chain= lookup;
- priv.chainPriv= lookupPriv;
- return ExprResolveMask(expr,val_rtrn,LookupModMask,(XPointer)&priv);
+ priv.priv = NULL;
+ priv.chain = lookup;
+ priv.chainPriv = lookupPriv;
+ return ExprResolveMask(expr, val_rtrn, LookupModMask, (XPointer) & priv);
}
int
-ExprResolveBoolean( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveBoolean(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-char * bogus= NULL;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type!=TypeBoolean) {
- ERROR1("Found constant of type %s where boolean was expected\n",
- exprTypeText(expr->type));
- return False;
- }
- val_rtrn->ival= expr->value.ival;
- return True;
- case ExprIdent:
- bogus= XkbAtomGetString(NULL,expr->value.str);
- if (bogus) {
- if ((uStrCaseCmp(bogus,"true")==0)||
- (uStrCaseCmp(bogus,"yes")==0)||
- (uStrCaseCmp(bogus,"on")==0)) {
- val_rtrn->uval= 1;
- return True;
- }
- else if ((uStrCaseCmp(bogus,"false")==0)||
- (uStrCaseCmp(bogus,"no")==0)||
- (uStrCaseCmp(bogus,"off")==0)) {
- val_rtrn->uval= 0;
- return True;
- }
- }
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeBoolean,val_rtrn);
- }
- if (!ok)
- ERROR1("Identifier \"%s\" of type int is unknown\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeBoolean,val_rtrn);
- }
- if (!ok)
- ERROR2("Default \"%s.%s\" of type boolean is unknown\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case OpInvert:
- case OpNot:
- ok= ExprResolveBoolean(expr,val_rtrn,lookup,lookupPriv);
- if (ok)
- val_rtrn->uval= !val_rtrn->uval;
- return ok;
- case OpAdd: if (bogus==NULL) bogus= "Addition";
- case OpSubtract: if (bogus==NULL) bogus= "Subtraction";
- case OpMultiply: if (bogus==NULL) bogus= "Multiplication";
- case OpDivide: if (bogus==NULL) bogus= "Division";
- case OpAssign: if (bogus==NULL) bogus= "Assignment";
- case OpNegate: if (bogus==NULL) bogus= "Negation";
- ERROR1("%s of boolean values not permitted\n",bogus);
- break;
- case OpUnaryPlus:
- ERROR("Unary \"+\" operator not permitted for boolean values\n");
- break;
- default:
- WSGO1("Unknown operator %d in ResolveBoolean\n",expr->op);
- break;
+ int ok = 0;
+ char *bogus = NULL;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type != TypeBoolean)
+ {
+ ERROR1
+ ("Found constant of type %s where boolean was expected\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ val_rtrn->ival = expr->value.ival;
+ return True;
+ case ExprIdent:
+ bogus = XkbAtomGetString(NULL, expr->value.str);
+ if (bogus)
+ {
+ if ((uStrCaseCmp(bogus, "true") == 0) ||
+ (uStrCaseCmp(bogus, "yes") == 0) ||
+ (uStrCaseCmp(bogus, "on") == 0))
+ {
+ val_rtrn->uval = 1;
+ return True;
+ }
+ else if ((uStrCaseCmp(bogus, "false") == 0) ||
+ (uStrCaseCmp(bogus, "no") == 0) ||
+ (uStrCaseCmp(bogus, "off") == 0))
+ {
+ val_rtrn->uval = 0;
+ return True;
+ }
+ }
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeBoolean, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Identifier \"%s\" of type int is unknown\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeBoolean, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Default \"%s.%s\" of type boolean is unknown\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case OpInvert:
+ case OpNot:
+ ok = ExprResolveBoolean(expr, val_rtrn, lookup, lookupPriv);
+ if (ok)
+ val_rtrn->uval = !val_rtrn->uval;
+ return ok;
+ case OpAdd:
+ if (bogus == NULL)
+ bogus = "Addition";
+ case OpSubtract:
+ if (bogus == NULL)
+ bogus = "Subtraction";
+ case OpMultiply:
+ if (bogus == NULL)
+ bogus = "Multiplication";
+ case OpDivide:
+ if (bogus == NULL)
+ bogus = "Division";
+ case OpAssign:
+ if (bogus == NULL)
+ bogus = "Assignment";
+ case OpNegate:
+ if (bogus == NULL)
+ bogus = "Negation";
+ ERROR1("%s of boolean values not permitted\n", bogus);
+ break;
+ case OpUnaryPlus:
+ ERROR("Unary \"+\" operator not permitted for boolean values\n");
+ break;
+ default:
+ WSGO1("Unknown operator %d in ResolveBoolean\n", expr->op);
+ break;
}
return False;
}
int
-ExprResolveFloat( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveFloat(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-ExprResult leftRtrn,rightRtrn;
-ExprDef *left,*right;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type==TypeString) {
- register char *str;
- str= XkbAtomGetString(NULL,expr->value.str);
- if ((str!=None)&&(strlen(str)==1)) {
- val_rtrn->uval= str[0]*XkbGeomPtsPerMM;
- return True;
- }
- }
- if ((expr->type!=TypeInt)&&(expr->type!=TypeFloat)) {
- ERROR1("Found constant of type %s, expected a number\n",
- exprTypeText(expr->type));
- return False;
- }
- val_rtrn->ival= expr->value.ival;
- if (expr->type==TypeInt)
- val_rtrn->ival*= XkbGeomPtsPerMM;
- return True;
- case ExprIdent:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeFloat,val_rtrn);
- }
- if (!ok)
- ERROR1("Numeric identifier \"%s\" unknown\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeFloat,val_rtrn);
- }
- if (!ok)
- ERROR2("Numeric default \"%s.%s\" unknown\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case OpAdd:
- case OpSubtract:
- case OpMultiply:
- case OpDivide:
- left= expr->value.binary.left;
- right= expr->value.binary.right;
- if (ExprResolveFloat(left,&leftRtrn,lookup,lookupPriv)&&
- ExprResolveFloat(right,&rightRtrn,lookup,lookupPriv)) {
- switch (expr->op) {
- case OpAdd:
- val_rtrn->ival= leftRtrn.ival+rightRtrn.ival;
- break;
- case OpSubtract:
- val_rtrn->ival= leftRtrn.ival-rightRtrn.ival;
- break;
- case OpMultiply:
- val_rtrn->ival= leftRtrn.ival*rightRtrn.ival;
- break;
- case OpDivide:
- val_rtrn->ival= leftRtrn.ival/rightRtrn.ival;
- break;
- }
- return True;
- }
- return False;
- case OpAssign:
- WSGO("Assignment operator not implemented yet\n");
- break;
- case OpNot:
- left= expr->value.child;
- if (ExprResolveFloat(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The ! operator cannot be applied to a number\n");
- }
- return False;
- case OpInvert:
- case OpNegate:
- left= expr->value.child;
- if (ExprResolveFloat(left,&leftRtrn,lookup,lookupPriv)) {
- if (expr->op==OpNegate)
- val_rtrn->ival= -leftRtrn.ival;
- else val_rtrn->ival= ~leftRtrn.ival;
- return True;
- }
- return False;
- case OpUnaryPlus:
- left= expr->value.child;
- return ExprResolveFloat(left,val_rtrn,lookup,lookupPriv);
- default:
- WSGO1("Unknown operator %d in ResolveFloat\n",expr->op);
- break;
+ int ok = 0;
+ ExprResult leftRtrn, rightRtrn;
+ ExprDef *left, *right;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type == TypeString)
+ {
+ register char *str;
+ str = XkbAtomGetString(NULL, expr->value.str);
+ if ((str != NULL) && (strlen(str) == 1))
+ {
+ val_rtrn->uval = str[0] * XkbGeomPtsPerMM;
+ return True;
+ }
+ }
+ if ((expr->type != TypeInt) && (expr->type != TypeFloat))
+ {
+ ERROR1("Found constant of type %s, expected a number\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ val_rtrn->ival = expr->value.ival;
+ if (expr->type == TypeInt)
+ val_rtrn->ival *= XkbGeomPtsPerMM;
+ return True;
+ case ExprIdent:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeFloat, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Numeric identifier \"%s\" unknown\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeFloat, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Numeric default \"%s.%s\" unknown\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case OpAdd:
+ case OpSubtract:
+ case OpMultiply:
+ case OpDivide:
+ left = expr->value.binary.left;
+ right = expr->value.binary.right;
+ if (ExprResolveFloat(left, &leftRtrn, lookup, lookupPriv) &&
+ ExprResolveFloat(right, &rightRtrn, lookup, lookupPriv))
+ {
+ switch (expr->op)
+ {
+ case OpAdd:
+ val_rtrn->ival = leftRtrn.ival + rightRtrn.ival;
+ break;
+ case OpSubtract:
+ val_rtrn->ival = leftRtrn.ival - rightRtrn.ival;
+ break;
+ case OpMultiply:
+ val_rtrn->ival = leftRtrn.ival * rightRtrn.ival;
+ break;
+ case OpDivide:
+ val_rtrn->ival = leftRtrn.ival / rightRtrn.ival;
+ break;
+ }
+ return True;
+ }
+ return False;
+ case OpAssign:
+ WSGO("Assignment operator not implemented yet\n");
+ break;
+ case OpNot:
+ left = expr->value.child;
+ if (ExprResolveFloat(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The ! operator cannot be applied to a number\n");
+ }
+ return False;
+ case OpInvert:
+ case OpNegate:
+ left = expr->value.child;
+ if (ExprResolveFloat(left, &leftRtrn, lookup, lookupPriv))
+ {
+ if (expr->op == OpNegate)
+ val_rtrn->ival = -leftRtrn.ival;
+ else
+ val_rtrn->ival = ~leftRtrn.ival;
+ return True;
+ }
+ return False;
+ case OpUnaryPlus:
+ left = expr->value.child;
+ return ExprResolveFloat(left, val_rtrn, lookup, lookupPriv);
+ default:
+ WSGO1("Unknown operator %d in ResolveFloat\n", expr->op);
+ break;
}
return False;
}
int
-ExprResolveInteger( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveInteger(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-ExprResult leftRtrn,rightRtrn;
-ExprDef *left,*right;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type==TypeString) {
- register char *str;
- str= XkbAtomGetString(NULL,expr->value.str);
- if (str!=None)
- switch (strlen(str)) {
- case 0:
- val_rtrn->uval= 0;
- return True;
- case 1:
- val_rtrn->uval= str[0];
- return True;
- default:
- break;
- }
- }
- if ((expr->type!=TypeInt)&&(expr->type!=TypeFloat)) {
- ERROR1("Found constant of type %s where an int was expected\n",
- exprTypeText(expr->type));
- return False;
- }
- val_rtrn->ival= expr->value.ival;
- if (expr->type==TypeFloat)
- val_rtrn->ival/= XkbGeomPtsPerMM;
- return True;
- case ExprIdent:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeInt,val_rtrn);
- }
- if (!ok)
- ERROR1("Identifier \"%s\" of type int is unknown\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeInt,val_rtrn);
- }
- if (!ok)
- ERROR2("Default \"%s.%s\" of type int is unknown\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case OpAdd:
- case OpSubtract:
- case OpMultiply:
- case OpDivide:
- left= expr->value.binary.left;
- right= expr->value.binary.right;
- if (ExprResolveInteger(left,&leftRtrn,lookup,lookupPriv)&&
- ExprResolveInteger(right,&rightRtrn,lookup,lookupPriv)) {
- switch (expr->op) {
- case OpAdd:
- val_rtrn->ival= leftRtrn.ival+rightRtrn.ival;
- break;
- case OpSubtract:
- val_rtrn->ival= leftRtrn.ival-rightRtrn.ival;
- break;
- case OpMultiply:
- val_rtrn->ival= leftRtrn.ival*rightRtrn.ival;
- break;
- case OpDivide:
- val_rtrn->ival= leftRtrn.ival/rightRtrn.ival;
- break;
- }
- return True;
- }
- return False;
- case OpAssign:
- WSGO("Assignment operator not implemented yet\n");
- break;
- case OpNot:
- left= expr->value.child;
- if (ExprResolveInteger(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The ! operator cannot be applied to an integer\n");
- }
- return False;
- case OpInvert:
- case OpNegate:
- left= expr->value.child;
- if (ExprResolveInteger(left,&leftRtrn,lookup,lookupPriv)) {
- if (expr->op==OpNegate)
- val_rtrn->ival= -leftRtrn.ival;
- else val_rtrn->ival= ~leftRtrn.ival;
- return True;
- }
- return False;
- case OpUnaryPlus:
- left= expr->value.child;
- return ExprResolveInteger(left,val_rtrn,lookup,lookupPriv);
- default:
- WSGO1("Unknown operator %d in ResolveInteger\n",expr->op);
- break;
+ int ok = 0;
+ ExprResult leftRtrn, rightRtrn;
+ ExprDef *left, *right;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type == TypeString)
+ {
+ register char *str;
+ str = XkbAtomGetString(NULL, expr->value.str);
+ if (str != NULL)
+ switch (strlen(str))
+ {
+ case 0:
+ val_rtrn->uval = 0;
+ return True;
+ case 1:
+ val_rtrn->uval = str[0];
+ return True;
+ default:
+ break;
+ }
+ }
+ if ((expr->type != TypeInt) && (expr->type != TypeFloat))
+ {
+ ERROR1
+ ("Found constant of type %s where an int was expected\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ val_rtrn->ival = expr->value.ival;
+ if (expr->type == TypeFloat)
+ val_rtrn->ival /= XkbGeomPtsPerMM;
+ return True;
+ case ExprIdent:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeInt, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Identifier \"%s\" of type int is unknown\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeInt, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Default \"%s.%s\" of type int is unknown\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case OpAdd:
+ case OpSubtract:
+ case OpMultiply:
+ case OpDivide:
+ left = expr->value.binary.left;
+ right = expr->value.binary.right;
+ if (ExprResolveInteger(left, &leftRtrn, lookup, lookupPriv) &&
+ ExprResolveInteger(right, &rightRtrn, lookup, lookupPriv))
+ {
+ switch (expr->op)
+ {
+ case OpAdd:
+ val_rtrn->ival = leftRtrn.ival + rightRtrn.ival;
+ break;
+ case OpSubtract:
+ val_rtrn->ival = leftRtrn.ival - rightRtrn.ival;
+ break;
+ case OpMultiply:
+ val_rtrn->ival = leftRtrn.ival * rightRtrn.ival;
+ break;
+ case OpDivide:
+ val_rtrn->ival = leftRtrn.ival / rightRtrn.ival;
+ break;
+ }
+ return True;
+ }
+ return False;
+ case OpAssign:
+ WSGO("Assignment operator not implemented yet\n");
+ break;
+ case OpNot:
+ left = expr->value.child;
+ if (ExprResolveInteger(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The ! operator cannot be applied to an integer\n");
+ }
+ return False;
+ case OpInvert:
+ case OpNegate:
+ left = expr->value.child;
+ if (ExprResolveInteger(left, &leftRtrn, lookup, lookupPriv))
+ {
+ if (expr->op == OpNegate)
+ val_rtrn->ival = -leftRtrn.ival;
+ else
+ val_rtrn->ival = ~leftRtrn.ival;
+ return True;
+ }
+ return False;
+ case OpUnaryPlus:
+ left = expr->value.child;
+ return ExprResolveInteger(left, val_rtrn, lookup, lookupPriv);
+ default:
+ WSGO1("Unknown operator %d in ResolveInteger\n", expr->op);
+ break;
}
return False;
}
int
-ExprResolveString( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveString(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-ExprResult leftRtrn,rightRtrn;
-ExprDef * left;
-ExprDef * right;
-char * bogus= NULL;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type!=TypeString) {
- ERROR1("Found constant of type %s, expected a string\n",
- exprTypeText(expr->type));
- return False;
- }
- val_rtrn->str= XkbAtomGetString(NULL,expr->value.str);
- if (val_rtrn->str==NULL) {
- static char *empty= "";
- val_rtrn->str= empty;
- }
- return True;
- case ExprIdent:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeString,val_rtrn);
- }
- if (!ok)
- ERROR1("Identifier \"%s\" of type string not found\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeString,val_rtrn);
- }
- if (!ok)
- ERROR2("Default \"%s.%s\" of type string not found\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case OpAdd:
- left= expr->value.binary.left;
- right= expr->value.binary.right;
- if (ExprResolveString(left,&leftRtrn,lookup,lookupPriv)&&
- ExprResolveString(right,&rightRtrn,lookup,lookupPriv)) {
- int len;
- char *new;
- len= strlen(leftRtrn.str)+strlen(rightRtrn.str)+1;
- new= (char *)uAlloc(len);
- if (new) {
- sprintf(new,"%s%s",leftRtrn.str,rightRtrn.str);
- val_rtrn->str= new;
- return True;
- }
- }
- return False;
- case OpSubtract: if (bogus==NULL) bogus= "Subtraction";
- case OpMultiply: if (bogus==NULL) bogus= "Multiplication";
- case OpDivide: if (bogus==NULL) bogus= "Division";
- case OpAssign: if (bogus==NULL) bogus= "Assignment";
- case OpNegate: if (bogus==NULL) bogus= "Negation";
- case OpInvert: if (bogus==NULL) bogus= "Bitwise complement";
- ERROR1("%s of string values not permitted\n",bogus);
- return False;
- case OpNot:
- left= expr->value.child;
- if (ExprResolveString(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The ! operator cannot be applied to a string\n");
- }
- return False;
- case OpUnaryPlus:
- left= expr->value.child;
- if (ExprResolveString(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The + operator cannot be applied to a string\n");
- }
- return False;
- default:
- WSGO1("Unknown operator %d in ResolveString\n",expr->op);
- break;
+ int ok = 0;
+ ExprResult leftRtrn, rightRtrn;
+ ExprDef *left;
+ ExprDef *right;
+ char *bogus = NULL;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type != TypeString)
+ {
+ ERROR1("Found constant of type %s, expected a string\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ val_rtrn->str = XkbAtomGetString(NULL, expr->value.str);
+ if (val_rtrn->str == NULL)
+ {
+ static char *empty = "";
+ val_rtrn->str = empty;
+ }
+ return True;
+ case ExprIdent:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeString, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Identifier \"%s\" of type string not found\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeString, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Default \"%s.%s\" of type string not found\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case OpAdd:
+ left = expr->value.binary.left;
+ right = expr->value.binary.right;
+ if (ExprResolveString(left, &leftRtrn, lookup, lookupPriv) &&
+ ExprResolveString(right, &rightRtrn, lookup, lookupPriv))
+ {
+ int len;
+ char *new;
+ len = strlen(leftRtrn.str) + strlen(rightRtrn.str) + 1;
+ new = (char *) uAlloc(len);
+ if (new)
+ {
+ sprintf(new, "%s%s", leftRtrn.str, rightRtrn.str);
+ val_rtrn->str = new;
+ return True;
+ }
+ }
+ return False;
+ case OpSubtract:
+ if (bogus == NULL)
+ bogus = "Subtraction";
+ case OpMultiply:
+ if (bogus == NULL)
+ bogus = "Multiplication";
+ case OpDivide:
+ if (bogus == NULL)
+ bogus = "Division";
+ case OpAssign:
+ if (bogus == NULL)
+ bogus = "Assignment";
+ case OpNegate:
+ if (bogus == NULL)
+ bogus = "Negation";
+ case OpInvert:
+ if (bogus == NULL)
+ bogus = "Bitwise complement";
+ ERROR1("%s of string values not permitted\n", bogus);
+ return False;
+ case OpNot:
+ left = expr->value.child;
+ if (ExprResolveString(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The ! operator cannot be applied to a string\n");
+ }
+ return False;
+ case OpUnaryPlus:
+ left = expr->value.child;
+ if (ExprResolveString(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The + operator cannot be applied to a string\n");
+ }
+ return False;
+ default:
+ WSGO1("Unknown operator %d in ResolveString\n", expr->op);
+ break;
}
return False;
}
int
-ExprResolveKeyName( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveKeyName(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-ExprDef * left;
-ExprResult leftRtrn;
-char * bogus= NULL;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type!=TypeKeyName) {
- ERROR1("Found constant of type %s, expected a key name\n",
- exprTypeText(expr->type));
- return False;
- }
- memcpy(val_rtrn->keyName.name,expr->value.keyName,XkbKeyNameLength);
- return True;
- case ExprIdent:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeString,val_rtrn);
- }
- if (!ok)
- ERROR1("Identifier \"%s\" of type string not found\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeString,val_rtrn);
- }
- if (!ok)
- ERROR2("Default \"%s.%s\" of type key name not found\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case OpAdd: if (bogus==NULL) bogus= "Addition";
- case OpSubtract: if (bogus==NULL) bogus= "Subtraction";
- case OpMultiply: if (bogus==NULL) bogus= "Multiplication";
- case OpDivide: if (bogus==NULL) bogus= "Division";
- case OpAssign: if (bogus==NULL) bogus= "Assignment";
- case OpNegate: if (bogus==NULL) bogus= "Negation";
- case OpInvert: if (bogus==NULL) bogus= "Bitwise complement";
- ERROR1("%s of key name values not permitted\n",bogus);
- return False;
- case OpNot:
- left= expr->value.binary.left;
- if (ExprResolveString(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The ! operator cannot be applied to a key name\n");
- }
- return False;
- case OpUnaryPlus:
- left= expr->value.binary.left;
- if (ExprResolveString(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR("The + operator cannot be applied to a key name\n");
- }
- return False;
- default:
- WSGO1("Unknown operator %d in ResolveKeyName\n",expr->op);
- break;
+ int ok = 0;
+ ExprDef *left;
+ ExprResult leftRtrn;
+ char *bogus = NULL;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type != TypeKeyName)
+ {
+ ERROR1("Found constant of type %s, expected a key name\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ memcpy(val_rtrn->keyName.name, expr->value.keyName, XkbKeyNameLength);
+ return True;
+ case ExprIdent:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeString, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Identifier \"%s\" of type string not found\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeString, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Default \"%s.%s\" of type key name not found\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case OpAdd:
+ if (bogus == NULL)
+ bogus = "Addition";
+ case OpSubtract:
+ if (bogus == NULL)
+ bogus = "Subtraction";
+ case OpMultiply:
+ if (bogus == NULL)
+ bogus = "Multiplication";
+ case OpDivide:
+ if (bogus == NULL)
+ bogus = "Division";
+ case OpAssign:
+ if (bogus == NULL)
+ bogus = "Assignment";
+ case OpNegate:
+ if (bogus == NULL)
+ bogus = "Negation";
+ case OpInvert:
+ if (bogus == NULL)
+ bogus = "Bitwise complement";
+ ERROR1("%s of key name values not permitted\n", bogus);
+ return False;
+ case OpNot:
+ left = expr->value.binary.left;
+ if (ExprResolveString(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The ! operator cannot be applied to a key name\n");
+ }
+ return False;
+ case OpUnaryPlus:
+ left = expr->value.binary.left;
+ if (ExprResolveString(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR("The + operator cannot be applied to a key name\n");
+ }
+ return False;
+ default:
+ WSGO1("Unknown operator %d in ResolveKeyName\n", expr->op);
+ break;
}
return False;
}
@@ -828,149 +904,162 @@ char * bogus= NULL;
/***====================================================================***/
int
-ExprResolveEnum(ExprDef *expr,ExprResult *val_rtrn,LookupEntry *values)
+ExprResolveEnum(ExprDef * expr, ExprResult * val_rtrn, LookupEntry * values)
{
- if (expr->op!=ExprIdent) {
- ERROR1("Found a %s where an enumerated value was expected\n",
- exprOpText(expr->op));
- return False;
+ if (expr->op != ExprIdent)
+ {
+ ERROR1("Found a %s where an enumerated value was expected\n",
+ exprOpText(expr->op));
+ return False;
}
- if (!SimpleLookup((XPointer)values,(Atom)None,expr->value.str,
- (unsigned)TypeInt,val_rtrn)) {
- int nOut=0;
- ERROR1("Illegal identifier %s (expected one of: ",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- while (values && values->name) {
- if (nOut!=0) INFO1(", %s",values->name);
- else INFO1("%s",values->name);
- values++;
- nOut++;
- }
- INFO(")\n");
- return False;
+ if (!SimpleLookup((XPointer) values, (Atom) None, expr->value.str,
+ (unsigned) TypeInt, val_rtrn))
+ {
+ int nOut = 0;
+ ERROR1("Illegal identifier %s (expected one of: ",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ while (values && values->name)
+ {
+ if (nOut != 0)
+ INFO1(", %s", values->name);
+ else
+ INFO1("%s", values->name);
+ values++;
+ nOut++;
+ }
+ INFO(")\n");
+ return False;
}
return True;
}
int
-ExprResolveMask( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveMask(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-ExprResult leftRtrn,rightRtrn;
-ExprDef *left,*right;
-char * bogus= NULL;
-
- switch (expr->op) {
- case ExprValue:
- if (expr->type!=TypeInt) {
- ERROR1("Found constant of type %s where a mask was expected\n",
- exprTypeText(expr->type));
- return False;
- }
- val_rtrn->ival= expr->value.ival;
- return True;
- case ExprIdent:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- None,expr->value.str,
- TypeInt,val_rtrn);
- }
- if (!ok)
- ERROR1("Identifier \"%s\" of type int is unknown\n",
- XkbAtomText(NULL,expr->value.str,XkbMessage));
- return ok;
- case ExprFieldRef:
- if (lookup) {
- ok= (*lookup)(lookupPriv,
- expr->value.field.element,expr->value.field.field,
- TypeInt,val_rtrn);
- }
- if (!ok)
- ERROR2("Default \"%s.%s\" of type int is unknown\n",
- XkbAtomText(NULL,expr->value.field.element,XkbMessage),
- XkbAtomText(NULL,expr->value.field.field,XkbMessage));
- return ok;
- case ExprArrayRef:
- bogus= "array reference";
- case ExprActionDecl:
- if (bogus==NULL)
- bogus= "function use";
- ERROR1("Unexpected %s in mask expression\n",bogus);
- ACTION("Expression ignored\n");
- return False;
- case OpAdd:
- case OpSubtract:
- case OpMultiply:
- case OpDivide:
- left= expr->value.binary.left;
- right= expr->value.binary.right;
- if (ExprResolveMask(left,&leftRtrn,lookup,lookupPriv)&&
- ExprResolveMask(right,&rightRtrn,lookup,lookupPriv)) {
- switch (expr->op) {
- case OpAdd:
- val_rtrn->ival= leftRtrn.ival|rightRtrn.ival;
- break;
- case OpSubtract:
- val_rtrn->ival= leftRtrn.ival&(~rightRtrn.ival);
- break;
- case OpMultiply:
- case OpDivide:
- ERROR1("Cannot %s masks\n",
- expr->op==OpDivide?"divide":"multiply");
- ACTION("Illegal operation ignored\n");
- return False;
- }
- return True;
- }
- return False;
- case OpAssign:
- WSGO("Assignment operator not implemented yet\n");
- break;
- case OpInvert:
- left= expr->value.child;
- if (ExprResolveInteger(left,&leftRtrn,lookup,lookupPriv)) {
- val_rtrn->ival= ~leftRtrn.ival;
- return True;
- }
- return False;
- case OpUnaryPlus:
- case OpNegate:
- case OpNot:
- left= expr->value.child;
- if (ExprResolveInteger(left,&leftRtrn,lookup,lookupPriv)) {
- ERROR1("The %s operator cannot be used with a mask\n",
- (expr->op==OpNegate?"-":"!"));
- }
- return False;
- default:
- WSGO1("Unknown operator %d in ResolveMask\n",expr->op);
- break;
+ int ok = 0;
+ ExprResult leftRtrn, rightRtrn;
+ ExprDef *left, *right;
+ char *bogus = NULL;
+
+ switch (expr->op)
+ {
+ case ExprValue:
+ if (expr->type != TypeInt)
+ {
+ ERROR1
+ ("Found constant of type %s where a mask was expected\n",
+ exprTypeText(expr->type));
+ return False;
+ }
+ val_rtrn->ival = expr->value.ival;
+ return True;
+ case ExprIdent:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ None, expr->value.str, TypeInt, val_rtrn);
+ }
+ if (!ok)
+ ERROR1("Identifier \"%s\" of type int is unknown\n",
+ XkbAtomText(NULL, expr->value.str, XkbMessage));
+ return ok;
+ case ExprFieldRef:
+ if (lookup)
+ {
+ ok = (*lookup) (lookupPriv,
+ expr->value.field.element,
+ expr->value.field.field, TypeInt, val_rtrn);
+ }
+ if (!ok)
+ ERROR2("Default \"%s.%s\" of type int is unknown\n",
+ XkbAtomText(NULL, expr->value.field.element, XkbMessage),
+ XkbAtomText(NULL, expr->value.field.field, XkbMessage));
+ return ok;
+ case ExprArrayRef:
+ bogus = "array reference";
+ case ExprActionDecl:
+ if (bogus == NULL)
+ bogus = "function use";
+ ERROR1("Unexpected %s in mask expression\n", bogus);
+ ACTION("Expression ignored\n");
+ return False;
+ case OpAdd:
+ case OpSubtract:
+ case OpMultiply:
+ case OpDivide:
+ left = expr->value.binary.left;
+ right = expr->value.binary.right;
+ if (ExprResolveMask(left, &leftRtrn, lookup, lookupPriv) &&
+ ExprResolveMask(right, &rightRtrn, lookup, lookupPriv))
+ {
+ switch (expr->op)
+ {
+ case OpAdd:
+ val_rtrn->ival = leftRtrn.ival | rightRtrn.ival;
+ break;
+ case OpSubtract:
+ val_rtrn->ival = leftRtrn.ival & (~rightRtrn.ival);
+ break;
+ case OpMultiply:
+ case OpDivide:
+ ERROR1("Cannot %s masks\n",
+ expr->op == OpDivide ? "divide" : "multiply");
+ ACTION("Illegal operation ignored\n");
+ return False;
+ }
+ return True;
+ }
+ return False;
+ case OpAssign:
+ WSGO("Assignment operator not implemented yet\n");
+ break;
+ case OpInvert:
+ left = expr->value.child;
+ if (ExprResolveInteger(left, &leftRtrn, lookup, lookupPriv))
+ {
+ val_rtrn->ival = ~leftRtrn.ival;
+ return True;
+ }
+ return False;
+ case OpUnaryPlus:
+ case OpNegate:
+ case OpNot:
+ left = expr->value.child;
+ if (ExprResolveInteger(left, &leftRtrn, lookup, lookupPriv))
+ {
+ ERROR1("The %s operator cannot be used with a mask\n",
+ (expr->op == OpNegate ? "-" : "!"));
+ }
+ return False;
+ default:
+ WSGO1("Unknown operator %d in ResolveMask\n", expr->op);
+ break;
}
return False;
}
int
-ExprResolveKeySym( ExprDef * expr,
- ExprResult * val_rtrn,
- IdentLookupFunc lookup,
- XPointer lookupPriv)
+ExprResolveKeySym(ExprDef * expr,
+ ExprResult * val_rtrn,
+ IdentLookupFunc lookup, XPointer lookupPriv)
{
-int ok= 0;
-KeySym sym;
-
- if (expr->op==ExprIdent) {
- char *str;
- str= XkbAtomGetString(NULL,expr->value.str);
- if ((str!=NULL)&&((sym= XStringToKeysym(str))!=NoSymbol)) {
- val_rtrn->uval= sym;
- return True;
- }
+ int ok = 0;
+ KeySym sym;
+
+ if (expr->op == ExprIdent)
+ {
+ char *str;
+ str = XkbAtomGetString(NULL, expr->value.str);
+ if ((str != NULL) && ((sym = XStringToKeysym(str)) != NoSymbol))
+ {
+ val_rtrn->uval = sym;
+ return True;
+ }
}
- ok= ExprResolveInteger(expr,val_rtrn,lookup,lookupPriv);
- if ((ok)&&(val_rtrn->uval<10))
- val_rtrn->uval+= '0';
+ ok = ExprResolveInteger(expr, val_rtrn, lookup, lookupPriv);
+ if ((ok) && (val_rtrn->uval < 10))
+ val_rtrn->uval += '0';
return ok;
}
diff --git a/app/xkbcomp/expr.h b/app/xkbcomp/expr.h
index 065716da8..02519f941 100644
--- a/app/xkbcomp/expr.h
+++ b/app/xkbcomp/expr.h
@@ -1,4 +1,3 @@
-/* $Xorg: expr.h,v 1.3 2000/08/17 19:54:30 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,166 +23,150 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
#ifndef EXPR_H
#define EXPR_H 1
-typedef union _ExprResult {
- char * str;
- int ival;
- unsigned uval;
- XkbKeyNameRec keyName;
+typedef union _ExprResult
+{
+ char *str;
+ int ival;
+ unsigned uval;
+ XkbKeyNameRec keyName;
} ExprResult;
-typedef Bool (*IdentLookupFunc)(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern char *exprTypeText(
- unsigned /* type */
-);
-
-extern int ExprResolveLhs(
- ExprDef * /* expr */,
- ExprResult * /* elem_rtrn */,
- ExprResult * /* field_rtrn */,
- ExprDef ** /* index_rtrn */
-);
-
-typedef struct _LookupPriv {
- XPointer priv;
- IdentLookupFunc chain;
- XPointer chainPriv;
+typedef Bool(*IdentLookupFunc) (XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern char *exprTypeText(unsigned /* type */
+ );
+
+extern int ExprResolveLhs(ExprDef * /* expr */ ,
+ ExprResult * /* elem_rtrn */ ,
+ ExprResult * /* field_rtrn */ ,
+ ExprDef ** /* index_rtrn */
+ );
+
+typedef struct _LookupPriv
+{
+ XPointer priv;
+ IdentLookupFunc chain;
+ XPointer chainPriv;
} LookupPriv;
-typedef struct _LookupEntry {
+typedef struct _LookupEntry
+{
const char *name;
- unsigned result;
+ unsigned result;
} LookupEntry;
-typedef struct _LookupTable {
- char * element;
- LookupEntry * entries;
- struct _LookupTable * nextElement;
+typedef struct _LookupTable
+{
+ char *element;
+ LookupEntry *entries;
+ struct _LookupTable *nextElement;
} LookupTable;
-extern char *exprOpText(
- unsigned /* type */
-);
-
-extern int RadioLookup(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern int SimpleLookup(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern int TableLookup(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern int LookupModIndex(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern int LookupModMask(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
-
-extern int ExprResolveModIndex(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveModMask(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* priv */
-);
-
-extern int ExprResolveBoolean(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveInteger(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveFloat(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveString(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveKeyName(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveEnum(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- LookupEntry * /* values */
-);
-
-extern int ExprResolveMask(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
-
-extern int ExprResolveKeySym(
- ExprDef * /* expr */,
- ExprResult * /* val_rtrn */,
- IdentLookupFunc /* lookup */,
- XPointer /* lookupPriv */
-);
+extern char *exprOpText(unsigned /* type */
+ );
+
+extern int RadioLookup(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern int SimpleLookup(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern int TableLookup(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern int LookupModIndex(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern int LookupModMask(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
+
+extern int ExprResolveModIndex(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveModMask(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* priv */
+ );
+
+extern int ExprResolveBoolean(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveInteger(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveFloat(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveString(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveKeyName(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveEnum(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ LookupEntry * /* values */
+ );
+
+extern int ExprResolveMask(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
+
+extern int ExprResolveKeySym(ExprDef * /* expr */ ,
+ ExprResult * /* val_rtrn */ ,
+ IdentLookupFunc /* lookup */ ,
+ XPointer /* lookupPriv */
+ );
#endif /* EXPR_H */
diff --git a/app/xkbcomp/geometry.c b/app/xkbcomp/geometry.c
index 8e47d7e43..6eb3fb880 100644
--- a/app/xkbcomp/geometry.c
+++ b/app/xkbcomp/geometry.c
@@ -1,4 +1,3 @@
-/* $Xorg: geometry.c,v 1.3 2000/08/17 19:54:30 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/geometry.c,v 1.5tsi Exp $ */
#include "xkbcomp.h"
#include "tokens.h"
@@ -46,25 +44,27 @@
#define DFLT_ENCODING "iso8859-1"
#define DFLT_SIZE 120
-typedef struct _PropertyInfo {
- CommonInfo defs;
- char * name;
- char * value;
+typedef struct _PropertyInfo
+{
+ CommonInfo defs;
+ char *name;
+ char *value;
} PropertyInfo;
#define _GSh_Outlines (1<<1)
#define _GSh_Approx (1<<2)
#define _GSh_Primary (1<<3)
-typedef struct _ShapeInfo {
- CommonInfo defs;
- Atom name;
- short index;
- unsigned short nOutlines;
- unsigned short szOutlines;
- XkbOutlinePtr outlines;
- XkbOutlinePtr approx;
- XkbOutlinePtr primary;
- int dfltCornerRadius;
+typedef struct _ShapeInfo
+{
+ CommonInfo defs;
+ Atom name;
+ short index;
+ unsigned short nOutlines;
+ unsigned short szOutlines;
+ XkbOutlinePtr outlines;
+ XkbOutlinePtr approx;
+ XkbOutlinePtr primary;
+ int dfltCornerRadius;
} ShapeInfo;
#define shText(d,s) \
@@ -75,12 +75,12 @@ typedef struct _ShapeInfo {
#define _GD_Left (1<<2)
#define _GD_Angle (1<<3)
#define _GD_Shape (1<<4)
-#define _GD_FontVariant (1<<4) /* CHEATING */
+#define _GD_FontVariant (1<<4) /* CHEATING */
#define _GD_Corner (1<<5)
-#define _GD_Width (1<<5) /* CHEATING */
+#define _GD_Width (1<<5) /* CHEATING */
#define _GD_Color (1<<6)
#define _GD_OffColor (1<<7)
-#define _GD_Height (1<<7) /* CHEATING */
+#define _GD_Height (1<<7) /* CHEATING */
#define _GD_Text (1<<8)
#define _GD_Font (1<<9)
#define _GD_FontSlant (1<<10)
@@ -93,30 +93,31 @@ typedef struct _ShapeInfo {
#define _GD_FontParts (_GD_Font|_GD_FontSlant|_GD_FontWeight|_GD_FontSetWidth|_GD_FontSize|_GD_FontEncoding|_GD_FontVariant)
-typedef struct _DoodadInfo {
- CommonInfo defs;
- Atom name;
- unsigned char type;
- unsigned char priority;
- short top;
- short left;
- short angle;
- unsigned short corner;
- unsigned short width;
- unsigned short height;
- Atom shape;
- Atom color;
- Atom offColor;
- Atom text;
- Atom font;
- Atom fontSlant;
- Atom fontWeight;
- Atom fontSetWidth;
- Atom fontVariant;
- unsigned short fontSize;
- Atom fontEncoding;
- Atom fontSpec;
- char * logoName;
+typedef struct _DoodadInfo
+{
+ CommonInfo defs;
+ Atom name;
+ unsigned char type;
+ unsigned char priority;
+ short top;
+ short left;
+ short angle;
+ unsigned short corner;
+ unsigned short width;
+ unsigned short height;
+ Atom shape;
+ Atom color;
+ Atom offColor;
+ Atom text;
+ Atom font;
+ Atom fontSlant;
+ Atom fontWeight;
+ Atom fontSetWidth;
+ Atom fontVariant;
+ unsigned short fontSize;
+ Atom fontEncoding;
+ Atom fontSpec;
+ char *logoName;
struct _SectionInfo *section;
} DoodadInfo;
@@ -129,14 +130,15 @@ typedef struct _DoodadInfo {
#define _GK_Gap (1<<2)
#define _GK_Shape (1<<3)
#define _GK_Color (1<<4)
-typedef struct _KeyInfo {
- CommonInfo defs;
- char name[8];
- short gap;
- short index;
- Atom shape;
- Atom color;
- struct _RowInfo * row;
+typedef struct _KeyInfo
+{
+ CommonInfo defs;
+ char name[8];
+ short gap;
+ short index;
+ Atom shape;
+ Atom color;
+ struct _RowInfo *row;
} KeyInfo;
#define keyText(k) ((k)&&(k)->name[0]?(k)->name:"default")
@@ -144,35 +146,38 @@ typedef struct _KeyInfo {
#define _GR_Vertical (1<<1)
#define _GR_Top (1<<2)
#define _GR_Left (1<<3)
-typedef struct _RowInfo {
- CommonInfo defs;
- unsigned short top;
- unsigned short left;
- short index;
- Bool vertical;
- unsigned short nKeys;
- KeyInfo * keys;
- KeyInfo dfltKey;
+typedef struct _RowInfo
+{
+ CommonInfo defs;
+ unsigned short top;
+ unsigned short left;
+ short index;
+ Bool vertical;
+ unsigned short nKeys;
+ KeyInfo *keys;
+ KeyInfo dfltKey;
struct _SectionInfo *section;
} RowInfo;
#define rowText(d,r) \
((r)?XkbAtomText((d),(r)->section->name,XkbMessage):"default")
#define _GOK_UnknownRow -1
-typedef struct _OverlayKeyInfo {
- CommonInfo defs;
- short sectionRow;
- short overlayRow;
- char over[XkbKeyNameLength+1];
- char under[XkbKeyNameLength+1];
+typedef struct _OverlayKeyInfo
+{
+ CommonInfo defs;
+ short sectionRow;
+ short overlayRow;
+ char over[XkbKeyNameLength + 1];
+ char under[XkbKeyNameLength + 1];
} OverlayKeyInfo;
-typedef struct _OverlayInfo {
- CommonInfo defs;
- Atom name;
- unsigned short nRows;
- unsigned short nKeys;
- OverlayKeyInfo *keys;
+typedef struct _OverlayInfo
+{
+ CommonInfo defs;
+ Atom name;
+ unsigned short nRows;
+ unsigned short nKeys;
+ OverlayKeyInfo *keys;
} OverlayInfo;
#define oiText(d,o) ((o)?XkbAtomText((d),(o)->name,XkbMessage):"default")
@@ -185,434 +190,472 @@ typedef struct _OverlayInfo {
#define _GS_Height (1<<5)
#define _GS_Angle (1<<6)
#define _GS_Priority (1<<7)
-typedef struct _SectionInfo {
- CommonInfo defs;
- Atom name;
- unsigned short top;
- unsigned short left;
- unsigned short width;
- unsigned short height;
- unsigned short angle;
- unsigned short nRows;
- unsigned short nDoodads;
- unsigned short nOverlays;
- unsigned char priority;
- unsigned char nextDoodadPriority;
- RowInfo * rows;
- DoodadInfo * doodads;
- RowInfo dfltRow;
- DoodadInfo * dfltDoodads;
- OverlayInfo * overlays;
+typedef struct _SectionInfo
+{
+ CommonInfo defs;
+ Atom name;
+ unsigned short top;
+ unsigned short left;
+ unsigned short width;
+ unsigned short height;
+ unsigned short angle;
+ unsigned short nRows;
+ unsigned short nDoodads;
+ unsigned short nOverlays;
+ unsigned char priority;
+ unsigned char nextDoodadPriority;
+ RowInfo *rows;
+ DoodadInfo *doodads;
+ RowInfo dfltRow;
+ DoodadInfo *dfltDoodads;
+ OverlayInfo *overlays;
struct _GeometryInfo *geometry;
} SectionInfo;
#define scText(d,s) ((s)?XkbAtomText((d),(s)->name,XkbMessage):"default")
-typedef struct _GeometryInfo {
- char * name;
- Display * dpy;
- unsigned fileID;
- unsigned merge;
- int errorCount;
- unsigned nextPriority;
- int nProps;
- int nShapes;
- int nSections;
- int nDoodads;
- PropertyInfo * props;
- ShapeInfo * shapes;
- SectionInfo * sections;
- DoodadInfo * doodads;
- int widthMM;
- int heightMM;
- Atom font;
- Atom fontSlant;
- Atom fontWeight;
- Atom fontSetWidth;
- Atom fontVariant;
- unsigned fontSize;
- Atom fontEncoding;
- Atom fontSpec;
- Atom baseColor;
- Atom labelColor;
- int dfltCornerRadius;
- SectionInfo dfltSection;
- DoodadInfo * dfltDoodads;
- AliasInfo * aliases;
+typedef struct _GeometryInfo
+{
+ char *name;
+ Display *dpy;
+ unsigned fileID;
+ unsigned merge;
+ int errorCount;
+ unsigned nextPriority;
+ int nProps;
+ int nShapes;
+ int nSections;
+ int nDoodads;
+ PropertyInfo *props;
+ ShapeInfo *shapes;
+ SectionInfo *sections;
+ DoodadInfo *doodads;
+ int widthMM;
+ int heightMM;
+ Atom font;
+ Atom fontSlant;
+ Atom fontWeight;
+ Atom fontSetWidth;
+ Atom fontVariant;
+ unsigned fontSize;
+ Atom fontEncoding;
+ Atom fontSpec;
+ Atom baseColor;
+ Atom labelColor;
+ int dfltCornerRadius;
+ SectionInfo dfltSection;
+ DoodadInfo *dfltDoodads;
+ AliasInfo *aliases;
} GeometryInfo;
static char *
-ddText(Display *dpy,DoodadInfo *di)
+ddText(Display * dpy, DoodadInfo * di)
{
-static char buf[64];
+ static char buf[64];
- if (di==NULL) {
- strcpy(buf,"default");
- return buf;
+ if (di == NULL)
+ {
+ strcpy(buf, "default");
+ return buf;
}
- if (di->section) {
- sprintf(buf,"%s in section %s",XkbAtomText(dpy,di->name,XkbMessage),
- scText(dpy,di->section));
- return buf;
+ if (di->section)
+ {
+ sprintf(buf, "%s in section %s",
+ XkbAtomText(dpy, di->name, XkbMessage), scText(dpy,
+ di->section));
+ return buf;
}
- return XkbAtomText(dpy,di->name,XkbMessage);
+ return XkbAtomText(dpy, di->name, XkbMessage);
}
/***====================================================================***/
static void
-InitPropertyInfo(PropertyInfo *pi,GeometryInfo *info)
+InitPropertyInfo(PropertyInfo * pi, GeometryInfo * info)
{
- pi->defs.defined= 0;
- pi->defs.fileID= info->fileID;
- pi->defs.merge= info->merge;
- pi->name= pi->value= NULL;
+ pi->defs.defined = 0;
+ pi->defs.fileID = info->fileID;
+ pi->defs.merge = info->merge;
+ pi->name = pi->value = NULL;
return;
}
static void
-FreeProperties(PropertyInfo *pi,GeometryInfo *info)
-{
-PropertyInfo * tmp;
-PropertyInfo * next;
-
- if (info->props==pi) {
- info->props= NULL;
- info->nProps= 0;
- }
- for (tmp=pi;tmp!=NULL;tmp=next) {
- if (tmp->name)
- uFree(tmp->name);
- if (tmp->value)
- uFree(tmp->value);
- tmp->name= tmp->value=NULL;
- next= (PropertyInfo *)tmp->defs.next;
- uFree(tmp);
+FreeProperties(PropertyInfo * pi, GeometryInfo * info)
+{
+ PropertyInfo *tmp;
+ PropertyInfo *next;
+
+ if (info->props == pi)
+ {
+ info->props = NULL;
+ info->nProps = 0;
+ }
+ for (tmp = pi; tmp != NULL; tmp = next)
+ {
+ if (tmp->name)
+ uFree(tmp->name);
+ if (tmp->value)
+ uFree(tmp->value);
+ tmp->name = tmp->value = NULL;
+ next = (PropertyInfo *) tmp->defs.next;
+ uFree(tmp);
}
return;
}
static void
-InitKeyInfo(KeyInfo *key,RowInfo *row,GeometryInfo *info)
+InitKeyInfo(KeyInfo * key, RowInfo * row, GeometryInfo * info)
{
- if (key!=&row->dfltKey) {
- *key= row->dfltKey;
- strcpy(key->name,"unknown");
- key->defs.defined&= ~_GK_Default;
+ if (key != &row->dfltKey)
+ {
+ *key = row->dfltKey;
+ strcpy(key->name, "unknown");
+ key->defs.defined &= ~_GK_Default;
}
- else {
- bzero(key,sizeof(KeyInfo));
- strcpy(key->name,"default");
- key->defs.defined= _GK_Default;
- key->defs.fileID= info->fileID;
- key->defs.merge= info->merge;
- key->defs.next= NULL;
- key->row= row;
+ else
+ {
+ bzero(key, sizeof(KeyInfo));
+ strcpy(key->name, "default");
+ key->defs.defined = _GK_Default;
+ key->defs.fileID = info->fileID;
+ key->defs.merge = info->merge;
+ key->defs.next = NULL;
+ key->row = row;
}
return;
}
static void
-ClearKeyInfo(KeyInfo *key)
+ClearKeyInfo(KeyInfo * key)
{
- key->defs.defined&= ~_GK_Default;
- strcpy(key->name,"default");
- key->gap= 0;
- key->shape= None;
- key->color= None;
+ key->defs.defined &= ~_GK_Default;
+ strcpy(key->name, "default");
+ key->gap = 0;
+ key->shape = None;
+ key->color = None;
return;
}
static void
-FreeKeys(KeyInfo *key,RowInfo *row,GeometryInfo *info)
+FreeKeys(KeyInfo * key, RowInfo * row, GeometryInfo * info)
{
-KeyInfo * tmp;
-KeyInfo * next;
+ KeyInfo *tmp;
+ KeyInfo *next;
- if (row->keys==key) {
- row->nKeys= 0;
- row->keys= NULL;
+ if (row->keys == key)
+ {
+ row->nKeys = 0;
+ row->keys = NULL;
}
- for (tmp=key;tmp!=NULL;tmp=next) {
- ClearKeyInfo(tmp);
- next= (KeyInfo *)tmp->defs.next;
- uFree(tmp);
+ for (tmp = key; tmp != NULL; tmp = next)
+ {
+ ClearKeyInfo(tmp);
+ next = (KeyInfo *) tmp->defs.next;
+ uFree(tmp);
}
return;
}
static void
-InitRowInfo(RowInfo *row,SectionInfo *section,GeometryInfo *info)
-{
- if (row!= &section->dfltRow) {
- *row= section->dfltRow;
- row->defs.defined&= ~_GR_Default;
- }
- else {
- bzero(row,sizeof(RowInfo *));
- row->defs.defined= _GR_Default;
- row->defs.fileID= info->fileID;
- row->defs.merge= info->merge;
- row->defs.next= NULL;
- row->section= section;
- row->nKeys= 0;
- row->keys= NULL;
- InitKeyInfo(&row->dfltKey,row,info);
+InitRowInfo(RowInfo * row, SectionInfo * section, GeometryInfo * info)
+{
+ if (row != &section->dfltRow)
+ {
+ *row = section->dfltRow;
+ row->defs.defined &= ~_GR_Default;
+ }
+ else
+ {
+ bzero(row, sizeof(RowInfo *));
+ row->defs.defined = _GR_Default;
+ row->defs.fileID = info->fileID;
+ row->defs.merge = info->merge;
+ row->defs.next = NULL;
+ row->section = section;
+ row->nKeys = 0;
+ row->keys = NULL;
+ InitKeyInfo(&row->dfltKey, row, info);
}
return;
}
static void
-ClearRowInfo(RowInfo *row,GeometryInfo *info)
+ClearRowInfo(RowInfo * row, GeometryInfo * info)
{
- row->defs.defined&= ~_GR_Default;
- row->top= row->left= 0;
- row->vertical= False;
- row->nKeys= 0;
+ row->defs.defined &= ~_GR_Default;
+ row->top = row->left = 0;
+ row->vertical = False;
+ row->nKeys = 0;
if (row->keys)
- FreeKeys(row->keys,row,info);
+ FreeKeys(row->keys, row, info);
ClearKeyInfo(&row->dfltKey);
- row->dfltKey.defs.defined|= _GK_Default;
+ row->dfltKey.defs.defined |= _GK_Default;
return;
}
static void
-FreeRows(RowInfo *row,SectionInfo *section,GeometryInfo *info)
+FreeRows(RowInfo * row, SectionInfo * section, GeometryInfo * info)
{
-RowInfo * next;
-RowInfo * tmp;
+ RowInfo *next;
+ RowInfo *tmp;
- if (row==section->rows) {
- section->nRows= 0;
- section->rows= NULL;
+ if (row == section->rows)
+ {
+ section->nRows = 0;
+ section->rows = NULL;
}
- for (tmp=row;tmp!=NULL;tmp=next) {
- ClearRowInfo(tmp,info);
- next= (RowInfo *)tmp->defs.next;
- uFree(tmp);
+ for (tmp = row; tmp != NULL; tmp = next)
+ {
+ ClearRowInfo(tmp, info);
+ next = (RowInfo *) tmp->defs.next;
+ uFree(tmp);
}
return;
}
static DoodadInfo *
-FindDoodadByType(DoodadInfo *di,unsigned type)
+FindDoodadByType(DoodadInfo * di, unsigned type)
{
- while (di) {
- if (di->type==type)
- return di;
- di= (DoodadInfo *)di->defs.next;
+ while (di)
+ {
+ if (di->type == type)
+ return di;
+ di = (DoodadInfo *) di->defs.next;
}
return NULL;
}
static DoodadInfo *
-FindDoodadByName(DoodadInfo *di,Atom name)
+FindDoodadByName(DoodadInfo * di, Atom name)
{
- while (di) {
- if (di->name==name)
- return di;
- di= (DoodadInfo *)di->defs.next;
+ while (di)
+ {
+ if (di->name == name)
+ return di;
+ di = (DoodadInfo *) di->defs.next;
}
return NULL;
}
static void
-InitDoodadInfo(DoodadInfo *di,unsigned type,SectionInfo *si,GeometryInfo *info)
+InitDoodadInfo(DoodadInfo * di, unsigned type, SectionInfo * si,
+ GeometryInfo * info)
{
-DoodadInfo * dflt;
+ DoodadInfo *dflt;
- dflt= NULL;
+ dflt = NULL;
if (si && si->dfltDoodads)
- dflt= FindDoodadByType(si->dfltDoodads,type);
- if ((dflt==NULL)&&(info->dfltDoodads))
- dflt= FindDoodadByType(info->dfltDoodads,type);
- if (dflt!=NULL) {
- *di= *dflt;
- di->defs.next= NULL;
- }
- else {
- bzero(di,sizeof(DoodadInfo));
- di->defs.fileID= info->fileID;
- di->type= type;
- }
- di->section= si;
- if (si!=NULL) {
- di->priority= si->nextDoodadPriority++;
+ dflt = FindDoodadByType(si->dfltDoodads, type);
+ if ((dflt == NULL) && (info->dfltDoodads))
+ dflt = FindDoodadByType(info->dfltDoodads, type);
+ if (dflt != NULL)
+ {
+ *di = *dflt;
+ di->defs.next = NULL;
+ }
+ else
+ {
+ bzero(di, sizeof(DoodadInfo));
+ di->defs.fileID = info->fileID;
+ di->type = type;
+ }
+ di->section = si;
+ if (si != NULL)
+ {
+ di->priority = si->nextDoodadPriority++;
#if XkbGeomMaxPriority < 255
- if (si->nextDoodadPriority>XkbGeomMaxPriority)
- si->nextDoodadPriority= XkbGeomMaxPriority;
+ if (si->nextDoodadPriority > XkbGeomMaxPriority)
+ si->nextDoodadPriority = XkbGeomMaxPriority;
#endif
}
- else {
- di->priority= info->nextPriority++;
- if (info->nextPriority>XkbGeomMaxPriority)
- info->nextPriority= XkbGeomMaxPriority;
+ else
+ {
+ di->priority = info->nextPriority++;
+ if (info->nextPriority > XkbGeomMaxPriority)
+ info->nextPriority = XkbGeomMaxPriority;
}
return;
}
static void
-ClearDoodadInfo(DoodadInfo *di)
+ClearDoodadInfo(DoodadInfo * di)
{
-CommonInfo defs;
+ CommonInfo defs;
- defs= di->defs;
- bzero(di,sizeof(DoodadInfo));
- di->defs= defs;
- di->defs.defined= 0;
+ defs = di->defs;
+ bzero(di, sizeof(DoodadInfo));
+ di->defs = defs;
+ di->defs.defined = 0;
return;
}
static void
-ClearOverlayInfo(OverlayInfo *ol)
+ClearOverlayInfo(OverlayInfo * ol)
{
- if (ol && ol->keys) {
- ol->keys= (OverlayKeyInfo *)ClearCommonInfo(&ol->keys->defs);
- ol->nKeys= 0;
+ if (ol && ol->keys)
+ {
+ ol->keys = (OverlayKeyInfo *) ClearCommonInfo(&ol->keys->defs);
+ ol->nKeys = 0;
}
return;
}
static void
-FreeDoodads(DoodadInfo *di,SectionInfo *si,GeometryInfo *info)
-{
-DoodadInfo * tmp;
-DoodadInfo * next;
-
- if (si) {
- if (si->doodads==di) {
- si->doodads= NULL;
- si->nDoodads= 0;
- }
- if (si->dfltDoodads==di)
- si->dfltDoodads= NULL;
- }
- if (info->doodads==di) {
- info->doodads= NULL;
- info->nDoodads= 0;
- }
- if (info->dfltDoodads==di)
- info->dfltDoodads= NULL;
- for (tmp=di;tmp!=NULL;tmp=next) {
- next= (DoodadInfo *)tmp->defs.next;
- ClearDoodadInfo(tmp);
- uFree(tmp);
+FreeDoodads(DoodadInfo * di, SectionInfo * si, GeometryInfo * info)
+{
+ DoodadInfo *tmp;
+ DoodadInfo *next;
+
+ if (si)
+ {
+ if (si->doodads == di)
+ {
+ si->doodads = NULL;
+ si->nDoodads = 0;
+ }
+ if (si->dfltDoodads == di)
+ si->dfltDoodads = NULL;
+ }
+ if (info->doodads == di)
+ {
+ info->doodads = NULL;
+ info->nDoodads = 0;
+ }
+ if (info->dfltDoodads == di)
+ info->dfltDoodads = NULL;
+ for (tmp = di; tmp != NULL; tmp = next)
+ {
+ next = (DoodadInfo *) tmp->defs.next;
+ ClearDoodadInfo(tmp);
+ uFree(tmp);
}
return;
}
static void
-InitSectionInfo(SectionInfo *si,GeometryInfo *info)
-{
- if (si!=&info->dfltSection) {
- *si= info->dfltSection;
- si->defs.defined&= ~_GS_Default;
- si->name= XkbInternAtom(info->dpy,"unknown",False);
- si->priority= info->nextPriority++;
- if (info->nextPriority>XkbGeomMaxPriority)
- info->nextPriority= XkbGeomMaxPriority;
- }
- else {
- bzero(si,sizeof(SectionInfo));
- si->defs.fileID= info->fileID;
- si->defs.merge= info->merge;
- si->defs.next= NULL;
- si->geometry= info;
- si->name= XkbInternAtom(info->dpy,"default",False);
- InitRowInfo(&si->dfltRow,si,info);
+InitSectionInfo(SectionInfo * si, GeometryInfo * info)
+{
+ if (si != &info->dfltSection)
+ {
+ *si = info->dfltSection;
+ si->defs.defined &= ~_GS_Default;
+ si->name = XkbInternAtom(info->dpy, "unknown", False);
+ si->priority = info->nextPriority++;
+ if (info->nextPriority > XkbGeomMaxPriority)
+ info->nextPriority = XkbGeomMaxPriority;
+ }
+ else
+ {
+ bzero(si, sizeof(SectionInfo));
+ si->defs.fileID = info->fileID;
+ si->defs.merge = info->merge;
+ si->defs.next = NULL;
+ si->geometry = info;
+ si->name = XkbInternAtom(info->dpy, "default", False);
+ InitRowInfo(&si->dfltRow, si, info);
}
return;
}
static void
-DupSectionInfo(SectionInfo *into,SectionInfo *from,GeometryInfo *info)
-{
-CommonInfo defs;
-
- defs= into->defs;
- *into= *from;
- into->defs.fileID= defs.fileID;
- into->defs.merge= defs.merge;
- into->defs.next= NULL;
- into->dfltRow.defs.fileID= defs.fileID;
- into->dfltRow.defs.merge= defs.merge;
- into->dfltRow.defs.next= NULL;
- into->dfltRow.section= into;
- into->dfltRow.dfltKey.defs.fileID= defs.fileID;
- into->dfltRow.dfltKey.defs.merge= defs.merge;
- into->dfltRow.dfltKey.defs.next= NULL;
- into->dfltRow.dfltKey.row= &into->dfltRow;
+DupSectionInfo(SectionInfo * into, SectionInfo * from, GeometryInfo * info)
+{
+ CommonInfo defs;
+
+ defs = into->defs;
+ *into = *from;
+ into->defs.fileID = defs.fileID;
+ into->defs.merge = defs.merge;
+ into->defs.next = NULL;
+ into->dfltRow.defs.fileID = defs.fileID;
+ into->dfltRow.defs.merge = defs.merge;
+ into->dfltRow.defs.next = NULL;
+ into->dfltRow.section = into;
+ into->dfltRow.dfltKey.defs.fileID = defs.fileID;
+ into->dfltRow.dfltKey.defs.merge = defs.merge;
+ into->dfltRow.dfltKey.defs.next = NULL;
+ into->dfltRow.dfltKey.row = &into->dfltRow;
return;
}
static void
-ClearSectionInfo(SectionInfo *si,GeometryInfo *info)
-{
-
- si->defs.defined&= ~_GS_Default;
- si->name= XkbInternAtom(info->dpy,"default",False);
- si->top= si->left= 0;
- si->width= si->height= 0;
- si->angle= 0;
- if (si->rows) {
- FreeRows(si->rows,si,info);
- si->rows= NULL;
- }
- ClearRowInfo(&si->dfltRow,info);
- if (si->doodads) {
- FreeDoodads(si->doodads,si,info);
- si->doodads= NULL;
- }
- si->dfltRow.defs.defined= _GR_Default;
+ClearSectionInfo(SectionInfo * si, GeometryInfo * info)
+{
+
+ si->defs.defined &= ~_GS_Default;
+ si->name = XkbInternAtom(info->dpy, "default", False);
+ si->top = si->left = 0;
+ si->width = si->height = 0;
+ si->angle = 0;
+ if (si->rows)
+ {
+ FreeRows(si->rows, si, info);
+ si->rows = NULL;
+ }
+ ClearRowInfo(&si->dfltRow, info);
+ if (si->doodads)
+ {
+ FreeDoodads(si->doodads, si, info);
+ si->doodads = NULL;
+ }
+ si->dfltRow.defs.defined = _GR_Default;
return;
}
static void
-FreeSections(SectionInfo *si,GeometryInfo *info)
+FreeSections(SectionInfo * si, GeometryInfo * info)
{
-SectionInfo * tmp;
-SectionInfo * next;
+ SectionInfo *tmp;
+ SectionInfo *next;
- if (si==info->sections) {
- info->nSections= 0;
- info->sections= NULL;
+ if (si == info->sections)
+ {
+ info->nSections = 0;
+ info->sections = NULL;
}
- for (tmp=si;tmp!=NULL;tmp=next) {
- ClearSectionInfo(tmp,info);
- next= (SectionInfo *)tmp->defs.next;
- uFree(tmp);
+ for (tmp = si; tmp != NULL; tmp = next)
+ {
+ ClearSectionInfo(tmp, info);
+ next = (SectionInfo *) tmp->defs.next;
+ uFree(tmp);
}
return;
}
static void
-FreeShapes(ShapeInfo *si,GeometryInfo *info)
-{
-ShapeInfo * tmp;
-ShapeInfo * next;
-
- if (si==info->shapes) {
- info->nShapes= 0;
- info->shapes= NULL;
- }
- for (tmp=si;tmp!=NULL;tmp=next) {
- if (tmp->outlines) {
- register int i;
- for (i=0;i<tmp->nOutlines;i++) {
- if (tmp->outlines[i].points!=NULL) {
- uFree(tmp->outlines[i].points);
- tmp->outlines[i].num_points= 0;
- tmp->outlines[i].points= NULL;
- }
- }
- uFree(tmp->outlines);
- tmp->szOutlines= 0;
- tmp->nOutlines= 0;
- tmp->outlines= NULL;
- tmp->primary= tmp->approx=NULL;
- }
- next= (ShapeInfo *)tmp->defs.next;
- uFree(tmp);
+FreeShapes(ShapeInfo * si, GeometryInfo * info)
+{
+ ShapeInfo *tmp;
+ ShapeInfo *next;
+
+ if (si == info->shapes)
+ {
+ info->nShapes = 0;
+ info->shapes = NULL;
+ }
+ for (tmp = si; tmp != NULL; tmp = next)
+ {
+ if (tmp->outlines)
+ {
+ register int i;
+ for (i = 0; i < tmp->nOutlines; i++)
+ {
+ if (tmp->outlines[i].points != NULL)
+ {
+ uFree(tmp->outlines[i].points);
+ tmp->outlines[i].num_points = 0;
+ tmp->outlines[i].points = NULL;
+ }
+ }
+ uFree(tmp->outlines);
+ tmp->szOutlines = 0;
+ tmp->nOutlines = 0;
+ tmp->outlines = NULL;
+ tmp->primary = tmp->approx = NULL;
+ }
+ next = (ShapeInfo *) tmp->defs.next;
+ uFree(tmp);
}
return;
}
@@ -620,300 +663,342 @@ ShapeInfo * next;
/***====================================================================***/
static void
-InitGeometryInfo(GeometryInfo *info,unsigned fileID,unsigned merge)
+InitGeometryInfo(GeometryInfo * info, unsigned fileID, unsigned merge)
{
- bzero(info,sizeof(GeometryInfo));
- info->fileID= fileID;
- info->merge= merge;
- InitSectionInfo(&info->dfltSection,info);
- info->dfltSection.defs.defined= _GS_Default;
+ bzero(info, sizeof(GeometryInfo));
+ info->fileID = fileID;
+ info->merge = merge;
+ InitSectionInfo(&info->dfltSection, info);
+ info->dfltSection.defs.defined = _GS_Default;
return;
}
static void
-ClearGeometryInfo(GeometryInfo *info)
+ClearGeometryInfo(GeometryInfo * info)
{
if (info->name)
- uFree(info->name);
- info->name= NULL;
+ uFree(info->name);
+ info->name = NULL;
if (info->props)
- FreeProperties(info->props,info);
+ FreeProperties(info->props, info);
if (info->shapes)
- FreeShapes(info->shapes,info);
+ FreeShapes(info->shapes, info);
if (info->sections)
- FreeSections(info->sections,info);
- info->widthMM= 0;
- info->heightMM= 0;
- info->dfltCornerRadius= 0;
- ClearSectionInfo(&info->dfltSection,info);
- info->dfltSection.defs.defined= _GS_Default;
+ FreeSections(info->sections, info);
+ info->widthMM = 0;
+ info->heightMM = 0;
+ info->dfltCornerRadius = 0;
+ ClearSectionInfo(&info->dfltSection, info);
+ info->dfltSection.defs.defined = _GS_Default;
if (info->aliases)
- ClearAliases(&info->aliases);
+ ClearAliases(&info->aliases);
return;
}
/***====================================================================***/
static PropertyInfo *
-NextProperty(GeometryInfo *info)
+NextProperty(GeometryInfo * info)
{
-PropertyInfo * pi;
+ PropertyInfo *pi;
- pi= uTypedAlloc(PropertyInfo);
- if (pi) {
- bzero((char *)pi,sizeof(PropertyInfo));
- info->props= (PropertyInfo *)AddCommonInfo(&info->props->defs,
- (CommonInfo *)pi);
- info->nProps++;
+ pi = uTypedAlloc(PropertyInfo);
+ if (pi)
+ {
+ bzero((char *) pi, sizeof(PropertyInfo));
+ info->props = (PropertyInfo *) AddCommonInfo(&info->props->defs,
+ (CommonInfo *) pi);
+ info->nProps++;
}
return pi;
}
static PropertyInfo *
-FindProperty(GeometryInfo *info,char *name)
+FindProperty(GeometryInfo * info, char *name)
{
-PropertyInfo * old;
+ PropertyInfo *old;
if (!name)
- return NULL;
- for (old= info->props;old!=NULL;old=(PropertyInfo *)old->defs.next) {
- if ((old->name)&&(uStringEqual(name,old->name)))
- return old;
+ return NULL;
+ for (old = info->props; old != NULL;
+ old = (PropertyInfo *) old->defs.next)
+ {
+ if ((old->name) && (uStringEqual(name, old->name)))
+ return old;
}
return NULL;
}
static Bool
-AddProperty(GeometryInfo *info,PropertyInfo *new)
-{
-PropertyInfo * old;
-
- if ((!new)||(!new->value)||(!new->name))
- return False;
- old= FindProperty(info,new->name);
- if (old!=NULL) {
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple definitions for the \"%s\" property\n",
- new->name);
- ACTION2("Ignoring \"%s\", using \"%s\"\n",old->value,
- new->value);
- }
- if (old->value)
- uFree(old->value);
- old->value= uStringDup(new->value);
- return True;
- }
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple definitions for \"%s\" property\n",new->name);
- ACTION2("Using \"%s\", ignoring \"%s\" \n",old->value,new->value);
- }
- return True;
- }
- old= new;
- if ((new= NextProperty(info))==NULL)
- return False;
- new->defs.next= NULL;
- new->name= uStringDup(old->name);
- new->value= uStringDup(old->value);
+AddProperty(GeometryInfo * info, PropertyInfo * new)
+{
+ PropertyInfo *old;
+
+ if ((!new) || (!new->value) || (!new->name))
+ return False;
+ old = FindProperty(info, new->name);
+ if (old != NULL)
+ {
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Multiple definitions for the \"%s\" property\n",
+ new->name);
+ ACTION2("Ignoring \"%s\", using \"%s\"\n", old->value,
+ new->value);
+ }
+ if (old->value)
+ uFree(old->value);
+ old->value = uStringDup(new->value);
+ return True;
+ }
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple definitions for \"%s\" property\n", new->name);
+ ACTION2("Using \"%s\", ignoring \"%s\" \n", old->value,
+ new->value);
+ }
+ return True;
+ }
+ old = new;
+ if ((new = NextProperty(info)) == NULL)
+ return False;
+ new->defs.next = NULL;
+ new->name = uStringDup(old->name);
+ new->value = uStringDup(old->value);
return True;
}
/***====================================================================***/
static ShapeInfo *
-NextShape(GeometryInfo *info)
+NextShape(GeometryInfo * info)
{
-ShapeInfo * si;
+ ShapeInfo *si;
- si= uTypedAlloc(ShapeInfo);
- if (si) {
- bzero((char *)si,sizeof(ShapeInfo));
- info->shapes= (ShapeInfo *)AddCommonInfo(&info->shapes->defs,
- (CommonInfo *)si);
- info->nShapes++;
- si->dfltCornerRadius= info->dfltCornerRadius;
+ si = uTypedAlloc(ShapeInfo);
+ if (si)
+ {
+ bzero((char *) si, sizeof(ShapeInfo));
+ info->shapes = (ShapeInfo *) AddCommonInfo(&info->shapes->defs,
+ (CommonInfo *) si);
+ info->nShapes++;
+ si->dfltCornerRadius = info->dfltCornerRadius;
}
return si;
}
static ShapeInfo *
-FindShape(GeometryInfo *info, Atom name, const char *type, const char *which)
-{
-ShapeInfo * old;
-
- for (old= info->shapes;old!=NULL;old=(ShapeInfo *)old->defs.next) {
- if (name==old->name)
- return old;
- }
- if (type!=NULL) {
- old= info->shapes;
- WARN3("Unknown shape \"%s\" for %s %s\n",
- XkbAtomText(info->dpy,name,XkbMessage),type,which);
- if (old) {
- ACTION1("Using default shape %s instead\n",shText(info->dpy,old));
- return old;
- }
- ACTION("No default shape; definition ignored\n");
- return NULL;
+FindShape(GeometryInfo * info, Atom name, const char *type, const char *which)
+{
+ ShapeInfo *old;
+
+ for (old = info->shapes; old != NULL; old = (ShapeInfo *) old->defs.next)
+ {
+ if (name == old->name)
+ return old;
+ }
+ if (type != NULL)
+ {
+ old = info->shapes;
+ WARN3("Unknown shape \"%s\" for %s %s\n",
+ XkbAtomText(info->dpy, name, XkbMessage), type, which);
+ if (old)
+ {
+ ACTION1("Using default shape %s instead\n",
+ shText(info->dpy, old));
+ return old;
+ }
+ ACTION("No default shape; definition ignored\n");
+ return NULL;
}
return NULL;
}
static Bool
-AddShape(GeometryInfo *info,ShapeInfo *new)
-{
-ShapeInfo * old;
-
- old= FindShape(info,new->name,NULL,NULL);
- if (old!=NULL) {
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- ShapeInfo *next= (ShapeInfo *)old->defs.next;
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Duplicate shape name \"%s\"\n",shText(info->dpy,old));
- ACTION("Using last definition\n");
- }
- *old= *new;
- old->defs.next= &next->defs;
- return True;
- }
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple shapes named \"%s\"\n",shText(info->dpy,old));
- ACTION("Using first definition\n");
- }
- return True;
- }
- old= new;
- if ((new= NextShape(info))==NULL)
- return False;
- *new= *old;
- new->defs.next= NULL;
- old->szOutlines= old->nOutlines= 0;
- old->outlines= NULL;
- old->approx= NULL;
- old->primary= NULL;
+AddShape(GeometryInfo * info, ShapeInfo * new)
+{
+ ShapeInfo *old;
+
+ old = FindShape(info, new->name, NULL, NULL);
+ if (old != NULL)
+ {
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ ShapeInfo *next = (ShapeInfo *) old->defs.next;
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Duplicate shape name \"%s\"\n",
+ shText(info->dpy, old));
+ ACTION("Using last definition\n");
+ }
+ *old = *new;
+ old->defs.next = &next->defs;
+ return True;
+ }
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple shapes named \"%s\"\n", shText(info->dpy, old));
+ ACTION("Using first definition\n");
+ }
+ return True;
+ }
+ old = new;
+ if ((new = NextShape(info)) == NULL)
+ return False;
+ *new = *old;
+ new->defs.next = NULL;
+ old->szOutlines = old->nOutlines = 0;
+ old->outlines = NULL;
+ old->approx = NULL;
+ old->primary = NULL;
return True;
}
/***====================================================================***/
static void
-ReplaceDoodad(DoodadInfo *into,DoodadInfo *from)
+ReplaceDoodad(DoodadInfo * into, DoodadInfo * from)
{
-CommonInfo * next;
+ CommonInfo *next;
- next= into->defs.next;
+ next = into->defs.next;
ClearDoodadInfo(into);
- *into= *from;
- into->defs.next= next;
- next= from->defs.next;
+ *into = *from;
+ into->defs.next = next;
+ next = from->defs.next;
ClearDoodadInfo(from);
- from->defs.next= next;
+ from->defs.next = next;
return;
}
static DoodadInfo *
-NextDfltDoodad(SectionInfo *si,GeometryInfo *info)
+NextDfltDoodad(SectionInfo * si, GeometryInfo * info)
{
-DoodadInfo * di;
+ DoodadInfo *di;
- di= uTypedCalloc(1,DoodadInfo);
- if (!di)
- return NULL;
- if (si) {
- si->dfltDoodads= (DoodadInfo *)AddCommonInfo(&si->dfltDoodads->defs,
- (CommonInfo *)di);
+ di = uTypedCalloc(1, DoodadInfo);
+ if (!di)
+ return NULL;
+ if (si)
+ {
+ si->dfltDoodads =
+ (DoodadInfo *) AddCommonInfo(&si->dfltDoodads->defs,
+ (CommonInfo *) di);
}
- else {
- info->dfltDoodads= (DoodadInfo *)AddCommonInfo(&info->dfltDoodads->defs,
- (CommonInfo *)di);
+ else
+ {
+ info->dfltDoodads =
+ (DoodadInfo *) AddCommonInfo(&info->dfltDoodads->defs,
+ (CommonInfo *) di);
}
return di;
}
static DoodadInfo *
-NextDoodad(SectionInfo *si,GeometryInfo *info)
-{
-DoodadInfo * di;
-
- di= uTypedCalloc(1,DoodadInfo);
- if (di) {
- if (si) {
- si->doodads= (DoodadInfo *)AddCommonInfo(&si->doodads->defs,
- (CommonInfo *)di);
- si->nDoodads++;
- }
- else {
- info->doodads= (DoodadInfo *)AddCommonInfo(&info->doodads->defs,
- (CommonInfo *)di);
- info->nDoodads++;
- }
+NextDoodad(SectionInfo * si, GeometryInfo * info)
+{
+ DoodadInfo *di;
+
+ di = uTypedCalloc(1, DoodadInfo);
+ if (di)
+ {
+ if (si)
+ {
+ si->doodads = (DoodadInfo *) AddCommonInfo(&si->doodads->defs,
+ (CommonInfo *) di);
+ si->nDoodads++;
+ }
+ else
+ {
+ info->doodads =
+ (DoodadInfo *) AddCommonInfo(&info->doodads->defs,
+ (CommonInfo *) di);
+ info->nDoodads++;
+ }
}
return di;
}
static Bool
-AddDoodad(SectionInfo *si,GeometryInfo *info,DoodadInfo *new)
-{
-DoodadInfo * old;
-
- old= FindDoodadByName((si?si->doodads:info->doodads),new->name);
- if (old!=NULL) {
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple doodads named \"%s\"\n",
- XkbAtomText(info->dpy,old->name,XkbMessage));
- ACTION("Using last definition\n");
- }
- ReplaceDoodad(old,new);
- old->section= si;
- return True;
- }
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple doodads named \"%s\"\n",
- XkbAtomText(info->dpy,old->name,XkbMessage));
- ACTION("Using first definition\n");
- }
- return True;
- }
- old= new;
- if ((new= NextDoodad(si,info))==NULL)
- return False;
- ReplaceDoodad(new,old);
- new->section= si;
- new->defs.next= NULL;
+AddDoodad(SectionInfo * si, GeometryInfo * info, DoodadInfo * new)
+{
+ DoodadInfo *old;
+
+ old = FindDoodadByName((si ? si->doodads : info->doodads), new->name);
+ if (old != NULL)
+ {
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Multiple doodads named \"%s\"\n",
+ XkbAtomText(info->dpy, old->name, XkbMessage));
+ ACTION("Using last definition\n");
+ }
+ ReplaceDoodad(old, new);
+ old->section = si;
+ return True;
+ }
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple doodads named \"%s\"\n",
+ XkbAtomText(info->dpy, old->name, XkbMessage));
+ ACTION("Using first definition\n");
+ }
+ return True;
+ }
+ old = new;
+ if ((new = NextDoodad(si, info)) == NULL)
+ return False;
+ ReplaceDoodad(new, old);
+ new->section = si;
+ new->defs.next = NULL;
return True;
}
static DoodadInfo *
-FindDfltDoodadByTypeName(char *name,SectionInfo *si,GeometryInfo *info)
-{
-DoodadInfo * dflt;
-unsigned type;
-
- if (uStrCaseCmp(name,"outline")==0) type= XkbOutlineDoodad;
- else if (uStrCaseCmp(name,"solid")==0) type= XkbSolidDoodad;
- else if (uStrCaseCmp(name,"text")==0) type= XkbTextDoodad;
- else if (uStrCaseCmp(name,"indicator")==0) type= XkbIndicatorDoodad;
- else if (uStrCaseCmp(name,"logo")==0) type= XkbLogoDoodad;
- else return NULL;
- if ((si)&&(si->dfltDoodads))
- dflt= FindDoodadByType(si->dfltDoodads,type);
- else dflt= NULL;
- if ((!dflt)&&(info->dfltDoodads))
- dflt= FindDoodadByType(info->dfltDoodads,type);
- if (dflt==NULL) {
- dflt= NextDfltDoodad(si,info);
- if (dflt!=NULL) {
- dflt->name= None;
- dflt->type= type;
- }
+FindDfltDoodadByTypeName(char *name, SectionInfo * si, GeometryInfo * info)
+{
+ DoodadInfo *dflt;
+ unsigned type;
+
+ if (uStrCaseCmp(name, "outline") == 0)
+ type = XkbOutlineDoodad;
+ else if (uStrCaseCmp(name, "solid") == 0)
+ type = XkbSolidDoodad;
+ else if (uStrCaseCmp(name, "text") == 0)
+ type = XkbTextDoodad;
+ else if (uStrCaseCmp(name, "indicator") == 0)
+ type = XkbIndicatorDoodad;
+ else if (uStrCaseCmp(name, "logo") == 0)
+ type = XkbLogoDoodad;
+ else
+ return NULL;
+ if ((si) && (si->dfltDoodads))
+ dflt = FindDoodadByType(si->dfltDoodads, type);
+ else
+ dflt = NULL;
+ if ((!dflt) && (info->dfltDoodads))
+ dflt = FindDoodadByType(info->dfltDoodads, type);
+ if (dflt == NULL)
+ {
+ dflt = NextDfltDoodad(si, info);
+ if (dflt != NULL)
+ {
+ dflt->name = None;
+ dflt->type = type;
+ }
}
return dflt;
}
@@ -921,55 +1006,66 @@ unsigned type;
/***====================================================================***/
static Bool
-AddOverlay(SectionInfo *si,GeometryInfo *info,OverlayInfo *new)
-{
-OverlayInfo * old;
-
- for (old=si->overlays;old!=NULL;old=(OverlayInfo *)old->defs.next) {
- if (old->name==new->name)
- break;
- }
- if (old!=NULL) {
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN2("Multiple overlays named \"%s\" for section \"%s\"\n",
- XkbAtomText(info->dpy,old->name,XkbMessage),
- XkbAtomText(info->dpy,si->name,XkbMessage));
- ACTION("Using last definition\n");
- }
- ClearOverlayInfo(old);
- old->nKeys= new->nKeys;
- old->keys= new->keys;
- new->nKeys= 0;
- new->keys= NULL;
- return True;
- }
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN2("Multiple doodads named \"%s\" in section \"%s\"\n",
- XkbAtomText(info->dpy,old->name,XkbMessage),
- XkbAtomText(info->dpy,si->name,XkbMessage));
- ACTION("Using first definition\n");
- }
- return True;
- }
- old= new;
- new= uTypedCalloc(1,OverlayInfo);
- if (!new) {
- if (warningLevel>0) {
- WSGO("Couldn't allocate a new OverlayInfo\n");
- ACTION2("Overlay \"%s\" in section \"%s\" will be incomplete\n",
- XkbAtomText(info->dpy,old->name,XkbMessage),
- XkbAtomText(info->dpy,si->name,XkbMessage));
- }
- return False;
- }
- *new= *old;
- old->nKeys= 0;
- old->keys= NULL;
- si->overlays= (OverlayInfo *)AddCommonInfo(&si->overlays->defs,
- (CommonInfo *)new);
+AddOverlay(SectionInfo * si, GeometryInfo * info, OverlayInfo * new)
+{
+ OverlayInfo *old;
+
+ for (old = si->overlays; old != NULL;
+ old = (OverlayInfo *) old->defs.next)
+ {
+ if (old->name == new->name)
+ break;
+ }
+ if (old != NULL)
+ {
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN2
+ ("Multiple overlays named \"%s\" for section \"%s\"\n",
+ XkbAtomText(info->dpy, old->name, XkbMessage),
+ XkbAtomText(info->dpy, si->name, XkbMessage));
+ ACTION("Using last definition\n");
+ }
+ ClearOverlayInfo(old);
+ old->nKeys = new->nKeys;
+ old->keys = new->keys;
+ new->nKeys = 0;
+ new->keys = NULL;
+ return True;
+ }
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN2("Multiple doodads named \"%s\" in section \"%s\"\n",
+ XkbAtomText(info->dpy, old->name, XkbMessage),
+ XkbAtomText(info->dpy, si->name, XkbMessage));
+ ACTION("Using first definition\n");
+ }
+ return True;
+ }
+ old = new;
+ new = uTypedCalloc(1, OverlayInfo);
+ if (!new)
+ {
+ if (warningLevel > 0)
+ {
+ WSGO("Couldn't allocate a new OverlayInfo\n");
+ ACTION2
+ ("Overlay \"%s\" in section \"%s\" will be incomplete\n",
+ XkbAtomText(info->dpy, old->name, XkbMessage),
+ XkbAtomText(info->dpy, si->name, XkbMessage));
+ }
+ return False;
+ }
+ *new = *old;
+ old->nKeys = 0;
+ old->keys = NULL;
+ si->overlays = (OverlayInfo *) AddCommonInfo(&si->overlays->defs,
+ (CommonInfo *) new);
si->nOverlays++;
return True;
}
@@ -977,79 +1073,91 @@ OverlayInfo * old;
/***====================================================================***/
static SectionInfo *
-NextSection(GeometryInfo *info)
-{
-SectionInfo * si;
-
- si= uTypedAlloc(SectionInfo);
- if (si) {
- *si= info->dfltSection;
- si->defs.defined&= ~_GS_Default;
- si->defs.next= NULL;
- si->nRows= 0;
- si->rows= NULL;
- info->sections= (SectionInfo *)AddCommonInfo(&info->sections->defs,
- (CommonInfo *)si);
- info->nSections++;
+NextSection(GeometryInfo * info)
+{
+ SectionInfo *si;
+
+ si = uTypedAlloc(SectionInfo);
+ if (si)
+ {
+ *si = info->dfltSection;
+ si->defs.defined &= ~_GS_Default;
+ si->defs.next = NULL;
+ si->nRows = 0;
+ si->rows = NULL;
+ info->sections =
+ (SectionInfo *) AddCommonInfo(&info->sections->defs,
+ (CommonInfo *) si);
+ info->nSections++;
}
return si;
}
static SectionInfo *
-FindMatchingSection(GeometryInfo *info,SectionInfo *new)
+FindMatchingSection(GeometryInfo * info, SectionInfo * new)
{
-SectionInfo * old;
+ SectionInfo *old;
- for (old=info->sections;old!=NULL;old=(SectionInfo *)old->defs.next) {
- if (new->name==old->name)
- return old;
+ for (old = info->sections; old != NULL;
+ old = (SectionInfo *) old->defs.next)
+ {
+ if (new->name == old->name)
+ return old;
}
return NULL;
}
static Bool
-AddSection(GeometryInfo *info,SectionInfo *new)
+AddSection(GeometryInfo * info, SectionInfo * new)
{
-SectionInfo * old;
+ SectionInfo *old;
- old= FindMatchingSection(info,new);
- if (old!=NULL) {
+ old = FindMatchingSection(info, new);
+ if (old != NULL)
+ {
#ifdef NOTDEF
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- SectionInfo *next= (SectionInfo *)old->defs.next;
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Duplicate shape name \"%s\"\n",shText(info->dpy,old));
- ACTION("Using last definition\n");
- }
- *old= *new;
- old->defs.next= &next->defs;
- return True;
- }
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple shapes named \"%s\"\n",shText(info->dpy,old));
- ACTION("Using first definition\n");
- }
- return True;
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ SectionInfo *next = (SectionInfo *) old->defs.next;
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Duplicate shape name \"%s\"\n",
+ shText(info->dpy, old));
+ ACTION("Using last definition\n");
+ }
+ *old = *new;
+ old->defs.next = &next->defs;
+ return True;
+ }
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple shapes named \"%s\"\n", shText(info->dpy, old));
+ ACTION("Using first definition\n");
+ }
+ return True;
#else
- WARN("Don't know how to merge sections yet\n");
+ WARN("Don't know how to merge sections yet\n");
#endif
}
- old= new;
- if ((new= NextSection(info))==NULL)
- return False;
- *new= *old;
- new->defs.next= NULL;
- old->nRows= old->nDoodads= old->nOverlays= 0;
- old->rows= NULL;
- old->doodads= NULL;
- old->overlays= NULL;
- if (new->doodads) {
- DoodadInfo *di;
- for (di=new->doodads;di;di=(DoodadInfo *)di->defs.next) {
- di->section= new;
- }
+ old = new;
+ if ((new = NextSection(info)) == NULL)
+ return False;
+ *new = *old;
+ new->defs.next = NULL;
+ old->nRows = old->nDoodads = old->nOverlays = 0;
+ old->rows = NULL;
+ old->doodads = NULL;
+ old->overlays = NULL;
+ if (new->doodads)
+ {
+ DoodadInfo *di;
+ for (di = new->doodads; di; di = (DoodadInfo *) di->defs.next)
+ {
+ di->section = new;
+ }
}
return True;
}
@@ -1057,302 +1165,344 @@ SectionInfo * old;
/***====================================================================***/
static RowInfo *
-NextRow(SectionInfo *si)
-{
-RowInfo * row;
-
- row= uTypedAlloc(RowInfo);
- if (row) {
- *row= si->dfltRow;
- row->defs.defined&= ~_GR_Default;
- row->defs.next= NULL;
- row->nKeys= 0;
- row->keys= NULL;
- si->rows= (RowInfo *)AddCommonInfo(&si->rows->defs,(CommonInfo *)row);
- row->index= si->nRows++;
+NextRow(SectionInfo * si)
+{
+ RowInfo *row;
+
+ row = uTypedAlloc(RowInfo);
+ if (row)
+ {
+ *row = si->dfltRow;
+ row->defs.defined &= ~_GR_Default;
+ row->defs.next = NULL;
+ row->nKeys = 0;
+ row->keys = NULL;
+ si->rows =
+ (RowInfo *) AddCommonInfo(&si->rows->defs, (CommonInfo *) row);
+ row->index = si->nRows++;
}
return row;
}
static Bool
-AddRow(SectionInfo *si,RowInfo *new)
+AddRow(SectionInfo * si, RowInfo * new)
{
-RowInfo * old;
+ RowInfo *old;
- old= new;
- if ((new= NextRow(si))==NULL)
- return False;
- *new= *old;
- new->defs.next= NULL;
- old->nKeys= 0;
- old->keys= NULL;
+ old = new;
+ if ((new = NextRow(si)) == NULL)
+ return False;
+ *new = *old;
+ new->defs.next = NULL;
+ old->nKeys = 0;
+ old->keys = NULL;
return True;
}
/***====================================================================***/
static KeyInfo *
-NextKey(RowInfo *row)
+NextKey(RowInfo * row)
{
-KeyInfo * key;
+ KeyInfo *key;
- key= uTypedAlloc(KeyInfo);
- if (key) {
- *key= row->dfltKey;
- key->defs.defined&= ~_GK_Default;
- key->defs.next= NULL;
- key->index= row->nKeys++;
+ key = uTypedAlloc(KeyInfo);
+ if (key)
+ {
+ *key = row->dfltKey;
+ key->defs.defined &= ~_GK_Default;
+ key->defs.next = NULL;
+ key->index = row->nKeys++;
}
return key;
}
static Bool
-AddKey(RowInfo *row,KeyInfo *new)
+AddKey(RowInfo * row, KeyInfo * new)
{
-KeyInfo * old;
+ KeyInfo *old;
- old= new;
- if ((new= NextKey(row))==NULL)
- return False;
- *new= *old;
- new->defs.next= NULL;
- row->keys= (KeyInfo *)AddCommonInfo(&row->keys->defs,(CommonInfo *)new);
+ old = new;
+ if ((new = NextKey(row)) == NULL)
+ return False;
+ *new = *old;
+ new->defs.next = NULL;
+ row->keys =
+ (KeyInfo *) AddCommonInfo(&row->keys->defs, (CommonInfo *) new);
return True;
}
/***====================================================================***/
static void
-MergeIncludedGeometry(GeometryInfo *into,GeometryInfo *from,unsigned merge)
-{
-Bool clobber;
-
- if (from->errorCount>0) {
- into->errorCount+= from->errorCount;
- return;
- }
- clobber= (merge==MergeOverride)||(merge==MergeReplace);
- if (into->name==NULL) {
- into->name= from->name;
- from->name= NULL;
- }
- if ((into->widthMM==0)||((from->widthMM!=0)&&clobber))
- into->widthMM= from->widthMM;
- if ((into->heightMM==0)||((from->heightMM!=0)&&clobber))
- into->heightMM= from->heightMM;
- if ((into->font==None)||((from->font!=None)&&clobber))
- into->font= from->font;
- if ((into->fontSlant==None)||((from->fontSlant!=None)&&clobber))
- into->fontSlant= from->fontSlant;
- if ((into->fontWeight==None)||((from->fontWeight!=None)&&clobber))
- into->fontWeight= from->fontWeight;
- if ((into->fontSetWidth==None)||((from->fontSetWidth!=None)&&clobber))
- into->fontSetWidth= from->fontSetWidth;
- if ((into->fontVariant==None)||((from->fontVariant!=None)&&clobber))
- into->fontVariant= from->fontVariant;
- if ((into->fontSize==0)||((from->fontSize!=0)&&clobber))
- into->fontSize= from->fontSize;
- if ((into->fontEncoding==None)||((from->fontEncoding!=None)&&clobber))
- into->fontEncoding= from->fontEncoding;
- if ((into->fontSpec==None)||((from->fontSpec!=None)&&clobber))
- into->fontSpec= from->fontSpec;
- if ((into->baseColor==None)||((from->baseColor!=None)&&clobber))
- into->baseColor= from->baseColor;
- if ((into->labelColor==None)||((from->labelColor!=None)&&clobber))
- into->labelColor= from->labelColor;
- into->nextPriority= from->nextPriority;
- if (from->props!=NULL) {
- PropertyInfo *pi;
- for (pi=from->props;pi;pi=(PropertyInfo *)pi->defs.next) {
- if (!AddProperty(into,pi))
- into->errorCount++;
- }
- }
- if (from->shapes!=NULL) {
- ShapeInfo * si;
-
- for (si=from->shapes;si;si=(ShapeInfo *)si->defs.next) {
- if (!AddShape(into,si))
- into->errorCount++;
- }
- }
- if (from->sections!=NULL) {
- SectionInfo * si;
-
- for (si=from->sections;si;si=(SectionInfo *)si->defs.next) {
- if (!AddSection(into,si))
- into->errorCount++;
- }
- }
- if (from->doodads!=NULL) {
- DoodadInfo * di;
-
- for (di=from->doodads;di;di=(DoodadInfo *)di->defs.next) {
- if (!AddDoodad(NULL,into,di))
- into->errorCount++;
- }
- }
- if (!MergeAliases(&into->aliases,&from->aliases,merge))
- into->errorCount++;
+MergeIncludedGeometry(GeometryInfo * into, GeometryInfo * from,
+ unsigned merge)
+{
+ Bool clobber;
+
+ if (from->errorCount > 0)
+ {
+ into->errorCount += from->errorCount;
+ return;
+ }
+ clobber = (merge == MergeOverride) || (merge == MergeReplace);
+ if (into->name == NULL)
+ {
+ into->name = from->name;
+ from->name = NULL;
+ }
+ if ((into->widthMM == 0) || ((from->widthMM != 0) && clobber))
+ into->widthMM = from->widthMM;
+ if ((into->heightMM == 0) || ((from->heightMM != 0) && clobber))
+ into->heightMM = from->heightMM;
+ if ((into->font == None) || ((from->font != None) && clobber))
+ into->font = from->font;
+ if ((into->fontSlant == None) || ((from->fontSlant != None) && clobber))
+ into->fontSlant = from->fontSlant;
+ if ((into->fontWeight == None) || ((from->fontWeight != None) && clobber))
+ into->fontWeight = from->fontWeight;
+ if ((into->fontSetWidth == None)
+ || ((from->fontSetWidth != None) && clobber))
+ into->fontSetWidth = from->fontSetWidth;
+ if ((into->fontVariant == None)
+ || ((from->fontVariant != None) && clobber))
+ into->fontVariant = from->fontVariant;
+ if ((into->fontSize == 0) || ((from->fontSize != 0) && clobber))
+ into->fontSize = from->fontSize;
+ if ((into->fontEncoding == None)
+ || ((from->fontEncoding != None) && clobber))
+ into->fontEncoding = from->fontEncoding;
+ if ((into->fontSpec == None) || ((from->fontSpec != None) && clobber))
+ into->fontSpec = from->fontSpec;
+ if ((into->baseColor == None) || ((from->baseColor != None) && clobber))
+ into->baseColor = from->baseColor;
+ if ((into->labelColor == None) || ((from->labelColor != None) && clobber))
+ into->labelColor = from->labelColor;
+ into->nextPriority = from->nextPriority;
+ if (from->props != NULL)
+ {
+ PropertyInfo *pi;
+ for (pi = from->props; pi; pi = (PropertyInfo *) pi->defs.next)
+ {
+ if (!AddProperty(into, pi))
+ into->errorCount++;
+ }
+ }
+ if (from->shapes != NULL)
+ {
+ ShapeInfo *si;
+
+ for (si = from->shapes; si; si = (ShapeInfo *) si->defs.next)
+ {
+ if (!AddShape(into, si))
+ into->errorCount++;
+ }
+ }
+ if (from->sections != NULL)
+ {
+ SectionInfo *si;
+
+ for (si = from->sections; si; si = (SectionInfo *) si->defs.next)
+ {
+ if (!AddSection(into, si))
+ into->errorCount++;
+ }
+ }
+ if (from->doodads != NULL)
+ {
+ DoodadInfo *di;
+
+ for (di = from->doodads; di; di = (DoodadInfo *) di->defs.next)
+ {
+ if (!AddDoodad(NULL, into, di))
+ into->errorCount++;
+ }
+ }
+ if (!MergeAliases(&into->aliases, &from->aliases, merge))
+ into->errorCount++;
return;
}
-typedef void (*FileHandler)(
- XkbFile * /* file */,
- XkbDescPtr /* xkb */,
- unsigned /* merge */,
- GeometryInfo * /* info */
-);
+typedef void (*FileHandler) (XkbFile * /* file */ ,
+ XkbDescPtr /* xkb */ ,
+ unsigned /* merge */ ,
+ GeometryInfo * /* info */
+ );
static Bool
-HandleIncludeGeometry(IncludeStmt *stmt,XkbDescPtr xkb,GeometryInfo *info,
- FileHandler hndlr)
-{
-unsigned newMerge;
-XkbFile * rtrn;
-GeometryInfo included;
-Bool haveSelf;
-
- haveSelf= False;
- if ((stmt->file==NULL)&&(stmt->map==NULL)) {
- haveSelf= True;
- included= *info;
- bzero(info,sizeof(GeometryInfo));
- }
- else if (ProcessIncludeFile(stmt,XkmGeometryIndex,&rtrn,&newMerge)) {
- InitGeometryInfo(&included,rtrn->id,newMerge);
- included.nextPriority= info->nextPriority;
- included.dfltCornerRadius= info->dfltCornerRadius;
- DupSectionInfo(&included.dfltSection,&info->dfltSection,info);
- (*hndlr)(rtrn,xkb,MergeOverride,&included);
- if (stmt->stmt!=NULL) {
- if (included.name!=NULL)
- uFree(included.name);
- included.name= stmt->stmt;
- stmt->stmt= NULL;
- }
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- if ((stmt->next!=NULL)&&(included.errorCount<1)) {
- IncludeStmt * next;
- unsigned op;
- GeometryInfo next_incl;
-
- for (next=stmt->next;next!=NULL;next=next->next) {
- if ((next->file==NULL)&&(next->map==NULL)) {
- haveSelf= True;
- MergeIncludedGeometry(&included,info,next->merge);
- ClearGeometryInfo(info);
- }
- else if (ProcessIncludeFile(next,XkmGeometryIndex,&rtrn,&op)) {
- InitGeometryInfo(&next_incl,rtrn->id,op);
- next_incl.nextPriority= included.nextPriority;
- next_incl.dfltCornerRadius= included.dfltCornerRadius;
- DupSectionInfo(&next_incl.dfltSection,&included.dfltSection,
- &included);
- (*hndlr)(rtrn,xkb,MergeOverride,&next_incl);
- MergeIncludedGeometry(&included,&next_incl,op);
- ClearGeometryInfo(&next_incl);
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- }
+HandleIncludeGeometry(IncludeStmt * stmt, XkbDescPtr xkb, GeometryInfo * info,
+ FileHandler hndlr)
+{
+ unsigned newMerge;
+ XkbFile *rtrn;
+ GeometryInfo included;
+ Bool haveSelf;
+
+ haveSelf = False;
+ if ((stmt->file == NULL) && (stmt->map == NULL))
+ {
+ haveSelf = True;
+ included = *info;
+ bzero(info, sizeof(GeometryInfo));
+ }
+ else if (ProcessIncludeFile(stmt, XkmGeometryIndex, &rtrn, &newMerge))
+ {
+ InitGeometryInfo(&included, rtrn->id, newMerge);
+ included.nextPriority = info->nextPriority;
+ included.dfltCornerRadius = info->dfltCornerRadius;
+ DupSectionInfo(&included.dfltSection, &info->dfltSection, info);
+ (*hndlr) (rtrn, xkb, MergeOverride, &included);
+ if (stmt->stmt != NULL)
+ {
+ if (included.name != NULL)
+ uFree(included.name);
+ included.name = stmt->stmt;
+ stmt->stmt = NULL;
+ }
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ if ((stmt->next != NULL) && (included.errorCount < 1))
+ {
+ IncludeStmt *next;
+ unsigned op;
+ GeometryInfo next_incl;
+
+ for (next = stmt->next; next != NULL; next = next->next)
+ {
+ if ((next->file == NULL) && (next->map == NULL))
+ {
+ haveSelf = True;
+ MergeIncludedGeometry(&included, info, next->merge);
+ ClearGeometryInfo(info);
+ }
+ else if (ProcessIncludeFile(next, XkmGeometryIndex, &rtrn, &op))
+ {
+ InitGeometryInfo(&next_incl, rtrn->id, op);
+ next_incl.nextPriority = included.nextPriority;
+ next_incl.dfltCornerRadius = included.dfltCornerRadius;
+ DupSectionInfo(&next_incl.dfltSection,
+ &included.dfltSection, &included);
+ (*hndlr) (rtrn, xkb, MergeOverride, &next_incl);
+ MergeIncludedGeometry(&included, &next_incl, op);
+ ClearGeometryInfo(&next_incl);
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ }
}
if (haveSelf)
- *info= included;
- else {
- MergeIncludedGeometry(info,&included,newMerge);
- ClearGeometryInfo(&included);
+ *info = included;
+ else
+ {
+ MergeIncludedGeometry(info, &included, newMerge);
+ ClearGeometryInfo(&included);
}
- return (info->errorCount==0);
+ return (info->errorCount == 0);
}
static int
-SetShapeField( ShapeInfo * si,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- GeometryInfo * info)
-{
-ExprResult tmp;
-
- if ((uStrCaseCmp(field,"radius")==0)||(uStrCaseCmp(field,"corner")==0)||
- (uStrCaseCmp(field,"cornerradius")==0)) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("key shape",field,shText(info->dpy,si));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("key shape",field,
- shText(info->dpy,si),"number");
- }
- if (si)
- si->dfltCornerRadius= tmp.ival;
- else info->dfltCornerRadius= tmp.ival;
- return True;
+SetShapeField(ShapeInfo * si,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, GeometryInfo * info)
+{
+ ExprResult tmp;
+
+ if ((uStrCaseCmp(field, "radius") == 0)
+ || (uStrCaseCmp(field, "corner") == 0)
+ || (uStrCaseCmp(field, "cornerradius") == 0))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("key shape", field, shText(info->dpy, si));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("key shape", field,
+ shText(info->dpy, si), "number");
+ }
+ if (si)
+ si->dfltCornerRadius = tmp.ival;
+ else
+ info->dfltCornerRadius = tmp.ival;
+ return True;
}
info->errorCount++;
- return ReportBadField("key shape",field,shText(info->dpy,si));
+ return ReportBadField("key shape", field, shText(info->dpy, si));
}
static int
-SetShapeDoodadField( DoodadInfo * di,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SectionInfo * si,
- GeometryInfo * info)
-{
-ExprResult tmp;
-const char *typeName;
-
- typeName= (di->type==XkbSolidDoodad?"solid doodad":"outline doodad");
- if ((!uStrCaseCmp(field,"corner"))||(!uStrCaseCmp(field,"cornerradius"))) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Corner;
- di->corner= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"angle")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Angle;
- di->angle= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"shape")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"string");
- }
- di->shape= XkbInternAtom(info->dpy,tmp.str,False);
- di->defs.defined|= _GD_Shape;
- return True;
- }
- return ReportBadField(typeName,field,ddText(info->dpy,di));
+SetShapeDoodadField(DoodadInfo * di,
+ char *field,
+ ExprDef * arrayNdx,
+ ExprDef * value, SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult tmp;
+ const char *typeName;
+
+ typeName =
+ (di->type == XkbSolidDoodad ? "solid doodad" : "outline doodad");
+ if ((!uStrCaseCmp(field, "corner"))
+ || (!uStrCaseCmp(field, "cornerradius")))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Corner;
+ di->corner = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "angle") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Angle;
+ di->angle = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "shape") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "string");
+ }
+ di->shape = XkbInternAtom(info->dpy, tmp.str, False);
+ di->defs.defined |= _GD_Shape;
+ return True;
+ }
+ return ReportBadField(typeName, field, ddText(info->dpy, di));
}
#define FIELD_STRING 0
@@ -1360,873 +1510,1038 @@ const char *typeName;
#define FIELD_USHORT 2
static int
-SetTextDoodadField( DoodadInfo * di,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SectionInfo * si,
- GeometryInfo * info)
-{
-ExprResult tmp;
-unsigned def;
-unsigned type;
-char * typeName= "text doodad";
-union {
- Atom * str;
- short * ival;
- unsigned short * uval;
-} pField;
-
- if (uStrCaseCmp(field,"angle")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Angle;
- di->angle= tmp.ival;
- return True;
- }
- if (uStrCaseCmp(field,"width")==0) {
- type= FIELD_USHORT;
- pField.uval= &di->width;
- def= _GD_Width;
- }
- else if (uStrCaseCmp(field,"height")==0) {
- type= FIELD_USHORT;
- pField.uval= &di->height;
- def= _GD_Height;
- }
- else if (uStrCaseCmp(field,"text")==0) {
- type= FIELD_STRING;
- pField.str= &di->text;
- def= _GD_Text;
- }
- else if (uStrCaseCmp(field,"font")==0) {
- type= FIELD_STRING;
- pField.str= &di->font;
- def= _GD_Font;
- }
- else if ((uStrCaseCmp(field,"fontslant")==0)||
- (uStrCaseCmp(field,"slant")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontSlant;
- def= _GD_FontSlant;
- }
- else if ((uStrCaseCmp(field,"fontweight")==0)||
- (uStrCaseCmp(field,"weight")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontWeight;
- def= _GD_FontWeight;
- }
- else if ((uStrCaseCmp(field,"fontwidth")==0)||
- (uStrCaseCmp(field,"setwidth")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontSetWidth;
- def= _GD_FontSetWidth;
- }
- else if ((uStrCaseCmp(field,"fontvariant")==0)||
- (uStrCaseCmp(field,"variant")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontVariant;
- def= _GD_FontVariant;
- }
- else if ((uStrCaseCmp(field,"fontencoding")==0)||
- (uStrCaseCmp(field,"encoding")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontEncoding;
- def= _GD_FontEncoding;
- }
- else if ((uStrCaseCmp(field,"xfont")==0)||
- (uStrCaseCmp(field,"xfontname")==0)) {
- type= FIELD_STRING;
- pField.str= &di->fontSpec;
- def= _GD_FontSpec;
- }
- else if (uStrCaseCmp(field,"fontsize")==0) {
- type= FIELD_USHORT;
- pField.uval= &di->fontSize;
- def= _GD_FontSize;
- }
- else {
- return ReportBadField(typeName,field,ddText(info->dpy,di));
- }
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (type==FIELD_STRING) {
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),
- "string");
- }
- di->defs.defined|= def;
- *pField.str= XkbInternAtom(NULL,tmp.str,False);
- }
- else {
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- if ((type==FIELD_USHORT)&&(tmp.ival<0)) {
- info->errorCount++;
- return
- ReportBadType(typeName,field,ddText(info->dpy,di),"unsigned");
- }
- di->defs.defined|= def;
- if (type==FIELD_USHORT)
- *pField.uval= tmp.uval;
- else *pField.ival= tmp.ival;
+SetTextDoodadField(DoodadInfo * di,
+ char *field,
+ ExprDef * arrayNdx,
+ ExprDef * value, SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult tmp;
+ unsigned def;
+ unsigned type;
+ char *typeName = "text doodad";
+ union
+ {
+ Atom *str;
+ short *ival;
+ unsigned short *uval;
+ } pField;
+
+ if (uStrCaseCmp(field, "angle") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Angle;
+ di->angle = tmp.ival;
+ return True;
+ }
+ if (uStrCaseCmp(field, "width") == 0)
+ {
+ type = FIELD_USHORT;
+ pField.uval = &di->width;
+ def = _GD_Width;
+ }
+ else if (uStrCaseCmp(field, "height") == 0)
+ {
+ type = FIELD_USHORT;
+ pField.uval = &di->height;
+ def = _GD_Height;
+ }
+ else if (uStrCaseCmp(field, "text") == 0)
+ {
+ type = FIELD_STRING;
+ pField.str = &di->text;
+ def = _GD_Text;
+ }
+ else if (uStrCaseCmp(field, "font") == 0)
+ {
+ type = FIELD_STRING;
+ pField.str = &di->font;
+ def = _GD_Font;
+ }
+ else if ((uStrCaseCmp(field, "fontslant") == 0) ||
+ (uStrCaseCmp(field, "slant") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontSlant;
+ def = _GD_FontSlant;
+ }
+ else if ((uStrCaseCmp(field, "fontweight") == 0) ||
+ (uStrCaseCmp(field, "weight") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontWeight;
+ def = _GD_FontWeight;
+ }
+ else if ((uStrCaseCmp(field, "fontwidth") == 0) ||
+ (uStrCaseCmp(field, "setwidth") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontSetWidth;
+ def = _GD_FontSetWidth;
+ }
+ else if ((uStrCaseCmp(field, "fontvariant") == 0) ||
+ (uStrCaseCmp(field, "variant") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontVariant;
+ def = _GD_FontVariant;
+ }
+ else if ((uStrCaseCmp(field, "fontencoding") == 0) ||
+ (uStrCaseCmp(field, "encoding") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontEncoding;
+ def = _GD_FontEncoding;
+ }
+ else if ((uStrCaseCmp(field, "xfont") == 0) ||
+ (uStrCaseCmp(field, "xfontname") == 0))
+ {
+ type = FIELD_STRING;
+ pField.str = &di->fontSpec;
+ def = _GD_FontSpec;
+ }
+ else if (uStrCaseCmp(field, "fontsize") == 0)
+ {
+ type = FIELD_USHORT;
+ pField.uval = &di->fontSize;
+ def = _GD_FontSize;
+ }
+ else
+ {
+ return ReportBadField(typeName, field, ddText(info->dpy, di));
+ }
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (type == FIELD_STRING)
+ {
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "string");
+ }
+ di->defs.defined |= def;
+ *pField.str = XkbInternAtom(NULL, tmp.str, False);
+ }
+ else
+ {
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ if ((type == FIELD_USHORT) && (tmp.ival < 0))
+ {
+ info->errorCount++;
+ return
+ ReportBadType(typeName, field, ddText(info->dpy, di),
+ "unsigned");
+ }
+ di->defs.defined |= def;
+ if (type == FIELD_USHORT)
+ *pField.uval = tmp.uval;
+ else
+ *pField.ival = tmp.ival;
}
return True;
}
static int
-SetIndicatorDoodadField( DoodadInfo * di,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SectionInfo * si,
- GeometryInfo * info)
-{
-ExprResult tmp;
-
- if ((uStrCaseCmp(field,"oncolor")==0)||(uStrCaseCmp(field,"offcolor")==0)
- ||(uStrCaseCmp(field,"shape")==0)) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("indicator doodad",field,
- ddText(info->dpy,di));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("indicator doodad",field,ddText(info->dpy,di),
- "string");
- }
- if (uStrCaseCmp(field,"oncolor")==0) {
- di->defs.defined|= _GD_Color;
- di->color= XkbInternAtom(NULL,tmp.str,False);
- }
- else if (uStrCaseCmp(field,"offcolor")==0) {
- di->defs.defined|= _GD_OffColor;
- di->offColor= XkbInternAtom(NULL,tmp.str,False);
- }
- else if (uStrCaseCmp(field,"shape")==0) {
- di->defs.defined|= _GD_Shape;
- di->shape= XkbInternAtom(info->dpy,tmp.str,False);
- }
- return True;
- }
- return ReportBadField("indicator doodad",field,ddText(info->dpy,di));
+SetIndicatorDoodadField(DoodadInfo * di,
+ char *field,
+ ExprDef * arrayNdx,
+ ExprDef * value,
+ SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult tmp;
+
+ if ((uStrCaseCmp(field, "oncolor") == 0)
+ || (uStrCaseCmp(field, "offcolor") == 0)
+ || (uStrCaseCmp(field, "shape") == 0))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("indicator doodad", field,
+ ddText(info->dpy, di));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("indicator doodad", field,
+ ddText(info->dpy, di), "string");
+ }
+ if (uStrCaseCmp(field, "oncolor") == 0)
+ {
+ di->defs.defined |= _GD_Color;
+ di->color = XkbInternAtom(NULL, tmp.str, False);
+ }
+ else if (uStrCaseCmp(field, "offcolor") == 0)
+ {
+ di->defs.defined |= _GD_OffColor;
+ di->offColor = XkbInternAtom(NULL, tmp.str, False);
+ }
+ else if (uStrCaseCmp(field, "shape") == 0)
+ {
+ di->defs.defined |= _GD_Shape;
+ di->shape = XkbInternAtom(info->dpy, tmp.str, False);
+ }
+ return True;
+ }
+ return ReportBadField("indicator doodad", field, ddText(info->dpy, di));
}
static int
-SetLogoDoodadField( DoodadInfo * di,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SectionInfo * si,
- GeometryInfo * info)
-{
-ExprResult tmp;
-char * typeName= "logo doodad";
-
- if ((!uStrCaseCmp(field,"corner"))||(!uStrCaseCmp(field,"cornerradius"))) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Corner;
- di->corner= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"angle")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Angle;
- di->angle= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"shape")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"string");
- }
- di->shape= XkbInternAtom(info->dpy,tmp.str,False);
- di->defs.defined|= _GD_Shape;
- return True;
- }
- else if ((!uStrCaseCmp(field,"logoname"))||(!uStrCaseCmp(field,"name"))) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray(typeName,field,ddText(info->dpy,di));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType(typeName,field,ddText(info->dpy,di),"string");
- }
- di->logoName= uStringDup(tmp.str);
- return True;
- }
- return ReportBadField(typeName,field,ddText(info->dpy,di));
+SetLogoDoodadField(DoodadInfo * di,
+ char *field,
+ ExprDef * arrayNdx,
+ ExprDef * value, SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult tmp;
+ char *typeName = "logo doodad";
+
+ if ((!uStrCaseCmp(field, "corner"))
+ || (!uStrCaseCmp(field, "cornerradius")))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Corner;
+ di->corner = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "angle") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Angle;
+ di->angle = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "shape") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "string");
+ }
+ di->shape = XkbInternAtom(info->dpy, tmp.str, False);
+ di->defs.defined |= _GD_Shape;
+ return True;
+ }
+ else if ((!uStrCaseCmp(field, "logoname"))
+ || (!uStrCaseCmp(field, "name")))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray(typeName, field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType(typeName, field, ddText(info->dpy, di),
+ "string");
+ }
+ di->logoName = uStringDup(tmp.str);
+ return True;
+ }
+ return ReportBadField(typeName, field, ddText(info->dpy, di));
}
static int
-SetDoodadField( DoodadInfo * di,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SectionInfo * si,
- GeometryInfo * info)
-{
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"priority")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("doodad",field,ddText(info->dpy,di));
- }
- if (!ExprResolveInteger(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("doodad",field,ddText(info->dpy,di),"integer");
- }
- if ((tmp.ival<0)||(tmp.ival>XkbGeomMaxPriority)) {
- info->errorCount++;
- ERROR2("Doodad priority %d out of range (must be 0..%d)\n",
- tmp.ival,XkbGeomMaxPriority);
- ACTION1("Priority for doodad %s not changed",ddText(info->dpy,di));
- return False;
- }
- di->defs.defined|= _GD_Priority;
- di->priority= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"left")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("doodad",field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("doodad",field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Left;
- di->left= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"top")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("doodad",field,ddText(info->dpy,di));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("doodad",field,ddText(info->dpy,di),"number");
- }
- di->defs.defined|= _GD_Top;
- di->top= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field,"color")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("doodad",field,ddText(info->dpy,di));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("doodad",field,ddText(info->dpy,di),"string");
- }
- di->defs.defined|= _GD_Color;
- di->color= XkbInternAtom(NULL,tmp.str,False);
- return True;
- }
- switch (di->type) {
- case XkbOutlineDoodad:
- case XkbSolidDoodad:
- return SetShapeDoodadField(di,field,arrayNdx,value,si,info);
- case XkbTextDoodad:
- return SetTextDoodadField(di,field,arrayNdx,value,si,info);
- case XkbIndicatorDoodad:
- return SetIndicatorDoodadField(di,field,arrayNdx,value,si,info);
- case XkbLogoDoodad:
- return SetLogoDoodadField(di,field,arrayNdx,value,si,info);
- }
- WSGO1("Unknown doodad type %d in SetDoodadField\n",(unsigned int)di->type);
- ACTION2("Definition of %s in %s ignored\n",field,ddText(info->dpy,di));
+SetDoodadField(DoodadInfo * di,
+ char *field,
+ ExprDef * arrayNdx,
+ ExprDef * value, SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "priority") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("doodad", field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveInteger(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("doodad", field, ddText(info->dpy, di),
+ "integer");
+ }
+ if ((tmp.ival < 0) || (tmp.ival > XkbGeomMaxPriority))
+ {
+ info->errorCount++;
+ ERROR2("Doodad priority %d out of range (must be 0..%d)\n",
+ tmp.ival, XkbGeomMaxPriority);
+ ACTION1("Priority for doodad %s not changed",
+ ddText(info->dpy, di));
+ return False;
+ }
+ di->defs.defined |= _GD_Priority;
+ di->priority = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "left") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("doodad", field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("doodad", field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Left;
+ di->left = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "top") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("doodad", field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("doodad", field, ddText(info->dpy, di),
+ "number");
+ }
+ di->defs.defined |= _GD_Top;
+ di->top = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "color") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("doodad", field, ddText(info->dpy, di));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("doodad", field, ddText(info->dpy, di),
+ "string");
+ }
+ di->defs.defined |= _GD_Color;
+ di->color = XkbInternAtom(NULL, tmp.str, False);
+ return True;
+ }
+ switch (di->type)
+ {
+ case XkbOutlineDoodad:
+ case XkbSolidDoodad:
+ return SetShapeDoodadField(di, field, arrayNdx, value, si, info);
+ case XkbTextDoodad:
+ return SetTextDoodadField(di, field, arrayNdx, value, si, info);
+ case XkbIndicatorDoodad:
+ return SetIndicatorDoodadField(di, field, arrayNdx, value, si, info);
+ case XkbLogoDoodad:
+ return SetLogoDoodadField(di, field, arrayNdx, value, si, info);
+ }
+ WSGO1("Unknown doodad type %d in SetDoodadField\n",
+ (unsigned int) di->type);
+ ACTION2("Definition of %s in %s ignored\n", field, ddText(info->dpy, di));
return False;
}
static int
-SetSectionField( SectionInfo * si,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- GeometryInfo * info)
-{
-unsigned short * pField;
-unsigned def;
-ExprResult tmp;
-
- pField= NULL;
- def= 0;
- if (uStrCaseCmp(field,"priority")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard section",field,scText(info->dpy,si));
- }
- if (!ExprResolveInteger(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- ReportBadType("keyboard section",field,scText(info->dpy,si),
- "integer");
- return False;
- }
- if ((tmp.ival<0)||(tmp.ival>XkbGeomMaxPriority)) {
- info->errorCount++;
- ERROR2("Section priority %d out of range (must be 0..%d)\n",
- tmp.ival,XkbGeomMaxPriority);
- ACTION1("Priority for section %s not changed",scText(info->dpy,si));
- return False;
- }
- si->priority= tmp.ival;
- si->defs.defined|= _GS_Priority;
- return True;
- }
- else if (uStrCaseCmp(field,"top")==0) {
- pField= &si->top;
- def= _GS_Top;
- }
- else if (uStrCaseCmp(field,"left")==0) {
- pField= &si->left;
- def= _GS_Left;
- }
- else if (uStrCaseCmp(field,"width")==0) {
- pField= &si->width;
- def= _GS_Width;
- }
- else if (uStrCaseCmp(field,"height")==0) {
- pField= &si->height;
- def= _GS_Height;
- }
- else if (uStrCaseCmp(field,"angle")==0) {
- pField= &si->angle;
- def= _GS_Angle;
- }
- else {
- info->errorCount++;
- return ReportBadField("keyboard section",field,scText(info->dpy,si));
- }
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard section",field,scText(info->dpy,si));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- ReportBadType("keyboard section",field,scText(info->dpy,si),"number");
- return False;
- }
- si->defs.defined|= def;
- *pField= tmp.uval;
+SetSectionField(SectionInfo * si,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, GeometryInfo * info)
+{
+ unsigned short *pField;
+ unsigned def;
+ ExprResult tmp;
+
+ pField = NULL;
+ def = 0;
+ if (uStrCaseCmp(field, "priority") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard section", field,
+ scText(info->dpy, si));
+ }
+ if (!ExprResolveInteger(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ ReportBadType("keyboard section", field,
+ scText(info->dpy, si), "integer");
+ return False;
+ }
+ if ((tmp.ival < 0) || (tmp.ival > XkbGeomMaxPriority))
+ {
+ info->errorCount++;
+ ERROR2("Section priority %d out of range (must be 0..%d)\n",
+ tmp.ival, XkbGeomMaxPriority);
+ ACTION1("Priority for section %s not changed",
+ scText(info->dpy, si));
+ return False;
+ }
+ si->priority = tmp.ival;
+ si->defs.defined |= _GS_Priority;
+ return True;
+ }
+ else if (uStrCaseCmp(field, "top") == 0)
+ {
+ pField = &si->top;
+ def = _GS_Top;
+ }
+ else if (uStrCaseCmp(field, "left") == 0)
+ {
+ pField = &si->left;
+ def = _GS_Left;
+ }
+ else if (uStrCaseCmp(field, "width") == 0)
+ {
+ pField = &si->width;
+ def = _GS_Width;
+ }
+ else if (uStrCaseCmp(field, "height") == 0)
+ {
+ pField = &si->height;
+ def = _GS_Height;
+ }
+ else if (uStrCaseCmp(field, "angle") == 0)
+ {
+ pField = &si->angle;
+ def = _GS_Angle;
+ }
+ else
+ {
+ info->errorCount++;
+ return ReportBadField("keyboard section", field,
+ scText(info->dpy, si));
+ }
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard section", field,
+ scText(info->dpy, si));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ ReportBadType("keyboard section", field, scText(info->dpy, si),
+ "number");
+ return False;
+ }
+ si->defs.defined |= def;
+ *pField = tmp.uval;
return True;
}
static int
-SetRowField( RowInfo * row,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- GeometryInfo * info)
-{
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"top")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard row",field,rowText(info->dpy,row));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard row",field,rowText(info->dpy,row),
- "number");
- }
- row->defs.defined|= _GR_Top;
- row->top= tmp.uval;
- }
- else if (uStrCaseCmp(field,"left")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard row",field,rowText(info->dpy,row));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard row",field,rowText(info->dpy,row),
- "number");
- }
- row->defs.defined|= _GR_Left;
- row->left= tmp.uval;
- }
- else if (uStrCaseCmp(field,"vertical")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard row",field,rowText(info->dpy,row));
- }
- if (!ExprResolveBoolean(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard row",field,rowText(info->dpy,row),
- "boolean");
- }
- row->defs.defined|= _GR_Vertical;
- row->vertical= tmp.uval;
- }
- else {
- info->errorCount++;
- return ReportBadField("keyboard row",field,rowText(info->dpy,row));
+SetRowField(RowInfo * row,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, GeometryInfo * info)
+{
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "top") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard row", field,
+ rowText(info->dpy, row));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard row", field,
+ rowText(info->dpy, row), "number");
+ }
+ row->defs.defined |= _GR_Top;
+ row->top = tmp.uval;
+ }
+ else if (uStrCaseCmp(field, "left") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard row", field,
+ rowText(info->dpy, row));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard row", field,
+ rowText(info->dpy, row), "number");
+ }
+ row->defs.defined |= _GR_Left;
+ row->left = tmp.uval;
+ }
+ else if (uStrCaseCmp(field, "vertical") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard row", field,
+ rowText(info->dpy, row));
+ }
+ if (!ExprResolveBoolean(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard row", field,
+ rowText(info->dpy, row), "boolean");
+ }
+ row->defs.defined |= _GR_Vertical;
+ row->vertical = tmp.uval;
+ }
+ else
+ {
+ info->errorCount++;
+ return ReportBadField("keyboard row", field, rowText(info->dpy, row));
}
return True;
}
static int
-SetKeyField( KeyInfo *key,
- const char *field,
- ExprDef *arrayNdx,
- ExprDef *value,
- GeometryInfo *info)
-{
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"gap")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("key",field,keyText(key));
- }
- if (!ExprResolveFloat(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("key",field,keyText(key),"number");
- }
- key->defs.defined|= _GK_Gap;
- key->gap= tmp.ival;
- }
- else if (uStrCaseCmp(field,"shape")==0) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("key",field,keyText(key));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("key",field,keyText(key),"string");
- }
- key->defs.defined|= _GK_Shape;
- key->shape= XkbInternAtom(info->dpy,tmp.str,False);
- }
- else if ((uStrCaseCmp(field,"color")==0)||
- (uStrCaseCmp(field,"keycolor")==0)) {
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("key",field,keyText(key));
- }
- if (!ExprResolveString(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("key",field,keyText(key),"string");
- }
- key->defs.defined|= _GK_Color;
- key->color= XkbInternAtom(NULL,tmp.str,False);
- }
- else if ((uStrCaseCmp(field,"name")==0)||(uStrCaseCmp(field,"keyname")==0)){
- if (arrayNdx!=NULL) {
- info->errorCount++;
- return ReportNotArray("key",field,keyText(key));
- }
- if (!ExprResolveKeyName(value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("key",field,keyText(key),"key name");
- }
- key->defs.defined|= _GK_Name;
- bzero(key->name,XkbKeyNameLength+1);
- strncpy(key->name,tmp.keyName.name,XkbKeyNameLength);
- }
- else {
- info->errorCount++;
- return ReportBadField("key",field,keyText(key));
+SetKeyField(KeyInfo * key,
+ const char *field,
+ ExprDef * arrayNdx, ExprDef * value, GeometryInfo * info)
+{
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "gap") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("key", field, keyText(key));
+ }
+ if (!ExprResolveFloat(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("key", field, keyText(key), "number");
+ }
+ key->defs.defined |= _GK_Gap;
+ key->gap = tmp.ival;
+ }
+ else if (uStrCaseCmp(field, "shape") == 0)
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("key", field, keyText(key));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("key", field, keyText(key), "string");
+ }
+ key->defs.defined |= _GK_Shape;
+ key->shape = XkbInternAtom(info->dpy, tmp.str, False);
+ }
+ else if ((uStrCaseCmp(field, "color") == 0) ||
+ (uStrCaseCmp(field, "keycolor") == 0))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("key", field, keyText(key));
+ }
+ if (!ExprResolveString(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("key", field, keyText(key), "string");
+ }
+ key->defs.defined |= _GK_Color;
+ key->color = XkbInternAtom(NULL, tmp.str, False);
+ }
+ else if ((uStrCaseCmp(field, "name") == 0)
+ || (uStrCaseCmp(field, "keyname") == 0))
+ {
+ if (arrayNdx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("key", field, keyText(key));
+ }
+ if (!ExprResolveKeyName(value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("key", field, keyText(key), "key name");
+ }
+ key->defs.defined |= _GK_Name;
+ bzero(key->name, XkbKeyNameLength + 1);
+ strncpy(key->name, tmp.keyName.name, XkbKeyNameLength);
+ }
+ else
+ {
+ info->errorCount++;
+ return ReportBadField("key", field, keyText(key));
}
return True;
}
static int
-SetGeometryProperty(GeometryInfo *info,char *property,ExprDef *value)
+SetGeometryProperty(GeometryInfo * info, char *property, ExprDef * value)
{
-PropertyInfo pi;
-ExprResult result;
+ PropertyInfo pi;
+ ExprResult result;
- InitPropertyInfo(&pi,info);
- pi.name= property;
- if (!ExprResolveString(value,&result,NULL,NULL)) {
- info->errorCount++;
- ERROR("Property values must be type string\n");
- ACTION1("Ignoring illegal definition of \"%s\" property\n",property);
- return False;
+ InitPropertyInfo(&pi, info);
+ pi.name = property;
+ if (!ExprResolveString(value, &result, NULL, NULL))
+ {
+ info->errorCount++;
+ ERROR("Property values must be type string\n");
+ ACTION1("Ignoring illegal definition of \"%s\" property\n", property);
+ return False;
}
- pi.value= result.str;
- return AddProperty(info,&pi);
+ pi.value = result.str;
+ return AddProperty(info, &pi);
}
static int
-HandleGeometryVar(VarDef *stmt,XkbDescPtr xkb,GeometryInfo *info)
-{
-ExprResult elem,field,tmp;
-ExprDef * ndx;
-DoodadInfo * di;
-Atom * pField;
-
- if (ExprResolveLhs(stmt->name,&elem,&field,&ndx)==0)
- return 0; /* internal error, already reported */
- if (elem.str&&(uStrCaseCmp(elem.str,"shape")==0))
- return SetShapeField(NULL,field.str,ndx,stmt->value,info);
- if (elem.str&&(uStrCaseCmp(elem.str,"key")==0))
- return SetKeyField(&info->dfltSection.dfltRow.dfltKey,
- field.str,ndx,stmt->value,info);
- if (elem.str&&(uStrCaseCmp(elem.str,"row")==0))
- return SetRowField(&info->dfltSection.dfltRow,field.str,ndx,
- stmt->value,info);
- if (elem.str&&(uStrCaseCmp(elem.str,"section")==0)) {
- return SetSectionField(&info->dfltSection,field.str,ndx,stmt->value,
- info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"property")==0)) {
- if (ndx!=NULL) {
- info->errorCount++;
- ERROR1("The %s geometry property is not an array\n",field.str);
- ACTION("Ignoring illegal property definition\n");
- return False;
- }
- return SetGeometryProperty(info,field.str,stmt->value);
- }
- if (elem.str&&((di=FindDfltDoodadByTypeName(elem.str,NULL,info))!=NULL)) {
- return SetDoodadField(di,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"solid")==0)) {
- DoodadInfo *dflt;
- dflt= FindDoodadByType(info->dfltDoodads,XkbSolidDoodad);
- if (dflt==NULL)
- dflt= NextDfltDoodad(NULL,info);
- return SetDoodadField(dflt,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"outline")==0)) {
- DoodadInfo *dflt;
- dflt= FindDoodadByType(info->dfltDoodads,XkbOutlineDoodad);
- if (dflt==NULL)
- dflt= NextDfltDoodad(NULL,info);
- return SetDoodadField(dflt,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"text")==0)) {
- DoodadInfo *dflt;
- dflt= FindDoodadByType(info->dfltDoodads,XkbTextDoodad);
- if (dflt==NULL)
- dflt= NextDfltDoodad(NULL,info);
- return SetDoodadField(dflt,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"indicator")==0)) {
- DoodadInfo *dflt;
- dflt= FindDoodadByType(info->dfltDoodads,XkbIndicatorDoodad);
- if (dflt==NULL)
- dflt= NextDfltDoodad(NULL,info);
- return SetDoodadField(dflt,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str&&(uStrCaseCmp(elem.str,"logo")==0)) {
- DoodadInfo *dflt;
- dflt= FindDoodadByType(info->dfltDoodads,XkbLogoDoodad);
- if (dflt==NULL)
- dflt= NextDfltDoodad(NULL,info);
- return SetDoodadField(dflt,field.str,ndx,stmt->value,NULL,info);
- }
- if (elem.str) {
- WARN("Assignment to field of unknown element\n");
- ACTION2("No value assigned to %s.%s\n",elem.str,field.str);
- return False;
- }
-
- if ((uStrCaseCmp(field.str,"width")==0)||
- (uStrCaseCmp(field.str,"widthmm")==0)) {
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveFloat(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","number");
- }
- if (tmp.ival<1) {
- WARN("Keyboard width must be positive\n");
- ACTION1("Ignoring illegal keyboard width %s\n",
- XkbGeomFPText(tmp.ival,XkbMessage));
- return True;
- }
- if (info->widthMM!=0) {
- WARN("Keyboard width multiply defined\n");
- ACTION1("Using last definition (%s),",
- XkbGeomFPText(tmp.ival,XkbMessage));
- INFO1(" ignoring first (%s)\n",
- XkbGeomFPText(info->widthMM,XkbMessage));
- }
- info->widthMM= tmp.ival;
- return True;
- }
- else if ((uStrCaseCmp(field.str,"height")==0)||
- (uStrCaseCmp(field.str,"heightmm")==0)) {
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveFloat(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","number");
- }
- if (tmp.ival<1) {
- WARN("Keyboard height must be positive\n");
- ACTION1("Ignoring illegal keyboard height %s\n",
- XkbGeomFPText(tmp.ival,XkbMessage));
- return True;
- }
- if (info->heightMM!=0) {
- WARN("Keyboard height multiply defined\n");
- ACTION1("Using last definition (%s),",
- XkbGeomFPText(tmp.ival,XkbMessage));
- INFO1(" ignoring first (%s)\n",
- XkbGeomFPText(info->heightMM,XkbMessage));
- }
- info->heightMM= tmp.ival;
- return True;
- }
- else if (uStrCaseCmp(field.str,"font")==0) {
- pField= &info->font;
- }
- else if ((uStrCaseCmp(field.str,"fontslant")==0)||
- (uStrCaseCmp(field.str,"slant")==0)) {
- pField= &info->fontSlant;
- }
- else if ((uStrCaseCmp(field.str,"fontweight")==0)||
- (uStrCaseCmp(field.str,"weight")==0)) {
- pField= &info->fontWeight;
- }
- else if ((uStrCaseCmp(field.str,"fontwidth")==0)||
- (uStrCaseCmp(field.str,"setwidth")==0)) {
- pField= &info->fontWeight;
- }
- else if ((uStrCaseCmp(field.str,"fontencoding")==0)||
- (uStrCaseCmp(field.str,"encoding")==0)) {
- pField= &info->fontEncoding;
- }
- else if ((uStrCaseCmp(field.str,"xfont")==0)||
- (uStrCaseCmp(field.str,"xfontname")==0)) {
- pField= &info->fontSpec;
- }
- else if (uStrCaseCmp(field.str,"fontsize")==0) {
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveFloat(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","number");
- }
- if ((tmp.ival<40)||(tmp.ival>2550)) {
- info->errorCount++;
- ERROR1("Illegal font size %d (must be 4..255)\n",tmp.ival);
- ACTION("Ignoring font size in keyboard geometry\n");
- return False;
- }
- info->fontSize= tmp.ival;
- return True;
- }
- else if ((uStrCaseCmp(field.str,"color")==0)||
- (uStrCaseCmp(field.str,"basecolor")==0)){
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveString(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","string");
- }
- info->baseColor= XkbInternAtom(NULL,tmp.str,False);
- return True;
- }
- else if (uStrCaseCmp(field.str,"labelcolor")==0){
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveString(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","string");
- }
- info->labelColor= XkbInternAtom(NULL,tmp.str,False);
- return True;
- }
- else {
- return SetGeometryProperty(info,field.str,stmt->value);
- }
-
- if (ndx!=NULL) {
- info->errorCount++;
- return ReportNotArray("keyboard",field.str,"geometry");
- }
- if (!ExprResolveString(stmt->value,&tmp,NULL,NULL)) {
- info->errorCount++;
- return ReportBadType("keyboard",field.str,"geometry","string");
- }
- *pField= XkbInternAtom(NULL,tmp.str,False);
+HandleGeometryVar(VarDef * stmt, XkbDescPtr xkb, GeometryInfo * info)
+{
+ ExprResult elem, field, tmp;
+ ExprDef *ndx;
+ DoodadInfo *di;
+ Atom *pField;
+
+ if (ExprResolveLhs(stmt->name, &elem, &field, &ndx) == 0)
+ return 0; /* internal error, already reported */
+ if (elem.str && (uStrCaseCmp(elem.str, "shape") == 0))
+ return SetShapeField(NULL, field.str, ndx, stmt->value, info);
+ if (elem.str && (uStrCaseCmp(elem.str, "key") == 0))
+ return SetKeyField(&info->dfltSection.dfltRow.dfltKey,
+ field.str, ndx, stmt->value, info);
+ if (elem.str && (uStrCaseCmp(elem.str, "row") == 0))
+ return SetRowField(&info->dfltSection.dfltRow, field.str, ndx,
+ stmt->value, info);
+ if (elem.str && (uStrCaseCmp(elem.str, "section") == 0))
+ {
+ return SetSectionField(&info->dfltSection, field.str, ndx,
+ stmt->value, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "property") == 0))
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ ERROR1("The %s geometry property is not an array\n", field.str);
+ ACTION("Ignoring illegal property definition\n");
+ return False;
+ }
+ return SetGeometryProperty(info, field.str, stmt->value);
+ }
+ if (elem.str
+ && ((di = FindDfltDoodadByTypeName(elem.str, NULL, info)) != NULL))
+ {
+ return SetDoodadField(di, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "solid") == 0))
+ {
+ DoodadInfo *dflt;
+ dflt = FindDoodadByType(info->dfltDoodads, XkbSolidDoodad);
+ if (dflt == NULL)
+ dflt = NextDfltDoodad(NULL, info);
+ return SetDoodadField(dflt, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "outline") == 0))
+ {
+ DoodadInfo *dflt;
+ dflt = FindDoodadByType(info->dfltDoodads, XkbOutlineDoodad);
+ if (dflt == NULL)
+ dflt = NextDfltDoodad(NULL, info);
+ return SetDoodadField(dflt, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "text") == 0))
+ {
+ DoodadInfo *dflt;
+ dflt = FindDoodadByType(info->dfltDoodads, XkbTextDoodad);
+ if (dflt == NULL)
+ dflt = NextDfltDoodad(NULL, info);
+ return SetDoodadField(dflt, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "indicator") == 0))
+ {
+ DoodadInfo *dflt;
+ dflt = FindDoodadByType(info->dfltDoodads, XkbIndicatorDoodad);
+ if (dflt == NULL)
+ dflt = NextDfltDoodad(NULL, info);
+ return SetDoodadField(dflt, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str && (uStrCaseCmp(elem.str, "logo") == 0))
+ {
+ DoodadInfo *dflt;
+ dflt = FindDoodadByType(info->dfltDoodads, XkbLogoDoodad);
+ if (dflt == NULL)
+ dflt = NextDfltDoodad(NULL, info);
+ return SetDoodadField(dflt, field.str, ndx, stmt->value, NULL, info);
+ }
+ if (elem.str)
+ {
+ WARN("Assignment to field of unknown element\n");
+ ACTION2("No value assigned to %s.%s\n", elem.str, field.str);
+ return False;
+ }
+
+ if ((uStrCaseCmp(field.str, "width") == 0) ||
+ (uStrCaseCmp(field.str, "widthmm") == 0))
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveFloat(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "number");
+ }
+ if (tmp.ival < 1)
+ {
+ WARN("Keyboard width must be positive\n");
+ ACTION1("Ignoring illegal keyboard width %s\n",
+ XkbGeomFPText(tmp.ival, XkbMessage));
+ return True;
+ }
+ if (info->widthMM != 0)
+ {
+ WARN("Keyboard width multiply defined\n");
+ ACTION1("Using last definition (%s),",
+ XkbGeomFPText(tmp.ival, XkbMessage));
+ INFO1(" ignoring first (%s)\n",
+ XkbGeomFPText(info->widthMM, XkbMessage));
+ }
+ info->widthMM = tmp.ival;
+ return True;
+ }
+ else if ((uStrCaseCmp(field.str, "height") == 0) ||
+ (uStrCaseCmp(field.str, "heightmm") == 0))
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveFloat(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "number");
+ }
+ if (tmp.ival < 1)
+ {
+ WARN("Keyboard height must be positive\n");
+ ACTION1("Ignoring illegal keyboard height %s\n",
+ XkbGeomFPText(tmp.ival, XkbMessage));
+ return True;
+ }
+ if (info->heightMM != 0)
+ {
+ WARN("Keyboard height multiply defined\n");
+ ACTION1("Using last definition (%s),",
+ XkbGeomFPText(tmp.ival, XkbMessage));
+ INFO1(" ignoring first (%s)\n",
+ XkbGeomFPText(info->heightMM, XkbMessage));
+ }
+ info->heightMM = tmp.ival;
+ return True;
+ }
+ else if (uStrCaseCmp(field.str, "font") == 0)
+ {
+ pField = &info->font;
+ }
+ else if ((uStrCaseCmp(field.str, "fontslant") == 0) ||
+ (uStrCaseCmp(field.str, "slant") == 0))
+ {
+ pField = &info->fontSlant;
+ }
+ else if ((uStrCaseCmp(field.str, "fontweight") == 0) ||
+ (uStrCaseCmp(field.str, "weight") == 0))
+ {
+ pField = &info->fontWeight;
+ }
+ else if ((uStrCaseCmp(field.str, "fontwidth") == 0) ||
+ (uStrCaseCmp(field.str, "setwidth") == 0))
+ {
+ pField = &info->fontWeight;
+ }
+ else if ((uStrCaseCmp(field.str, "fontencoding") == 0) ||
+ (uStrCaseCmp(field.str, "encoding") == 0))
+ {
+ pField = &info->fontEncoding;
+ }
+ else if ((uStrCaseCmp(field.str, "xfont") == 0) ||
+ (uStrCaseCmp(field.str, "xfontname") == 0))
+ {
+ pField = &info->fontSpec;
+ }
+ else if (uStrCaseCmp(field.str, "fontsize") == 0)
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveFloat(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "number");
+ }
+ if ((tmp.ival < 40) || (tmp.ival > 2550))
+ {
+ info->errorCount++;
+ ERROR1("Illegal font size %d (must be 4..255)\n", tmp.ival);
+ ACTION("Ignoring font size in keyboard geometry\n");
+ return False;
+ }
+ info->fontSize = tmp.ival;
+ return True;
+ }
+ else if ((uStrCaseCmp(field.str, "color") == 0) ||
+ (uStrCaseCmp(field.str, "basecolor") == 0))
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveString(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "string");
+ }
+ info->baseColor = XkbInternAtom(NULL, tmp.str, False);
+ return True;
+ }
+ else if (uStrCaseCmp(field.str, "labelcolor") == 0)
+ {
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveString(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "string");
+ }
+ info->labelColor = XkbInternAtom(NULL, tmp.str, False);
+ return True;
+ }
+ else
+ {
+ return SetGeometryProperty(info, field.str, stmt->value);
+ }
+
+ if (ndx != NULL)
+ {
+ info->errorCount++;
+ return ReportNotArray("keyboard", field.str, "geometry");
+ }
+ if (!ExprResolveString(stmt->value, &tmp, NULL, NULL))
+ {
+ info->errorCount++;
+ return ReportBadType("keyboard", field.str, "geometry", "string");
+ }
+ *pField = XkbInternAtom(NULL, tmp.str, False);
return True;
}
/***====================================================================***/
static Bool
-HandleShapeBody(ShapeDef *def,ShapeInfo *si,unsigned merge,GeometryInfo *info)
-{
-OutlineDef * ol;
-int nOut,nPt;
-XkbOutlinePtr outline;
-ExprDef * pt;
-
- if (def->nOutlines<1) {
- WARN1("Shape \"%s\" has no outlines\n",shText(info->dpy,si));
- ACTION("Definition ignored\n");
- return True;
- }
- si->nOutlines= def->nOutlines;
- si->outlines= uTypedCalloc(def->nOutlines,XkbOutlineRec);
- if (!si->outlines) {
- ERROR1("Couldn't allocate outlines for \"%s\"\n",shText(info->dpy,si));
- ACTION("Definition ignored\n");
- info->errorCount++;
- return False;
- }
- for (nOut=0,ol=def->outlines;ol!=NULL;ol=(OutlineDef *)ol->common.next) {
- if (ol->nPoints<1) {
- SetShapeField(si,XkbAtomGetString(NULL,ol->field),NULL,
- ol->points,info);
- continue;
- }
- outline= NULL;
- outline= &si->outlines[nOut++];
- outline->num_points= ol->nPoints;
- outline->corner_radius= si->dfltCornerRadius;
- outline->points= uTypedCalloc(ol->nPoints,XkbPointRec);
- if (!outline->points) {
- ERROR1("Can't allocate points for \"%s\"\n",shText(info->dpy,si));
- ACTION("Definition ignored\n");
- info->errorCount++;
- return False;
- }
- for (nPt=0,pt=ol->points;pt!=NULL;pt=(ExprDef *)pt->common.next) {
- outline->points[nPt].x= pt->value.coord.x;
- outline->points[nPt].y= pt->value.coord.y;
- nPt++;
- }
- if (ol->field!=None) {
- char *str= XkbAtomText(NULL,ol->field,XkbMessage);
- if ((uStrCaseCmp(str,"approximation")==0)||
- (uStrCaseCmp(str,"approx")==0)) {
- if (si->approx==NULL)
- si->approx= outline;
- else {
- WARN1("Multiple approximations for \"%s\"\n",
- shText(info->dpy,si));
- ACTION("Treating all but the first as normal outlines\n");
- }
- }
- else if (uStrCaseCmp(str,"primary")==0) {
- if (si->primary==NULL)
- si->primary= outline;
- else {
- WARN1("Multiple primary outlines for \"%s\"\n",
- shText(info->dpy,si));
- ACTION("Treating all but the first as normal outlines\n");
- }
- }
- else {
- WARN2("Unknown outline type %s for \"%s\"\n",str,
- shText(info->dpy,si));
- ACTION("Treated as a normal outline\n");
- }
- }
- }
- if (nOut!=si->nOutlines) {
- WSGO2("Expected %d outlines, got %d\n",(unsigned int)si->nOutlines,
- nOut);
- si->nOutlines= nOut;
+HandleShapeBody(ShapeDef * def, ShapeInfo * si, unsigned merge,
+ GeometryInfo * info)
+{
+ OutlineDef *ol;
+ int nOut, nPt;
+ XkbOutlinePtr outline;
+ ExprDef *pt;
+
+ if (def->nOutlines < 1)
+ {
+ WARN1("Shape \"%s\" has no outlines\n", shText(info->dpy, si));
+ ACTION("Definition ignored\n");
+ return True;
+ }
+ si->nOutlines = def->nOutlines;
+ si->outlines = uTypedCalloc(def->nOutlines, XkbOutlineRec);
+ if (!si->outlines)
+ {
+ ERROR1("Couldn't allocate outlines for \"%s\"\n",
+ shText(info->dpy, si));
+ ACTION("Definition ignored\n");
+ info->errorCount++;
+ return False;
+ }
+ for (nOut = 0, ol = def->outlines; ol != NULL;
+ ol = (OutlineDef *) ol->common.next)
+ {
+ if (ol->nPoints < 1)
+ {
+ SetShapeField(si, XkbAtomGetString(NULL, ol->field), NULL,
+ ol->points, info);
+ continue;
+ }
+ outline = NULL;
+ outline = &si->outlines[nOut++];
+ outline->num_points = ol->nPoints;
+ outline->corner_radius = si->dfltCornerRadius;
+ outline->points = uTypedCalloc(ol->nPoints, XkbPointRec);
+ if (!outline->points)
+ {
+ ERROR1("Can't allocate points for \"%s\"\n",
+ shText(info->dpy, si));
+ ACTION("Definition ignored\n");
+ info->errorCount++;
+ return False;
+ }
+ for (nPt = 0, pt = ol->points; pt != NULL;
+ pt = (ExprDef *) pt->common.next)
+ {
+ outline->points[nPt].x = pt->value.coord.x;
+ outline->points[nPt].y = pt->value.coord.y;
+ nPt++;
+ }
+ if (ol->field != None)
+ {
+ char *str = XkbAtomText(NULL, ol->field, XkbMessage);
+ if ((uStrCaseCmp(str, "approximation") == 0) ||
+ (uStrCaseCmp(str, "approx") == 0))
+ {
+ if (si->approx == NULL)
+ si->approx = outline;
+ else
+ {
+ WARN1("Multiple approximations for \"%s\"\n",
+ shText(info->dpy, si));
+ ACTION("Treating all but the first as normal outlines\n");
+ }
+ }
+ else if (uStrCaseCmp(str, "primary") == 0)
+ {
+ if (si->primary == NULL)
+ si->primary = outline;
+ else
+ {
+ WARN1("Multiple primary outlines for \"%s\"\n",
+ shText(info->dpy, si));
+ ACTION("Treating all but the first as normal outlines\n");
+ }
+ }
+ else
+ {
+ WARN2("Unknown outline type %s for \"%s\"\n", str,
+ shText(info->dpy, si));
+ ACTION("Treated as a normal outline\n");
+ }
+ }
+ }
+ if (nOut != si->nOutlines)
+ {
+ WSGO2("Expected %d outlines, got %d\n",
+ (unsigned int) si->nOutlines, nOut);
+ si->nOutlines = nOut;
}
return True;
}
static int
-HandleShapeDef(ShapeDef *def,XkbDescPtr xkb,unsigned merge,GeometryInfo *info)
-{
-ShapeInfo si;
-
- if (def->merge!=MergeDefault)
- merge= def->merge;
-
- bzero(&si,sizeof(ShapeInfo));
- si.defs.merge= merge;
- si.name= XkbInternAtom(info->dpy,XkbAtomGetString(NULL,def->name),False);
- si.dfltCornerRadius= info->dfltCornerRadius;
- if (!HandleShapeBody(def,&si,merge,info))
- return False;
- if (!AddShape(info,&si))
- return False;
+HandleShapeDef(ShapeDef * def, XkbDescPtr xkb, unsigned merge,
+ GeometryInfo * info)
+{
+ ShapeInfo si;
+
+ if (def->merge != MergeDefault)
+ merge = def->merge;
+
+ bzero(&si, sizeof(ShapeInfo));
+ si.defs.merge = merge;
+ si.name =
+ XkbInternAtom(info->dpy, XkbAtomGetString(NULL, def->name), False);
+ si.dfltCornerRadius = info->dfltCornerRadius;
+ if (!HandleShapeBody(def, &si, merge, info))
+ return False;
+ if (!AddShape(info, &si))
+ return False;
return True;
}
/***====================================================================***/
static int
-HandleDoodadDef( DoodadDef *def,
- unsigned merge,
- SectionInfo *si,
- GeometryInfo *info)
-{
-ExprResult elem,field;
-ExprDef * ndx;
-DoodadInfo new;
-VarDef * var;
-
- if (def->common.stmtType==StmtIndicatorMapDef) {
- def->common.stmtType= StmtDoodadDef;
- def->type= XkbIndicatorDoodad;
- }
- InitDoodadInfo(&new,def->type,si,info);
- new.name= XkbInternAtom(info->dpy,XkbAtomGetString(NULL,def->name),False);
- for (var=def->body;var!=NULL;var= (VarDef *)var->common.next) {
- if (ExprResolveLhs(var->name,&elem,&field,&ndx)==0)
- return 0; /* internal error, already reported */
- if (elem.str!=NULL) {
- WARN1("Assignment to field of unknown element in doodad %s\n",
- ddText(info->dpy,&new));
- ACTION2("No value assigned to %s.%s\n",elem.str,field.str);
- }
- else if (!SetDoodadField(&new,field.str,ndx,var->value,si,info))
- return False;
- }
- if (!AddDoodad(si,info,&new))
- return False;
+HandleDoodadDef(DoodadDef * def,
+ unsigned merge, SectionInfo * si, GeometryInfo * info)
+{
+ ExprResult elem, field;
+ ExprDef *ndx;
+ DoodadInfo new;
+ VarDef *var;
+
+ if (def->common.stmtType == StmtIndicatorMapDef)
+ {
+ def->common.stmtType = StmtDoodadDef;
+ def->type = XkbIndicatorDoodad;
+ }
+ InitDoodadInfo(&new, def->type, si, info);
+ new.name =
+ XkbInternAtom(info->dpy, XkbAtomGetString(NULL, def->name), False);
+ for (var = def->body; var != NULL; var = (VarDef *) var->common.next)
+ {
+ if (ExprResolveLhs(var->name, &elem, &field, &ndx) == 0)
+ return 0; /* internal error, already reported */
+ if (elem.str != NULL)
+ {
+ WARN1("Assignment to field of unknown element in doodad %s\n",
+ ddText(info->dpy, &new));
+ ACTION2("No value assigned to %s.%s\n", elem.str, field.str);
+ }
+ else if (!SetDoodadField(&new, field.str, ndx, var->value, si, info))
+ return False;
+ }
+ if (!AddDoodad(si, info, &new))
+ return False;
ClearDoodadInfo(&new);
return True;
}
@@ -2234,43 +2549,45 @@ VarDef * var;
/***====================================================================***/
static int
-HandleOverlayDef( OverlayDef * def,
- unsigned merge,
- SectionInfo * si,
- GeometryInfo * info)
-{
-OverlayKeyDef * keyDef;
-OverlayKeyInfo *key;
-OverlayInfo ol;
-
- if ((def->nKeys<1)&&(warningLevel>3)) {
- WARN2("Overlay \"%s\" in section \"%s\" has no keys\n",
- XkbAtomText(NULL,def->name,XkbMessage),
- scText(info->dpy,si));
- ACTION("Overlay ignored\n");
- return True;
- }
- bzero(&ol,sizeof(OverlayInfo));
- ol.name= XkbInternAtom(info->dpy,XkbAtomGetString(NULL,def->name),False);
- for (keyDef= def->keys;keyDef;keyDef=(OverlayKeyDef *)keyDef->common.next) {
- key= uTypedCalloc(1,OverlayKeyInfo);
- if ((!key)&&warningLevel>0) {
- WSGO("Couldn't allocate OverlayKeyInfo\n");
- ACTION2("Overlay %s for section %s will be incomplete\n",
- oiText(info->dpy,&ol),
- scText(info->dpy,si));
- return False;
- }
- strncpy(key->over,keyDef->over,XkbKeyNameLength);
- strncpy(key->under,keyDef->under,XkbKeyNameLength);
- key->sectionRow= _GOK_UnknownRow;
- key->overlayRow= _GOK_UnknownRow;
- ol.keys= (OverlayKeyInfo *)AddCommonInfo(&ol.keys->defs,
- (CommonInfo *)key);
- ol.nKeys++;
- }
- if (!AddOverlay(si,info,&ol))
- return False;
+HandleOverlayDef(OverlayDef * def,
+ unsigned merge, SectionInfo * si, GeometryInfo * info)
+{
+ OverlayKeyDef *keyDef;
+ OverlayKeyInfo *key;
+ OverlayInfo ol;
+
+ if ((def->nKeys < 1) && (warningLevel > 3))
+ {
+ WARN2("Overlay \"%s\" in section \"%s\" has no keys\n",
+ XkbAtomText(NULL, def->name, XkbMessage), scText(info->dpy,
+ si));
+ ACTION("Overlay ignored\n");
+ return True;
+ }
+ bzero(&ol, sizeof(OverlayInfo));
+ ol.name =
+ XkbInternAtom(info->dpy, XkbAtomGetString(NULL, def->name), False);
+ for (keyDef = def->keys; keyDef;
+ keyDef = (OverlayKeyDef *) keyDef->common.next)
+ {
+ key = uTypedCalloc(1, OverlayKeyInfo);
+ if ((!key) && warningLevel > 0)
+ {
+ WSGO("Couldn't allocate OverlayKeyInfo\n");
+ ACTION2("Overlay %s for section %s will be incomplete\n",
+ oiText(info->dpy, &ol), scText(info->dpy, si));
+ return False;
+ }
+ strncpy(key->over, keyDef->over, XkbKeyNameLength);
+ strncpy(key->under, keyDef->under, XkbKeyNameLength);
+ key->sectionRow = _GOK_UnknownRow;
+ key->overlayRow = _GOK_UnknownRow;
+ ol.keys = (OverlayKeyInfo *) AddCommonInfo(&ol.keys->defs,
+ (CommonInfo *) key);
+ ol.nKeys++;
+ }
+ if (!AddOverlay(si, info, &ol))
+ return False;
ClearOverlayInfo(&ol);
return True;
}
@@ -2278,283 +2595,322 @@ OverlayInfo ol;
/***====================================================================***/
static Bool
-HandleComplexKey(KeyDef *def,KeyInfo *key,GeometryInfo *info)
-{
-RowInfo * row;
-ExprDef * expr;
-
- row= key->row;
- for (expr=def->expr;expr!=NULL;expr=(ExprDef *)expr->common.next) {
- if (expr->op==OpAssign) {
- ExprResult elem,f;
- ExprDef *ndx;
- if (ExprResolveLhs(expr->value.binary.left,&elem,&f,&ndx)==0)
- return False; /* internal error, already reported */
- if ((elem.str==NULL)||(uStrCaseCmp(elem.str,"key")==0)) {
- if (!SetKeyField(key,f.str,ndx,expr->value.binary.right,info))
- return False;
- }
- else {
- ERROR("Illegal element used in a key definition\n");
- ACTION2("Assignment to %s.%s ignored\n",elem.str,f.str);
- return False;
- }
- }
- else {
- switch (expr->type) {
- case TypeInt: case TypeFloat:
- if (!SetKeyField(key,"gap",NULL,expr,info))
- return False;
- break;
- case TypeString:
- if (!SetKeyField(key,"shape",NULL,expr,info))
- return False;
- break;
- case TypeKeyName:
- if (!SetKeyField(key,"name",NULL,expr,info))
- return False;
- break;
- default:
- ERROR("Cannot determine field for unnamed expression\n");
- ACTION3("Ignoring key %d in row %d of section %s\n",
- row->nKeys+1,row->section->nRows+1,
- rowText(info->dpy,row));
- return False;
- }
- }
+HandleComplexKey(KeyDef * def, KeyInfo * key, GeometryInfo * info)
+{
+ RowInfo *row;
+ ExprDef *expr;
+
+ row = key->row;
+ for (expr = def->expr; expr != NULL; expr = (ExprDef *) expr->common.next)
+ {
+ if (expr->op == OpAssign)
+ {
+ ExprResult elem, f;
+ ExprDef *ndx;
+ if (ExprResolveLhs(expr->value.binary.left, &elem, &f, &ndx) == 0)
+ return False; /* internal error, already reported */
+ if ((elem.str == NULL) || (uStrCaseCmp(elem.str, "key") == 0))
+ {
+ if (!SetKeyField
+ (key, f.str, ndx, expr->value.binary.right, info))
+ return False;
+ }
+ else
+ {
+ ERROR("Illegal element used in a key definition\n");
+ ACTION2("Assignment to %s.%s ignored\n", elem.str, f.str);
+ return False;
+ }
+ }
+ else
+ {
+ switch (expr->type)
+ {
+ case TypeInt:
+ case TypeFloat:
+ if (!SetKeyField(key, "gap", NULL, expr, info))
+ return False;
+ break;
+ case TypeString:
+ if (!SetKeyField(key, "shape", NULL, expr, info))
+ return False;
+ break;
+ case TypeKeyName:
+ if (!SetKeyField(key, "name", NULL, expr, info))
+ return False;
+ break;
+ default:
+ ERROR("Cannot determine field for unnamed expression\n");
+ ACTION3("Ignoring key %d in row %d of section %s\n",
+ row->nKeys + 1, row->section->nRows + 1,
+ rowText(info->dpy, row));
+ return False;
+ }
+ }
}
return True;
}
static Bool
-HandleRowBody(RowDef *def,RowInfo *row,unsigned merge,GeometryInfo *info)
-{
-KeyDef * keyDef;
-
- if ((def->nKeys<1)&&(warningLevel>3)) {
- ERROR1("Row in section %s has no keys\n",rowText(info->dpy,row));
- ACTION("Section ignored\n");
- return True;
- }
- for (keyDef= def->keys; keyDef!=NULL;keyDef=(KeyDef *)keyDef->common.next) {
- if (keyDef->common.stmtType==StmtVarDef) {
- VarDef *var= (VarDef *)keyDef;
- ExprResult elem,field;
- ExprDef *ndx;
- if (ExprResolveLhs(var->name,&elem,&field,&ndx)==0)
- return 0; /* internal error, already reported */
- if ((elem.str==NULL)||(uStrCaseCmp(elem.str,"row")==0)) {
- if (!SetRowField(row,field.str,ndx,var->value,info))
- return False;
- }
- else if (uStrCaseCmp(elem.str,"key")==0) {
- if (!SetKeyField(&row->dfltKey,field.str,ndx,var->value,info))
- return False;
- }
- else {
- WARN("Assignment to field of unknown element in row\n");
- ACTION2("No value assigned to %s.%s\n",elem.str,field.str);
- }
- }
- else if (keyDef->common.stmtType==StmtKeyDef) {
- KeyInfo key;
- InitKeyInfo(&key,row,info);
- if (keyDef->name!=NULL) {
- int len= strlen(keyDef->name);
- if ((len<1)||(len>XkbKeyNameLength)) {
- ERROR2("Illegal name %s for key in section %s\n",
- keyDef->name,
- rowText(info->dpy,row));
- ACTION("Section not compiled\n");
- return False;
- }
- bzero(key.name,XkbKeyNameLength+1);
- strncpy(key.name,keyDef->name,XkbKeyNameLength);
- key.defs.defined|= _GK_Name;
- }
- else if (!HandleComplexKey(keyDef,&key,info))
- return False;
- if (!AddKey(row,&key))
- return False;
- }
- else {
- WSGO1("Unexpected statement (type %d) in row body\n",
- keyDef->common.stmtType);
- return False;
- }
+HandleRowBody(RowDef * def, RowInfo * row, unsigned merge,
+ GeometryInfo * info)
+{
+ KeyDef *keyDef;
+
+ if ((def->nKeys < 1) && (warningLevel > 3))
+ {
+ ERROR1("Row in section %s has no keys\n", rowText(info->dpy, row));
+ ACTION("Section ignored\n");
+ return True;
+ }
+ for (keyDef = def->keys; keyDef != NULL;
+ keyDef = (KeyDef *) keyDef->common.next)
+ {
+ if (keyDef->common.stmtType == StmtVarDef)
+ {
+ VarDef *var = (VarDef *) keyDef;
+ ExprResult elem, field;
+ ExprDef *ndx;
+ if (ExprResolveLhs(var->name, &elem, &field, &ndx) == 0)
+ return 0; /* internal error, already reported */
+ if ((elem.str == NULL) || (uStrCaseCmp(elem.str, "row") == 0))
+ {
+ if (!SetRowField(row, field.str, ndx, var->value, info))
+ return False;
+ }
+ else if (uStrCaseCmp(elem.str, "key") == 0)
+ {
+ if (!SetKeyField
+ (&row->dfltKey, field.str, ndx, var->value, info))
+ return False;
+ }
+ else
+ {
+ WARN("Assignment to field of unknown element in row\n");
+ ACTION2("No value assigned to %s.%s\n", elem.str, field.str);
+ }
+ }
+ else if (keyDef->common.stmtType == StmtKeyDef)
+ {
+ KeyInfo key;
+ InitKeyInfo(&key, row, info);
+ if (keyDef->name != NULL)
+ {
+ int len = strlen(keyDef->name);
+ if ((len < 1) || (len > XkbKeyNameLength))
+ {
+ ERROR2("Illegal name %s for key in section %s\n",
+ keyDef->name, rowText(info->dpy, row));
+ ACTION("Section not compiled\n");
+ return False;
+ }
+ bzero(key.name, XkbKeyNameLength + 1);
+ strncpy(key.name, keyDef->name, XkbKeyNameLength);
+ key.defs.defined |= _GK_Name;
+ }
+ else if (!HandleComplexKey(keyDef, &key, info))
+ return False;
+ if (!AddKey(row, &key))
+ return False;
+ }
+ else
+ {
+ WSGO1("Unexpected statement (type %d) in row body\n",
+ keyDef->common.stmtType);
+ return False;
+ }
}
return True;
}
static Bool
-HandleSectionBody( SectionDef * def,
- SectionInfo * si,
- unsigned merge,
- GeometryInfo * info)
-{
-RowDef * rowDef;
-DoodadInfo * di;
-
- for (rowDef= def->rows;rowDef!=NULL;rowDef=(RowDef *)rowDef->common.next) {
- if (rowDef->common.stmtType==StmtVarDef) {
- VarDef *var= (VarDef *)rowDef;
- ExprResult elem,field;
- ExprDef *ndx;
- if (ExprResolveLhs(var->name,&elem,&field,&ndx)==0)
- return 0; /* internal error, already reported */
- if ((elem.str==NULL)||(uStrCaseCmp(elem.str,"section")==0)) {
- if (!SetSectionField(si,field.str,ndx,var->value,info))
- return False;
- }
- else if (uStrCaseCmp(elem.str,"row")==0) {
- if (!SetRowField(&si->dfltRow,field.str,ndx,var->value,info))
- return False;
- }
- else if (uStrCaseCmp(elem.str,"key")==0) {
- if(!SetKeyField(&si->dfltRow.dfltKey,field.str,ndx,
- var->value,info))
- return False;
- }
- else if ((di=FindDfltDoodadByTypeName(elem.str,si,info))!=NULL) {
- if (!SetDoodadField(di,field.str,ndx,var->value,si,info))
- return False;
- }
- else {
- WARN("Assignment to field of unknown element in section\n");
- ACTION2("No value assigned to %s.%s\n",elem.str,field.str);
- }
- }
- else if (rowDef->common.stmtType==StmtRowDef) {
- RowInfo row;
- InitRowInfo(&row,si,info);
- if (!HandleRowBody(rowDef,&row,merge,info))
- return False;
- if (!AddRow(si,&row))
- return False;
+HandleSectionBody(SectionDef * def,
+ SectionInfo * si, unsigned merge, GeometryInfo * info)
+{
+ RowDef *rowDef;
+ DoodadInfo *di;
+
+ for (rowDef = def->rows; rowDef != NULL;
+ rowDef = (RowDef *) rowDef->common.next)
+ {
+ if (rowDef->common.stmtType == StmtVarDef)
+ {
+ VarDef *var = (VarDef *) rowDef;
+ ExprResult elem, field;
+ ExprDef *ndx;
+ if (ExprResolveLhs(var->name, &elem, &field, &ndx) == 0)
+ return 0; /* internal error, already reported */
+ if ((elem.str == NULL) || (uStrCaseCmp(elem.str, "section") == 0))
+ {
+ if (!SetSectionField(si, field.str, ndx, var->value, info))
+ return False;
+ }
+ else if (uStrCaseCmp(elem.str, "row") == 0)
+ {
+ if (!SetRowField
+ (&si->dfltRow, field.str, ndx, var->value, info))
+ return False;
+ }
+ else if (uStrCaseCmp(elem.str, "key") == 0)
+ {
+ if (!SetKeyField(&si->dfltRow.dfltKey, field.str, ndx,
+ var->value, info))
+ return False;
+ }
+ else if ((di =
+ FindDfltDoodadByTypeName(elem.str, si, info)) != NULL)
+ {
+ if (!SetDoodadField(di, field.str, ndx, var->value, si, info))
+ return False;
+ }
+ else
+ {
+ WARN("Assignment to field of unknown element in section\n");
+ ACTION2("No value assigned to %s.%s\n", elem.str, field.str);
+ }
+ }
+ else if (rowDef->common.stmtType == StmtRowDef)
+ {
+ RowInfo row;
+ InitRowInfo(&row, si, info);
+ if (!HandleRowBody(rowDef, &row, merge, info))
+ return False;
+ if (!AddRow(si, &row))
+ return False;
/* ClearRowInfo(&row,info);*/
- }
- else if ((rowDef->common.stmtType==StmtDoodadDef)||
- (rowDef->common.stmtType==StmtIndicatorMapDef)) {
- if (!HandleDoodadDef((DoodadDef *)rowDef,merge,si,info))
- return False;
- }
- else if (rowDef->common.stmtType==StmtOverlayDef) {
- if (!HandleOverlayDef((OverlayDef *)rowDef,merge,si,info))
- return False;
- }
- else {
- WSGO1("Unexpected statement (type %d) in section body\n",
- rowDef->common.stmtType);
- return False;
- }
- }
- if (si->nRows!=def->nRows) {
- WSGO2("Expected %d rows, found %d\n",(unsigned int)def->nRows,
- (unsigned int)si->nRows);
- ACTION1("Definition of section %s might be incorrect\n",
- scText(info->dpy,si));
+ }
+ else if ((rowDef->common.stmtType == StmtDoodadDef) ||
+ (rowDef->common.stmtType == StmtIndicatorMapDef))
+ {
+ if (!HandleDoodadDef((DoodadDef *) rowDef, merge, si, info))
+ return False;
+ }
+ else if (rowDef->common.stmtType == StmtOverlayDef)
+ {
+ if (!HandleOverlayDef((OverlayDef *) rowDef, merge, si, info))
+ return False;
+ }
+ else
+ {
+ WSGO1("Unexpected statement (type %d) in section body\n",
+ rowDef->common.stmtType);
+ return False;
+ }
+ }
+ if (si->nRows != def->nRows)
+ {
+ WSGO2("Expected %d rows, found %d\n", (unsigned int) def->nRows,
+ (unsigned int) si->nRows);
+ ACTION1("Definition of section %s might be incorrect\n",
+ scText(info->dpy, si));
}
return True;
}
static int
-HandleSectionDef( SectionDef * def,
- XkbDescPtr xkb,
- unsigned merge,
- GeometryInfo * info)
-{
-SectionInfo si;
-char * str;
-
- if (def->merge!=MergeDefault)
- merge= def->merge;
- InitSectionInfo(&si,info);
- si.defs.merge= merge;
- str= XkbAtomGetString(NULL,def->name);
- if ((str==NULL)||(strlen(str)<1)) {
- ERROR("Section defined without a name\n");
- ACTION("Definition ignored\n");
- return False;
- }
- si.name= XkbInternAtom(info->dpy,XkbAtomGetString(NULL,def->name),False);
- if (!HandleSectionBody(def,&si,merge,info))
- return False;
- if (!AddSection(info,&si))
- return False;
+HandleSectionDef(SectionDef * def,
+ XkbDescPtr xkb, unsigned merge, GeometryInfo * info)
+{
+ SectionInfo si;
+ char *str;
+
+ if (def->merge != MergeDefault)
+ merge = def->merge;
+ InitSectionInfo(&si, info);
+ si.defs.merge = merge;
+ str = XkbAtomGetString(NULL, def->name);
+ if ((str == NULL) || (strlen(str) < 1))
+ {
+ ERROR("Section defined without a name\n");
+ ACTION("Definition ignored\n");
+ return False;
+ }
+ si.name =
+ XkbInternAtom(info->dpy, XkbAtomGetString(NULL, def->name), False);
+ if (!HandleSectionBody(def, &si, merge, info))
+ return False;
+ if (!AddSection(info, &si))
+ return False;
return True;
}
/***====================================================================***/
static void
-HandleGeometryFile( XkbFile * file,
- XkbDescPtr xkb,
- unsigned merge,
- GeometryInfo * info)
-{
-ParseCommon * stmt;
-char * failWhat;
-
- if (merge==MergeDefault)
- merge= MergeAugment;
- info->name= uStringDup(file->name);
- stmt= file->defs;
- while (stmt) {
- failWhat= NULL;
- switch (stmt->stmtType) {
- case StmtInclude:
- if (!HandleIncludeGeometry((IncludeStmt *)stmt,xkb,info,
- HandleGeometryFile))
- info->errorCount++;
- break;
- case StmtKeyAliasDef:
- if (!HandleAliasDef((KeyAliasDef *)stmt,
- merge,info->fileID,&info->aliases)) {
- info->errorCount++;
- }
- break;
- case StmtVarDef:
- if (!HandleGeometryVar((VarDef *)stmt,xkb,info))
- info->errorCount++;
- break;
- case StmtShapeDef:
- if (!HandleShapeDef((ShapeDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtSectionDef:
- if (!HandleSectionDef((SectionDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtIndicatorMapDef:
- case StmtDoodadDef:
- if (!HandleDoodadDef((DoodadDef *)stmt,merge,NULL,info))
- info->errorCount++;
- break;
- case StmtVModDef:
- if (!failWhat) failWhat= "virtual modfier";
- case StmtInterpDef:
- if (!failWhat) failWhat= "symbol interpretation";
- case StmtGroupCompatDef:
- if (!failWhat) failWhat= "group compatibility map";
- case StmtKeycodeDef:
- if (!failWhat) failWhat= "key name";
- ERROR("Interpretation files may not include other types\n");
- ACTION1("Ignoring %s definition.\n",failWhat);
- info->errorCount++;
- break;
- default:
- WSGO1("Unexpected statement type %d in HandleGeometryFile\n",
- stmt->stmtType);
- break;
- }
- stmt= stmt->next;
- if (info->errorCount>10) {
+HandleGeometryFile(XkbFile * file,
+ XkbDescPtr xkb, unsigned merge, GeometryInfo * info)
+{
+ ParseCommon *stmt;
+ char *failWhat;
+
+ if (merge == MergeDefault)
+ merge = MergeAugment;
+ info->name = uStringDup(file->name);
+ stmt = file->defs;
+ while (stmt)
+ {
+ failWhat = NULL;
+ switch (stmt->stmtType)
+ {
+ case StmtInclude:
+ if (!HandleIncludeGeometry((IncludeStmt *) stmt, xkb, info,
+ HandleGeometryFile))
+ info->errorCount++;
+ break;
+ case StmtKeyAliasDef:
+ if (!HandleAliasDef((KeyAliasDef *) stmt,
+ merge, info->fileID, &info->aliases))
+ {
+ info->errorCount++;
+ }
+ break;
+ case StmtVarDef:
+ if (!HandleGeometryVar((VarDef *) stmt, xkb, info))
+ info->errorCount++;
+ break;
+ case StmtShapeDef:
+ if (!HandleShapeDef((ShapeDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtSectionDef:
+ if (!HandleSectionDef((SectionDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtIndicatorMapDef:
+ case StmtDoodadDef:
+ if (!HandleDoodadDef((DoodadDef *) stmt, merge, NULL, info))
+ info->errorCount++;
+ break;
+ case StmtVModDef:
+ if (!failWhat)
+ failWhat = "virtual modfier";
+ case StmtInterpDef:
+ if (!failWhat)
+ failWhat = "symbol interpretation";
+ case StmtGroupCompatDef:
+ if (!failWhat)
+ failWhat = "group compatibility map";
+ case StmtKeycodeDef:
+ if (!failWhat)
+ failWhat = "key name";
+ ERROR("Interpretation files may not include other types\n");
+ ACTION1("Ignoring %s definition.\n", failWhat);
+ info->errorCount++;
+ break;
+ default:
+ WSGO1("Unexpected statement type %d in HandleGeometryFile\n",
+ stmt->stmtType);
+ break;
+ }
+ stmt = stmt->next;
+ if (info->errorCount > 10)
+ {
#ifdef NOISY
- ERROR("Too many errors\n");
+ ERROR("Too many errors\n");
#endif
- ACTION1("Abandoning geometry file \"%s\"\n",file->topName);
- break;
- }
+ ACTION1("Abandoning geometry file \"%s\"\n", file->topName);
+ break;
+ }
}
return;
}
@@ -2562,290 +2918,348 @@ char * failWhat;
/***====================================================================***/
static Bool
-CopyShapeDef(Display *dpy,XkbGeometryPtr geom,ShapeInfo *si)
-{
-register int i,n;
-XkbShapePtr shape;
-XkbOutlinePtr old_outline,outline;
-Atom name;
-
- si->index= geom->num_shapes;
- name= XkbInternAtom(dpy,XkbAtomGetString(NULL,si->name),False);
- shape= XkbAddGeomShape(geom,name,si->nOutlines);
- if (!shape) {
- WSGO("Couldn't allocate shape in geometry\n");
- ACTION1("Shape %s not compiled\n",shText(dpy,si));
- return False;
- }
- old_outline= si->outlines;
- for (i=0;i<si->nOutlines;i++,old_outline++) {
- outline= XkbAddGeomOutline(shape,old_outline->num_points);
- if (!outline) {
- WSGO("Couldn't allocate outline in shape\n");
- ACTION1("Shape %s is incomplete\n",shText(dpy,si));
- return False;
- }
- n= old_outline->num_points;
- memcpy(outline->points,old_outline->points,n*sizeof(XkbPointRec));
- outline->num_points= old_outline->num_points;
- outline->corner_radius= old_outline->corner_radius;
- }
- if (si->approx) {
- n= (si->approx-si->outlines);
- shape->approx= &shape->outlines[n];
- }
- if (si->primary) {
- n= (si->primary-si->outlines);
- shape->primary= &shape->outlines[n];
+CopyShapeDef(Display * dpy, XkbGeometryPtr geom, ShapeInfo * si)
+{
+ register int i, n;
+ XkbShapePtr shape;
+ XkbOutlinePtr old_outline, outline;
+ Atom name;
+
+ si->index = geom->num_shapes;
+ name = XkbInternAtom(dpy, XkbAtomGetString(NULL, si->name), False);
+ shape = XkbAddGeomShape(geom, name, si->nOutlines);
+ if (!shape)
+ {
+ WSGO("Couldn't allocate shape in geometry\n");
+ ACTION1("Shape %s not compiled\n", shText(dpy, si));
+ return False;
+ }
+ old_outline = si->outlines;
+ for (i = 0; i < si->nOutlines; i++, old_outline++)
+ {
+ outline = XkbAddGeomOutline(shape, old_outline->num_points);
+ if (!outline)
+ {
+ WSGO("Couldn't allocate outline in shape\n");
+ ACTION1("Shape %s is incomplete\n", shText(dpy, si));
+ return False;
+ }
+ n = old_outline->num_points;
+ memcpy(outline->points, old_outline->points, n * sizeof(XkbPointRec));
+ outline->num_points = old_outline->num_points;
+ outline->corner_radius = old_outline->corner_radius;
+ }
+ if (si->approx)
+ {
+ n = (si->approx - si->outlines);
+ shape->approx = &shape->outlines[n];
+ }
+ if (si->primary)
+ {
+ n = (si->primary - si->outlines);
+ shape->primary = &shape->outlines[n];
}
XkbComputeShapeBounds(shape);
return True;
}
static Bool
-VerifyDoodadInfo(DoodadInfo *di,GeometryInfo *info)
-{
- if ((di->defs.defined&(_GD_Top|_GD_Left))!=(_GD_Top|_GD_Left)) {
- if (warningLevel<9) {
- ERROR1("No position defined for doodad %s\n",ddText(info->dpy,di));
- ACTION("Illegal doodad ignored\n");
- return False;
- }
- }
- if ((di->defs.defined & _GD_Priority) == 0) {
- /* calculate priority -- should be just above previous doodad/row */
- }
- switch (di->type) {
- case XkbOutlineDoodad:
- case XkbSolidDoodad:
- if ((di->defs.defined&_GD_Shape)==0) {
- ERROR2("No shape defined for %s doodad %s\n",
- (di->type==XkbOutlineDoodad?"outline":"filled"),
- ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- else {
- ShapeInfo *si;
- si= FindShape(info,di->shape, (di->type==XkbOutlineDoodad?
- "outline doodad":
- "solid doodad"),
- ddText(info->dpy,di));
- if (si)
- di->shape= si->name;
- else {
- ERROR1("No legal shape for %s\n",ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- }
- if ((di->defs.defined&_GD_Color)==0) {
- if (warningLevel>5) {
- WARN1("No color for doodad %s\n",ddText(info->dpy,di));
- ACTION("Using black\n");
- }
- di->color= XkbInternAtom(NULL,"black",False);
- }
- break;
- case XkbTextDoodad:
- if ((di->defs.defined&_GD_Text)==0) {
- ERROR1("No text specified for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Illegal doodad definition ignored\n");
- return False;
- }
- if ((di->defs.defined&_GD_Angle)==0)
- di->angle= 0;
- if ((di->defs.defined&_GD_Color)==0) {
- if (warningLevel>5) {
- WARN1("No color specified for doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Using black\n");
- }
- di->color= XkbInternAtom(NULL,"black",False);
- }
- if ((di->defs.defined&_GD_FontSpec)!=0) {
- if ((di->defs.defined&_GD_FontParts)==0)
- return True;
- if (warningLevel<9) {
- WARN1("Text doodad %s has full and partial font definition\n",
- ddText(info->dpy,di));
- ACTION("Full specification ignored\n");
- }
- di->defs.defined&= ~_GD_FontSpec;
- di->fontSpec= None;
- }
- if ((di->defs.defined&_GD_Font)==0) {
- if (warningLevel>5) {
- WARN1("No font specified for doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_FONT);
- }
- di->font= XkbInternAtom(NULL,DFLT_FONT,False);
- }
- if ((di->defs.defined&_GD_FontSlant)==0) {
- if (warningLevel>7) {
- WARN1("No font slant for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_SLANT);
- }
- di->fontSlant= XkbInternAtom(NULL,DFLT_SLANT,False);
- }
- if ((di->defs.defined&_GD_FontWeight)==0) {
- if (warningLevel>7) {
- WARN1("No font weight for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_WEIGHT);
- }
- di->fontWeight= XkbInternAtom(NULL,DFLT_WEIGHT,False);
- }
- if ((di->defs.defined&_GD_FontSetWidth)==0) {
- if (warningLevel>9) {
- WARN1("No font set width for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_SET_WIDTH);
- }
- di->fontSetWidth= XkbInternAtom(NULL,DFLT_SET_WIDTH,False);
- }
- if ((di->defs.defined&_GD_FontVariant)==0) {
- if (warningLevel>9) {
- WARN1("No font variant for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_VARIANT);
- }
- di->fontVariant= XkbInternAtom(NULL,DFLT_VARIANT,False);
- }
- if ((di->defs.defined&_GD_FontEncoding)==0) {
- if (warningLevel>7) {
- WARN1("No font encoding for doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using \"%s\"\n",DFLT_ENCODING);
- }
- di->fontEncoding= XkbInternAtom(NULL,DFLT_ENCODING,False);
- }
- if ((di->defs.defined&_GD_FontSize)==0) {
- if (warningLevel>7) {
- WARN1("No font size for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using %s point text\n",
- XkbGeomFPText(DFLT_SIZE,XkbMessage));
- }
- di->fontSize= DFLT_SIZE;
- }
- if ((di->defs.defined&_GD_Height)==0) {
- unsigned size,nLines;
- char *tmp;
- size= (di->fontSize*120)/100;
- size= (size*254)/720; /* convert to mm/10 */
- for (nLines=1,tmp=XkbAtomGetString(NULL,di->text);*tmp;tmp++) {
- if (*tmp=='\n') nLines++;
- }
- size*= nLines;
- if (warningLevel>5) {
- WARN1("No height for text doodad %s\n",
- ddText(info->dpy,di));
- ACTION1("Using calculated height %s millimeters\n",
- XkbGeomFPText(size,XkbMessage));
- }
- di->height= size;
- }
- if ((di->defs.defined&_GD_Width)==0) {
- unsigned width,tmp;
- char *str;
- width= tmp= 0;
- for (str=XkbAtomGetString(NULL,di->text);*str;str++) {
- if (*str!='\n')
- tmp++;
- else {
- if (tmp>width)
- width= tmp;
- tmp= 1;
- }
- }
- if (width==0)
- width= tmp;
- width*= (di->height*2)/3;
- if (warningLevel>5) {
- WARN1("No width for text doodad %s\n",ddText(info->dpy,di));
- ACTION1("Using calculated width %s millimeters\n",
- XkbGeomFPText(width,XkbMessage));
- }
- di->width= width;
- }
- break;
- case XkbIndicatorDoodad:
- if ((di->defs.defined&_GD_Shape)==0) {
- ERROR1("No shape defined for indicator doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- else {
- ShapeInfo *si;
- si= FindShape(info,di->shape,"indicator doodad",
- ddText(info->dpy,di));
- if (si)
- di->shape= si->name;
- else {
- ERROR1("No legal shape for doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- }
- if ((di->defs.defined&_GD_Color)==0) {
- if (warningLevel>5) {
- WARN1("No \"on\" color for indicator doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Using green\n");
- }
- di->color= XkbInternAtom(NULL,"green",False);
- }
- if ((di->defs.defined&_GD_OffColor)==0) {
- if (warningLevel>5) {
- WARN1("No \"off\" color for indicator doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Using black\n");
- }
- di->offColor= XkbInternAtom(NULL,"black",False);
- }
- break;
- case XkbLogoDoodad:
- if (di->logoName==NULL) {
- ERROR1("No logo name defined for logo doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- if ((di->defs.defined&_GD_Shape)==0) {
- ERROR1("No shape defined for logo doodad %s\n",
- ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- else {
- ShapeInfo *si;
- si= FindShape(info,di->shape,"logo doodad",
- ddText(info->dpy,di));
- if (si)
- di->shape= si->name;
- else {
- ERROR1("No legal shape for %s\n",ddText(info->dpy,di));
- ACTION("Incomplete definition ignored\n");
- return False;
- }
- }
- if ((di->defs.defined&_GD_Color)==0) {
- if (warningLevel>5) {
- WARN1("No color for doodad %s\n",ddText(info->dpy,di));
- ACTION("Using black\n");
- }
- di->color= XkbInternAtom(NULL,"black",False);
- }
- break;
- default:
- WSGO1("Uknown doodad type %d in VerifyDoodad\n",(unsigned int)di->type);
- return False;
+VerifyDoodadInfo(DoodadInfo * di, GeometryInfo * info)
+{
+ if ((di->defs.defined & (_GD_Top | _GD_Left)) != (_GD_Top | _GD_Left))
+ {
+ if (warningLevel < 9)
+ {
+ ERROR1("No position defined for doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Illegal doodad ignored\n");
+ return False;
+ }
+ }
+ if ((di->defs.defined & _GD_Priority) == 0)
+ {
+ /* calculate priority -- should be just above previous doodad/row */
+ }
+ switch (di->type)
+ {
+ case XkbOutlineDoodad:
+ case XkbSolidDoodad:
+ if ((di->defs.defined & _GD_Shape) == 0)
+ {
+ ERROR2("No shape defined for %s doodad %s\n",
+ (di->type == XkbOutlineDoodad ? "outline" : "filled"),
+ ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ else
+ {
+ ShapeInfo *si;
+ si = FindShape(info, di->shape,
+ (di->type ==
+ XkbOutlineDoodad ? "outline doodad" :
+ "solid doodad"), ddText(info->dpy, di));
+ if (si)
+ di->shape = si->name;
+ else
+ {
+ ERROR1("No legal shape for %s\n", ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ }
+ if ((di->defs.defined & _GD_Color) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No color for doodad %s\n", ddText(info->dpy, di));
+ ACTION("Using black\n");
+ }
+ di->color = XkbInternAtom(NULL, "black", False);
+ }
+ break;
+ case XkbTextDoodad:
+ if ((di->defs.defined & _GD_Text) == 0)
+ {
+ ERROR1("No text specified for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Illegal doodad definition ignored\n");
+ return False;
+ }
+ if ((di->defs.defined & _GD_Angle) == 0)
+ di->angle = 0;
+ if ((di->defs.defined & _GD_Color) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No color specified for doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Using black\n");
+ }
+ di->color = XkbInternAtom(NULL, "black", False);
+ }
+ if ((di->defs.defined & _GD_FontSpec) != 0)
+ {
+ if ((di->defs.defined & _GD_FontParts) == 0)
+ return True;
+ if (warningLevel < 9)
+ {
+ WARN1
+ ("Text doodad %s has full and partial font definition\n",
+ ddText(info->dpy, di));
+ ACTION("Full specification ignored\n");
+ }
+ di->defs.defined &= ~_GD_FontSpec;
+ di->fontSpec = None;
+ }
+ if ((di->defs.defined & _GD_Font) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No font specified for doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_FONT);
+ }
+ di->font = XkbInternAtom(NULL, DFLT_FONT, False);
+ }
+ if ((di->defs.defined & _GD_FontSlant) == 0)
+ {
+ if (warningLevel > 7)
+ {
+ WARN1("No font slant for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_SLANT);
+ }
+ di->fontSlant = XkbInternAtom(NULL, DFLT_SLANT, False);
+ }
+ if ((di->defs.defined & _GD_FontWeight) == 0)
+ {
+ if (warningLevel > 7)
+ {
+ WARN1("No font weight for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_WEIGHT);
+ }
+ di->fontWeight = XkbInternAtom(NULL, DFLT_WEIGHT, False);
+ }
+ if ((di->defs.defined & _GD_FontSetWidth) == 0)
+ {
+ if (warningLevel > 9)
+ {
+ WARN1("No font set width for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_SET_WIDTH);
+ }
+ di->fontSetWidth = XkbInternAtom(NULL, DFLT_SET_WIDTH, False);
+ }
+ if ((di->defs.defined & _GD_FontVariant) == 0)
+ {
+ if (warningLevel > 9)
+ {
+ WARN1("No font variant for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_VARIANT);
+ }
+ di->fontVariant = XkbInternAtom(NULL, DFLT_VARIANT, False);
+ }
+ if ((di->defs.defined & _GD_FontEncoding) == 0)
+ {
+ if (warningLevel > 7)
+ {
+ WARN1("No font encoding for doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using \"%s\"\n", DFLT_ENCODING);
+ }
+ di->fontEncoding = XkbInternAtom(NULL, DFLT_ENCODING, False);
+ }
+ if ((di->defs.defined & _GD_FontSize) == 0)
+ {
+ if (warningLevel > 7)
+ {
+ WARN1("No font size for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using %s point text\n",
+ XkbGeomFPText(DFLT_SIZE, XkbMessage));
+ }
+ di->fontSize = DFLT_SIZE;
+ }
+ if ((di->defs.defined & _GD_Height) == 0)
+ {
+ unsigned size, nLines;
+ char *tmp;
+ size = (di->fontSize * 120) / 100;
+ size = (size * 254) / 720; /* convert to mm/10 */
+ for (nLines = 1, tmp = XkbAtomGetString(NULL, di->text); *tmp;
+ tmp++)
+ {
+ if (*tmp == '\n')
+ nLines++;
+ }
+ size *= nLines;
+ if (warningLevel > 5)
+ {
+ WARN1("No height for text doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION1("Using calculated height %s millimeters\n",
+ XkbGeomFPText(size, XkbMessage));
+ }
+ di->height = size;
+ }
+ if ((di->defs.defined & _GD_Width) == 0)
+ {
+ unsigned width, tmp;
+ char *str;
+ width = tmp = 0;
+ for (str = XkbAtomGetString(NULL, di->text); *str; str++)
+ {
+ if (*str != '\n')
+ tmp++;
+ else
+ {
+ if (tmp > width)
+ width = tmp;
+ tmp = 1;
+ }
+ }
+ if (width == 0)
+ width = tmp;
+ width *= (di->height * 2) / 3;
+ if (warningLevel > 5)
+ {
+ WARN1("No width for text doodad %s\n", ddText(info->dpy, di));
+ ACTION1("Using calculated width %s millimeters\n",
+ XkbGeomFPText(width, XkbMessage));
+ }
+ di->width = width;
+ }
+ break;
+ case XkbIndicatorDoodad:
+ if ((di->defs.defined & _GD_Shape) == 0)
+ {
+ ERROR1("No shape defined for indicator doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ else
+ {
+ ShapeInfo *si;
+ si = FindShape(info, di->shape, "indicator doodad",
+ ddText(info->dpy, di));
+ if (si)
+ di->shape = si->name;
+ else
+ {
+ ERROR1("No legal shape for doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ }
+ if ((di->defs.defined & _GD_Color) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No \"on\" color for indicator doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Using green\n");
+ }
+ di->color = XkbInternAtom(NULL, "green", False);
+ }
+ if ((di->defs.defined & _GD_OffColor) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No \"off\" color for indicator doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Using black\n");
+ }
+ di->offColor = XkbInternAtom(NULL, "black", False);
+ }
+ break;
+ case XkbLogoDoodad:
+ if (di->logoName == NULL)
+ {
+ ERROR1("No logo name defined for logo doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ if ((di->defs.defined & _GD_Shape) == 0)
+ {
+ ERROR1("No shape defined for logo doodad %s\n",
+ ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ else
+ {
+ ShapeInfo *si;
+ si = FindShape(info, di->shape, "logo doodad",
+ ddText(info->dpy, di));
+ if (si)
+ di->shape = si->name;
+ else
+ {
+ ERROR1("No legal shape for %s\n", ddText(info->dpy, di));
+ ACTION("Incomplete definition ignored\n");
+ return False;
+ }
+ }
+ if ((di->defs.defined & _GD_Color) == 0)
+ {
+ if (warningLevel > 5)
+ {
+ WARN1("No color for doodad %s\n", ddText(info->dpy, di));
+ ACTION("Using black\n");
+ }
+ di->color = XkbInternAtom(NULL, "black", False);
+ }
+ break;
+ default:
+ WSGO1("Uknown doodad type %d in VerifyDoodad\n",
+ (unsigned int) di->type);
+ return False;
}
return True;
}
@@ -2853,113 +3267,129 @@ VerifyDoodadInfo(DoodadInfo *di,GeometryInfo *info)
#define FONT_TEMPLATE "-*-%s-%s-%s-%s-%s-*-%d-*-*-*-*-%s"
static char *
-FontFromParts( Atom fontTok,
- Atom weightTok,
- Atom slantTok,
- Atom setWidthTok,
- Atom varTok,
- int size,
- Atom encodingTok)
-{
-int totalSize;
-char *font,*weight,*slant,*setWidth,*variant,*encoding;
-char * rtrn;
-
- font= (fontTok!=None?XkbAtomGetString(NULL,fontTok):DFLT_FONT);
- weight= (weightTok!=None?XkbAtomGetString(NULL,weightTok):DFLT_WEIGHT);
- slant= (slantTok!=None?XkbAtomGetString(NULL,slantTok):DFLT_SLANT);
- setWidth= (setWidthTok!=None?XkbAtomGetString(NULL,setWidthTok):
- DFLT_SET_WIDTH);
- variant= (varTok!=None?XkbAtomGetString(NULL,varTok):DFLT_VARIANT);
- encoding= (encodingTok!=None?XkbAtomGetString(NULL,encodingTok):
- DFLT_ENCODING);
- if (size==0)
- size= DFLT_SIZE;
- totalSize= strlen(FONT_TEMPLATE)+strlen(font)+strlen(weight)+strlen(slant);
- totalSize+= strlen(setWidth)+strlen(variant)+strlen(encoding);
- rtrn= uCalloc(totalSize,1);
- if (rtrn) {
- sprintf(rtrn,FONT_TEMPLATE,font,weight,slant,setWidth,variant,
- size,encoding);
- }
- return rtrn;
+FontFromParts(Atom fontTok,
+ Atom weightTok,
+ Atom slantTok,
+ Atom setWidthTok, Atom varTok, int size, Atom encodingTok)
+{
+ int totalSize;
+ char *font, *weight, *slant, *setWidth, *variant, *encoding;
+ char *rtrn;
+
+ font = (fontTok != None ? XkbAtomGetString(NULL, fontTok) : DFLT_FONT);
+ weight =
+ (weightTok != None ? XkbAtomGetString(NULL, weightTok) : DFLT_WEIGHT);
+ slant =
+ (slantTok != None ? XkbAtomGetString(NULL, slantTok) : DFLT_SLANT);
+ setWidth =
+ (setWidthTok !=
+ None ? XkbAtomGetString(NULL, setWidthTok) : DFLT_SET_WIDTH);
+ variant =
+ (varTok != None ? XkbAtomGetString(NULL, varTok) : DFLT_VARIANT);
+ encoding =
+ (encodingTok !=
+ None ? XkbAtomGetString(NULL, encodingTok) : DFLT_ENCODING);
+ if (size == 0)
+ size = DFLT_SIZE;
+ totalSize =
+ strlen(FONT_TEMPLATE) + strlen(font) + strlen(weight) + strlen(slant);
+ totalSize += strlen(setWidth) + strlen(variant) + strlen(encoding);
+ rtrn = uCalloc(totalSize, 1);
+ if (rtrn)
+ {
+ sprintf(rtrn, FONT_TEMPLATE, font, weight, slant, setWidth, variant,
+ size, encoding);
+ }
+ return rtrn;
}
static Bool
-CopyDoodadDef( XkbGeometryPtr geom,
- XkbSectionPtr section,
- DoodadInfo * di,
- GeometryInfo * info)
-{
-Atom name;
-XkbDoodadPtr doodad;
-XkbColorPtr color;
-XkbShapePtr shape;
-ShapeInfo * si;
-
- if (!VerifyDoodadInfo(di,info))
- return False;
- name= XkbInternAtom(NULL,XkbAtomGetString(NULL,di->name),False);
- doodad= XkbAddGeomDoodad(geom,section,name);
- if (!doodad) {
- WSGO1("Couldn't allocate doodad in %s\n",
- (section?"section":"geometry"));
- ACTION1("Cannot copy doodad %s\n",ddText(info->dpy,di));
- return False;
- }
- doodad->any.type= di->type;
- doodad->any.priority= di->priority;
- doodad->any.top= di->top;
- doodad->any.left= di->left;
- switch (di->type) {
- case XkbOutlineDoodad:
- case XkbSolidDoodad:
- si= FindShape(info,di->shape,NULL,NULL);
- if (!si)
- return False;
- doodad->shape.angle= di->angle;
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,di->color),geom->num_colors);
- shape= &geom->shapes[si->index];
- XkbSetShapeDoodadColor(geom,&doodad->shape,color);
- XkbSetShapeDoodadShape(geom,&doodad->shape,shape);
- break;
- case XkbTextDoodad:
- doodad->text.angle= di->angle;
- doodad->text.width= di->width;
- doodad->text.height= di->height;
- if (di->fontSpec==None)
- doodad->text.font= FontFromParts(di->font,di->fontWeight,
- di->fontSlant,di->fontSetWidth,
- di->fontVariant,
- di->fontSize,di->fontEncoding);
- else doodad->text.font= XkbAtomGetString(NULL,di->fontSpec);
- doodad->text.text= XkbAtomGetString(NULL,di->text);
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,di->color),geom->num_colors);
- XkbSetTextDoodadColor(geom,&doodad->text,color);
- break;
- case XkbIndicatorDoodad:
- si= FindShape(info,di->shape,NULL,NULL);
- if (!si)
- return False;
- shape= &geom->shapes[si->index];
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,di->color),geom->num_colors);
- XkbSetIndicatorDoodadShape(geom,&doodad->indicator,shape);
- XkbSetIndicatorDoodadOnColor(geom,&doodad->indicator,color);
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,di->offColor),geom->num_colors);
- XkbSetIndicatorDoodadOffColor(geom,&doodad->indicator,color);
- break;
- case XkbLogoDoodad:
- si= FindShape(info,di->shape,NULL,NULL);
- if (!si)
- return False;
- doodad->logo.angle= di->angle;
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,di->color),geom->num_colors);
- shape= &geom->shapes[si->index];
- XkbSetLogoDoodadColor(geom,&doodad->logo,color);
- XkbSetLogoDoodadShape(geom,&doodad->logo,shape);
- doodad->logo.logo_name= di->logoName;
- di->logoName= NULL;
- break;
+CopyDoodadDef(XkbGeometryPtr geom,
+ XkbSectionPtr section, DoodadInfo * di, GeometryInfo * info)
+{
+ Atom name;
+ XkbDoodadPtr doodad;
+ XkbColorPtr color;
+ XkbShapePtr shape;
+ ShapeInfo *si;
+
+ if (!VerifyDoodadInfo(di, info))
+ return False;
+ name = XkbInternAtom(NULL, XkbAtomGetString(NULL, di->name), False);
+ doodad = XkbAddGeomDoodad(geom, section, name);
+ if (!doodad)
+ {
+ WSGO1("Couldn't allocate doodad in %s\n",
+ (section ? "section" : "geometry"));
+ ACTION1("Cannot copy doodad %s\n", ddText(info->dpy, di));
+ return False;
+ }
+ doodad->any.type = di->type;
+ doodad->any.priority = di->priority;
+ doodad->any.top = di->top;
+ doodad->any.left = di->left;
+ switch (di->type)
+ {
+ case XkbOutlineDoodad:
+ case XkbSolidDoodad:
+ si = FindShape(info, di->shape, NULL, NULL);
+ if (!si)
+ return False;
+ doodad->shape.angle = di->angle;
+ color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, di->color),
+ geom->num_colors);
+ shape = &geom->shapes[si->index];
+ XkbSetShapeDoodadColor(geom, &doodad->shape, color);
+ XkbSetShapeDoodadShape(geom, &doodad->shape, shape);
+ break;
+ case XkbTextDoodad:
+ doodad->text.angle = di->angle;
+ doodad->text.width = di->width;
+ doodad->text.height = di->height;
+ if (di->fontSpec == None)
+ doodad->text.font = FontFromParts(di->font, di->fontWeight,
+ di->fontSlant,
+ di->fontSetWidth,
+ di->fontVariant, di->fontSize,
+ di->fontEncoding);
+ else
+ doodad->text.font = XkbAtomGetString(NULL, di->fontSpec);
+ doodad->text.text = XkbAtomGetString(NULL, di->text);
+ color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, di->color),
+ geom->num_colors);
+ XkbSetTextDoodadColor(geom, &doodad->text, color);
+ break;
+ case XkbIndicatorDoodad:
+ si = FindShape(info, di->shape, NULL, NULL);
+ if (!si)
+ return False;
+ shape = &geom->shapes[si->index];
+ color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, di->color),
+ geom->num_colors);
+ XkbSetIndicatorDoodadShape(geom, &doodad->indicator, shape);
+ XkbSetIndicatorDoodadOnColor(geom, &doodad->indicator, color);
+ color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, di->offColor),
+ geom->num_colors);
+ XkbSetIndicatorDoodadOffColor(geom, &doodad->indicator, color);
+ break;
+ case XkbLogoDoodad:
+ si = FindShape(info, di->shape, NULL, NULL);
+ if (!si)
+ return False;
+ doodad->logo.angle = di->angle;
+ color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, di->color),
+ geom->num_colors);
+ shape = &geom->shapes[si->index];
+ XkbSetLogoDoodadColor(geom, &doodad->logo, color);
+ XkbSetLogoDoodadShape(geom, &doodad->logo, shape);
+ doodad->logo.logo_name = di->logoName;
+ di->logoName = NULL;
+ break;
}
return True;
}
@@ -2967,131 +3397,153 @@ ShapeInfo * si;
/***====================================================================***/
static Bool
-VerifyOverlayInfo( XkbGeometryPtr geom,
- XkbSectionPtr section,
- OverlayInfo * oi,
- GeometryInfo * info,
- short rowMap[256],
- short rowSize[256])
-{
-register OverlayKeyInfo * ki,*next;
-unsigned long oKey,uKey,sKey;
-XkbRowPtr row;
-XkbKeyPtr key;
-int r,k;
+VerifyOverlayInfo(XkbGeometryPtr geom,
+ XkbSectionPtr section,
+ OverlayInfo * oi,
+ GeometryInfo * info, short rowMap[256], short rowSize[256])
+{
+ register OverlayKeyInfo *ki, *next;
+ unsigned long oKey, uKey, sKey;
+ XkbRowPtr row;
+ XkbKeyPtr key;
+ int r, k;
/* find out which row each key is in */
- for (ki=oi->keys;ki!=NULL;ki=(OverlayKeyInfo *)ki->defs.next) {
- oKey= KeyNameToLong(ki->over);
- uKey= KeyNameToLong(ki->under);
- for (r=0,row=section->rows;(r<section->num_rows)&&oKey;r++,row++) {
- for (k=0,key=row->keys;(k<row->num_keys)&&oKey;k++,key++) {
- sKey= KeyNameToLong(key->name.name);
- if (sKey==oKey) {
- if (warningLevel>0) {
- WARN3("Key %s in section \"%s\" and overlay \"%s\"\n",
- XkbKeyNameText(key->name.name,XkbMessage),
- XkbAtomText(info->dpy,section->name,XkbMessage),
- XkbAtomText(info->dpy,oi->name,XkbMessage));
- ACTION("Overlay definition ignored\n");
- }
- oKey= 0;
- }
- else if (sKey==uKey) {
- ki->sectionRow= r;
- oKey= 0;
- }
- }
- }
- if ((ki->sectionRow==_GOK_UnknownRow)&&(warningLevel>0)) {
- WARN3("Key %s not in \"%s\", but has an overlay key in \"%s\"\n",
- XkbKeyNameText(ki->under,XkbMessage),
- XkbAtomText(info->dpy,section->name,XkbMessage),
- XkbAtomText(info->dpy,oi->name,XkbMessage));
- ACTION("Definition ignored\n");
- }
+ for (ki = oi->keys; ki != NULL; ki = (OverlayKeyInfo *) ki->defs.next)
+ {
+ oKey = KeyNameToLong(ki->over);
+ uKey = KeyNameToLong(ki->under);
+ for (r = 0, row = section->rows; (r < section->num_rows) && oKey;
+ r++, row++)
+ {
+ for (k = 0, key = row->keys; (k < row->num_keys) && oKey;
+ k++, key++)
+ {
+ sKey = KeyNameToLong(key->name.name);
+ if (sKey == oKey)
+ {
+ if (warningLevel > 0)
+ {
+ WARN3
+ ("Key %s in section \"%s\" and overlay \"%s\"\n",
+ XkbKeyNameText(key->name.name,
+ XkbMessage),
+ XkbAtomText(info->dpy, section->name,
+ XkbMessage),
+ XkbAtomText(info->dpy, oi->name, XkbMessage));
+ ACTION("Overlay definition ignored\n");
+ }
+ oKey = 0;
+ }
+ else if (sKey == uKey)
+ {
+ ki->sectionRow = r;
+ oKey = 0;
+ }
+ }
+ }
+ if ((ki->sectionRow == _GOK_UnknownRow) && (warningLevel > 0))
+ {
+ WARN3
+ ("Key %s not in \"%s\", but has an overlay key in \"%s\"\n",
+ XkbKeyNameText(ki->under, XkbMessage),
+ XkbAtomText(info->dpy, section->name, XkbMessage),
+ XkbAtomText(info->dpy, oi->name, XkbMessage));
+ ACTION("Definition ignored\n");
+ }
}
/* now prune out keys that aren't in the section */
- while ((oi->keys!=NULL)&&(oi->keys->sectionRow==_GOK_UnknownRow)) {
- next= (OverlayKeyInfo *)oi->keys->defs.next;
- uFree(oi->keys);
- oi->keys= next;
- oi->nKeys--;
- }
- for (ki=oi->keys;(ki!=NULL)&&(ki->defs.next!=NULL);ki=next) {
- next= (OverlayKeyInfo *)ki->defs.next;
- if (next->sectionRow==_GOK_UnknownRow) {
- ki->defs.next= next->defs.next;
- oi->nKeys--;
- uFree(next);
- next= (OverlayKeyInfo *)ki->defs.next;
- }
- }
- if (oi->nKeys<1) {
- ERROR2("Overlay \"%s\" for section \"%s\" has no legal keys\n",
- XkbAtomText(info->dpy,oi->name,XkbMessage),
- XkbAtomText(info->dpy,section->name,XkbMessage));
- ACTION("Overlay definition ignored\n");
- return False;
+ while ((oi->keys != NULL) && (oi->keys->sectionRow == _GOK_UnknownRow))
+ {
+ next = (OverlayKeyInfo *) oi->keys->defs.next;
+ uFree(oi->keys);
+ oi->keys = next;
+ oi->nKeys--;
+ }
+ for (ki = oi->keys; (ki != NULL) && (ki->defs.next != NULL); ki = next)
+ {
+ next = (OverlayKeyInfo *) ki->defs.next;
+ if (next->sectionRow == _GOK_UnknownRow)
+ {
+ ki->defs.next = next->defs.next;
+ oi->nKeys--;
+ uFree(next);
+ next = (OverlayKeyInfo *) ki->defs.next;
+ }
+ }
+ if (oi->nKeys < 1)
+ {
+ ERROR2("Overlay \"%s\" for section \"%s\" has no legal keys\n",
+ XkbAtomText(info->dpy, oi->name, XkbMessage),
+ XkbAtomText(info->dpy, section->name, XkbMessage));
+ ACTION("Overlay definition ignored\n");
+ return False;
}
/* now figure out how many rows are defined for the overlay */
- bzero(rowSize,sizeof(short)*256);
- for (k=0;k<256;k++) {
- rowMap[k]= -1;
- }
- oi->nRows= 0;
- for (ki=oi->keys;ki!=NULL;ki=(OverlayKeyInfo *)ki->defs.next) {
- if (rowMap[ki->sectionRow]==-1)
- rowMap[ki->sectionRow]= oi->nRows++;
- ki->overlayRow= rowMap[ki->sectionRow];
- rowSize[ki->overlayRow]++;
+ bzero(rowSize, sizeof(short) * 256);
+ for (k = 0; k < 256; k++)
+ {
+ rowMap[k] = -1;
+ }
+ oi->nRows = 0;
+ for (ki = oi->keys; ki != NULL; ki = (OverlayKeyInfo *) ki->defs.next)
+ {
+ if (rowMap[ki->sectionRow] == -1)
+ rowMap[ki->sectionRow] = oi->nRows++;
+ ki->overlayRow = rowMap[ki->sectionRow];
+ rowSize[ki->overlayRow]++;
}
return True;
}
static Bool
-CopyOverlayDef( XkbGeometryPtr geom,
- XkbSectionPtr section,
- OverlayInfo * oi,
- GeometryInfo * info)
-{
-Atom name;
-XkbOverlayPtr ol;
-XkbOverlayRowPtr row;
-XkbOverlayKeyPtr key;
-OverlayKeyInfo * ki;
-short rowMap[256],rowSize[256];
-int i;
-
- if (!VerifyOverlayInfo(geom,section,oi,info,rowMap,rowSize))
- return False;
- name= XkbInternAtom(NULL,XkbAtomGetString(NULL,oi->name),False);
- ol= XkbAddGeomOverlay(section,name,oi->nRows);
- if (!ol) {
- WSGO2("Couldn't add overlay \"%s\" to section \"%s\"\n",
- XkbAtomText(info->dpy,name,XkbMessage),
- XkbAtomText(info->dpy,section->name,XkbMessage));
- return False;
- }
- for (i=0;i<oi->nRows;i++) {
- int tmp,row_under;
- for (tmp=0,row_under=-1;(tmp<section->num_rows)&&(row_under<0);tmp++) {
- if (rowMap[tmp]==i)
- row_under= tmp;
- }
- if (!XkbAddGeomOverlayRow(ol,row_under,rowSize[i])) {
- WSGO3("Can't add row %d to overlay \"%s\" of section \"%s\"\n",
- i,XkbAtomText(info->dpy,name,XkbMessage),
- XkbAtomText(info->dpy,section->name,XkbMessage));
- return False;
- }
- }
- for (ki=oi->keys;ki!=NULL;ki=(OverlayKeyInfo *)ki->defs.next) {
- row= &ol->rows[ki->overlayRow];
- key= &row->keys[row->num_keys++];
- bzero(key,sizeof(XkbOverlayKeyRec));
- strncpy(key->over.name,ki->over,XkbKeyNameLength);
- strncpy(key->under.name,ki->under,XkbKeyNameLength);
+CopyOverlayDef(XkbGeometryPtr geom,
+ XkbSectionPtr section, OverlayInfo * oi, GeometryInfo * info)
+{
+ Atom name;
+ XkbOverlayPtr ol;
+ XkbOverlayRowPtr row;
+ XkbOverlayKeyPtr key;
+ OverlayKeyInfo *ki;
+ short rowMap[256], rowSize[256];
+ int i;
+
+ if (!VerifyOverlayInfo(geom, section, oi, info, rowMap, rowSize))
+ return False;
+ name = XkbInternAtom(NULL, XkbAtomGetString(NULL, oi->name), False);
+ ol = XkbAddGeomOverlay(section, name, oi->nRows);
+ if (!ol)
+ {
+ WSGO2("Couldn't add overlay \"%s\" to section \"%s\"\n",
+ XkbAtomText(info->dpy, name, XkbMessage),
+ XkbAtomText(info->dpy, section->name, XkbMessage));
+ return False;
+ }
+ for (i = 0; i < oi->nRows; i++)
+ {
+ int tmp, row_under;
+ for (tmp = 0, row_under = -1;
+ (tmp < section->num_rows) && (row_under < 0); tmp++)
+ {
+ if (rowMap[tmp] == i)
+ row_under = tmp;
+ }
+ if (!XkbAddGeomOverlayRow(ol, row_under, rowSize[i]))
+ {
+ WSGO3
+ ("Can't add row %d to overlay \"%s\" of section \"%s\"\n",
+ i, XkbAtomText(info->dpy, name, XkbMessage),
+ XkbAtomText(info->dpy, section->name, XkbMessage));
+ return False;
+ }
+ }
+ for (ki = oi->keys; ki != NULL; ki = (OverlayKeyInfo *) ki->defs.next)
+ {
+ row = &ol->rows[ki->overlayRow];
+ key = &row->keys[row->num_keys++];
+ bzero(key, sizeof(XkbOverlayKeyRec));
+ strncpy(key->over.name, ki->over, XkbKeyNameLength);
+ strncpy(key->under.name, ki->under, XkbKeyNameLength);
}
return True;
}
@@ -3099,88 +3551,106 @@ int i;
/***====================================================================***/
static Bool
-CopySectionDef(XkbGeometryPtr geom,SectionInfo *si,GeometryInfo *info)
-{
-XkbSectionPtr section;
-XkbRowPtr row;
-XkbKeyPtr key;
-KeyInfo * ki;
-RowInfo * ri;
-Atom name;
-
- name= XkbInternAtom(NULL,XkbAtomGetString(NULL,si->name),False);
- section= XkbAddGeomSection(geom,name,si->nRows,si->nDoodads,si->nOverlays);
- if (section==NULL) {
- WSGO("Couldn't allocate section in geometry\n");
- ACTION1("Section %s not compiled\n",scText(info->dpy,si));
- return False;
- }
- section->top= si->top;
- section->left= si->left;
- section->width= si->width;
- section->height= si->height;
- section->angle= si->angle;
- section->priority= si->priority;
- for (ri=si->rows;ri!=NULL;ri=(RowInfo *)ri->defs.next) {
- row= XkbAddGeomRow(section,ri->nKeys);
- if (row==NULL) {
- WSGO("Couldn't allocate row in section\n");
- ACTION1("Section %s is incomplete\n",scText(info->dpy,si));
- return False;
- }
- row->top= ri->top;
- row->left= ri->left;
- row->vertical= ri->vertical;
- for (ki=ri->keys;ki!=NULL;ki=(KeyInfo *)ki->defs.next) {
- XkbColorPtr color;
- if ((ki->defs.defined&_GK_Name)==0) {
- ERROR3("Key %d of row %d in section %s has no name\n",
- (int)ki->index,(int)ri->index,
- scText(info->dpy,si));
- ACTION1("Section %s ignored\n",scText(info->dpy,si));
- return False;
- }
- key= XkbAddGeomKey(row);
- if (key==NULL) {
- WSGO("Couldn't allocate key in row\n");
- ACTION1("Section %s is incomplete\n",scText(info->dpy,si));
- return False;
- }
- memcpy(key->name.name,ki->name,XkbKeyNameLength);
- key->gap= ki->gap;
- if (ki->shape==None)
- key->shape_ndx= 0;
- else {
- ShapeInfo *si;
- si= FindShape(info,ki->shape,"key",keyText(ki));
- if (!si)
- return False;
- key->shape_ndx= si->index;
- }
- if (ki->color!=None)
- color= XkbAddGeomColor(geom,XkbAtomGetString(NULL,ki->color),geom->num_colors);
- else color= XkbAddGeomColor(geom,"white",geom->num_colors);
- XkbSetKeyColor(geom,key,color);
- }
- }
- if (si->doodads!=NULL) {
- DoodadInfo *di;
- for (di=si->doodads;di!=NULL;di=(DoodadInfo *)di->defs.next) {
- CopyDoodadDef(geom,section,di,info);
- }
- }
- if (si->overlays!=NULL) {
- OverlayInfo *oi;
- for (oi=si->overlays;oi!=NULL;oi=(OverlayInfo *)oi->defs.next) {
- CopyOverlayDef(geom,section,oi,info);
- }
- }
- if (XkbComputeSectionBounds(geom,section)) {
- /* 7/6/94 (ef) -- check for negative origin and translate */
- if ((si->defs.defined&_GS_Width)==0)
- section->width= section->bounds.x2;
- if ((si->defs.defined&_GS_Height)==0)
- section->height= section->bounds.y2;
+CopySectionDef(XkbGeometryPtr geom, SectionInfo * si, GeometryInfo * info)
+{
+ XkbSectionPtr section;
+ XkbRowPtr row;
+ XkbKeyPtr key;
+ KeyInfo *ki;
+ RowInfo *ri;
+ Atom name;
+
+ name = XkbInternAtom(NULL, XkbAtomGetString(NULL, si->name), False);
+ section =
+ XkbAddGeomSection(geom, name, si->nRows, si->nDoodads, si->nOverlays);
+ if (section == NULL)
+ {
+ WSGO("Couldn't allocate section in geometry\n");
+ ACTION1("Section %s not compiled\n", scText(info->dpy, si));
+ return False;
+ }
+ section->top = si->top;
+ section->left = si->left;
+ section->width = si->width;
+ section->height = si->height;
+ section->angle = si->angle;
+ section->priority = si->priority;
+ for (ri = si->rows; ri != NULL; ri = (RowInfo *) ri->defs.next)
+ {
+ row = XkbAddGeomRow(section, ri->nKeys);
+ if (row == NULL)
+ {
+ WSGO("Couldn't allocate row in section\n");
+ ACTION1("Section %s is incomplete\n", scText(info->dpy, si));
+ return False;
+ }
+ row->top = ri->top;
+ row->left = ri->left;
+ row->vertical = ri->vertical;
+ for (ki = ri->keys; ki != NULL; ki = (KeyInfo *) ki->defs.next)
+ {
+ XkbColorPtr color;
+ if ((ki->defs.defined & _GK_Name) == 0)
+ {
+ ERROR3("Key %d of row %d in section %s has no name\n",
+ (int) ki->index, (int) ri->index,
+ scText(info->dpy, si));
+ ACTION1("Section %s ignored\n", scText(info->dpy, si));
+ return False;
+ }
+ key = XkbAddGeomKey(row);
+ if (key == NULL)
+ {
+ WSGO("Couldn't allocate key in row\n");
+ ACTION1("Section %s is incomplete\n", scText(info->dpy, si));
+ return False;
+ }
+ memcpy(key->name.name, ki->name, XkbKeyNameLength);
+ key->gap = ki->gap;
+ if (ki->shape == None)
+ key->shape_ndx = 0;
+ else
+ {
+ ShapeInfo *si;
+ si = FindShape(info, ki->shape, "key", keyText(ki));
+ if (!si)
+ return False;
+ key->shape_ndx = si->index;
+ }
+ if (ki->color != None)
+ color =
+ XkbAddGeomColor(geom,
+ XkbAtomGetString(NULL, ki->color),
+ geom->num_colors);
+ else
+ color = XkbAddGeomColor(geom, "white", geom->num_colors);
+ XkbSetKeyColor(geom, key, color);
+ }
+ }
+ if (si->doodads != NULL)
+ {
+ DoodadInfo *di;
+ for (di = si->doodads; di != NULL; di = (DoodadInfo *) di->defs.next)
+ {
+ CopyDoodadDef(geom, section, di, info);
+ }
+ }
+ if (si->overlays != NULL)
+ {
+ OverlayInfo *oi;
+ for (oi = si->overlays; oi != NULL;
+ oi = (OverlayInfo *) oi->defs.next)
+ {
+ CopyOverlayDef(geom, section, oi, info);
+ }
+ }
+ if (XkbComputeSectionBounds(geom, section))
+ {
+ /* 7/6/94 (ef) -- check for negative origin and translate */
+ if ((si->defs.defined & _GS_Width) == 0)
+ section->width = section->bounds.x2;
+ if ((si->defs.defined & _GS_Height) == 0)
+ section->height = section->bounds.y2;
}
return True;
}
@@ -3188,90 +3658,111 @@ Atom name;
/***====================================================================***/
Bool
-CompileGeometry(XkbFile *file,XkbFileInfo *result,unsigned merge)
-{
-GeometryInfo info;
-XkbDescPtr xkb;
-
- xkb= result->xkb;
- InitGeometryInfo(&info,file->id,merge);
- info.dpy= xkb->dpy;
- HandleGeometryFile(file,xkb,merge,&info);
-
- if (info.errorCount==0) {
- XkbGeometryPtr geom;
- XkbGeometrySizesRec sizes;
- bzero(&sizes,sizeof(sizes));
- sizes.which= XkbGeomAllMask;
- sizes.num_properties= info.nProps;
- sizes.num_colors= 8;
- sizes.num_shapes= info.nShapes;
- sizes.num_sections= info.nSections;
- sizes.num_doodads= info.nDoodads;
- if (XkbAllocGeometry(xkb,&sizes)!=Success) {
- WSGO("Couldn't allocate GeometryRec\n");
- ACTION("Geometry not compiled\n");
- return False;
- }
- geom= xkb->geom;
-
- geom->width_mm= info.widthMM;
- geom->height_mm= info.heightMM;
- if (info.name!=NULL) {
- geom->name= XkbInternAtom(xkb->dpy,info.name,False);
- if (XkbAllocNames(xkb,XkbGeometryNameMask,0,0)==Success)
- xkb->names->geometry= geom->name;
- }
- if (info.fontSpec!=None)
- geom->label_font= uStringDup(XkbAtomGetString(NULL,info.fontSpec));
- else geom->label_font= FontFromParts(info.font,info.fontWeight,
- info.fontSlant,info.fontSetWidth,
- info.fontVariant,
- info.fontSize,info.fontEncoding);
- XkbAddGeomColor(geom,"black",geom->num_colors);
- XkbAddGeomColor(geom,"white",geom->num_colors);
-
- if (info.baseColor==None)
- info.baseColor= XkbInternAtom(NULL,"white",False);
- if (info.labelColor==None)
- info.labelColor= XkbInternAtom(NULL,"black",False);
- geom->base_color=
- XkbAddGeomColor(geom,XkbAtomGetString(NULL,info.baseColor),geom->num_colors);
- geom->label_color=
- XkbAddGeomColor(geom,XkbAtomGetString(NULL,info.labelColor),geom->num_colors);
-
- if (info.props) {
- PropertyInfo *pi;
- for (pi= info.props;pi!=NULL;pi=(PropertyInfo *)pi->defs.next) {
- if (!XkbAddGeomProperty(geom,pi->name,pi->value))
- return False;
- }
- }
- if (info.shapes) {
- ShapeInfo *si;
- for (si= info.shapes;si!=NULL;si=(ShapeInfo *)si->defs.next) {
- if (!CopyShapeDef(xkb->dpy,geom,si))
- return False;
- }
- }
- if (info.sections) {
- SectionInfo *si;
- for (si= info.sections;si!=NULL;si=(SectionInfo *)si->defs.next) {
- if (!CopySectionDef(geom,si,&info))
- return False;
- }
- }
- if (info.doodads) {
- DoodadInfo *di;
- for (di= info.doodads;di!=NULL;di=(DoodadInfo *)di->defs.next) {
- if (!CopyDoodadDef(geom,NULL,di,&info))
- return False;
- }
- }
- if (info.aliases)
- ApplyAliases(xkb,True,&info.aliases);
- ClearGeometryInfo(&info);
- return True;
+CompileGeometry(XkbFile * file, XkbFileInfo * result, unsigned merge)
+{
+ GeometryInfo info;
+ XkbDescPtr xkb;
+
+ xkb = result->xkb;
+ InitGeometryInfo(&info, file->id, merge);
+ info.dpy = xkb->dpy;
+ HandleGeometryFile(file, xkb, merge, &info);
+
+ if (info.errorCount == 0)
+ {
+ XkbGeometryPtr geom;
+ XkbGeometrySizesRec sizes;
+ bzero(&sizes, sizeof(sizes));
+ sizes.which = XkbGeomAllMask;
+ sizes.num_properties = info.nProps;
+ sizes.num_colors = 8;
+ sizes.num_shapes = info.nShapes;
+ sizes.num_sections = info.nSections;
+ sizes.num_doodads = info.nDoodads;
+ if (XkbAllocGeometry(xkb, &sizes) != Success)
+ {
+ WSGO("Couldn't allocate GeometryRec\n");
+ ACTION("Geometry not compiled\n");
+ return False;
+ }
+ geom = xkb->geom;
+
+ geom->width_mm = info.widthMM;
+ geom->height_mm = info.heightMM;
+ if (info.name != NULL)
+ {
+ geom->name = XkbInternAtom(xkb->dpy, info.name, False);
+ if (XkbAllocNames(xkb, XkbGeometryNameMask, 0, 0) == Success)
+ xkb->names->geometry = geom->name;
+ }
+ if (info.fontSpec != None)
+ geom->label_font =
+ uStringDup(XkbAtomGetString(NULL, info.fontSpec));
+ else
+ geom->label_font = FontFromParts(info.font, info.fontWeight,
+ info.fontSlant,
+ info.fontSetWidth,
+ info.fontVariant,
+ info.fontSize,
+ info.fontEncoding);
+ XkbAddGeomColor(geom, "black", geom->num_colors);
+ XkbAddGeomColor(geom, "white", geom->num_colors);
+
+ if (info.baseColor == None)
+ info.baseColor = XkbInternAtom(NULL, "white", False);
+ if (info.labelColor == None)
+ info.labelColor = XkbInternAtom(NULL, "black", False);
+ geom->base_color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, info.baseColor),
+ geom->num_colors);
+ geom->label_color =
+ XkbAddGeomColor(geom, XkbAtomGetString(NULL, info.labelColor),
+ geom->num_colors);
+
+ if (info.props)
+ {
+ PropertyInfo *pi;
+ for (pi = info.props; pi != NULL;
+ pi = (PropertyInfo *) pi->defs.next)
+ {
+ if (!XkbAddGeomProperty(geom, pi->name, pi->value))
+ return False;
+ }
+ }
+ if (info.shapes)
+ {
+ ShapeInfo *si;
+ for (si = info.shapes; si != NULL;
+ si = (ShapeInfo *) si->defs.next)
+ {
+ if (!CopyShapeDef(xkb->dpy, geom, si))
+ return False;
+ }
+ }
+ if (info.sections)
+ {
+ SectionInfo *si;
+ for (si = info.sections; si != NULL;
+ si = (SectionInfo *) si->defs.next)
+ {
+ if (!CopySectionDef(geom, si, &info))
+ return False;
+ }
+ }
+ if (info.doodads)
+ {
+ DoodadInfo *di;
+ for (di = info.doodads; di != NULL;
+ di = (DoodadInfo *) di->defs.next)
+ {
+ if (!CopyDoodadDef(geom, NULL, di, &info))
+ return False;
+ }
+ }
+ if (info.aliases)
+ ApplyAliases(xkb, True, &info.aliases);
+ ClearGeometryInfo(&info);
+ return True;
}
return False;
}
diff --git a/app/xkbcomp/indicators.c b/app/xkbcomp/indicators.c
index 3061f3e27..d4a362fb8 100644
--- a/app/xkbcomp/indicators.c
+++ b/app/xkbcomp/indicators.c
@@ -1,4 +1,3 @@
-/* $Xorg: indicators.c,v 1.3 2000/08/17 19:54:31 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/indicators.c,v 1.4 2001/01/17 23:45:43 dawes Exp $ */
#include "xkbcomp.h"
#include "misc.h"
@@ -47,439 +45,531 @@
/***====================================================================***/
void
-ClearIndicatorMapInfo(Display *dpy,LEDInfo *info)
+ClearIndicatorMapInfo(Display * dpy, LEDInfo * info)
{
- info->name= XkbInternAtom(dpy,"default",False);
- info->indicator= _LED_NotBound;
- info->flags= info->which_mods= info->real_mods= 0;
- info->vmods= 0;
- info->which_groups= info->groups= 0;
- info->ctrls= 0;
+ info->name = XkbInternAtom(dpy, "default", False);
+ info->indicator = _LED_NotBound;
+ info->flags = info->which_mods = info->real_mods = 0;
+ info->vmods = 0;
+ info->which_groups = info->groups = 0;
+ info->ctrls = 0;
return;
}
LEDInfo *
-AddIndicatorMap(LEDInfo *oldLEDs,LEDInfo *new)
+AddIndicatorMap(LEDInfo * oldLEDs, LEDInfo * new)
{
-LEDInfo *old,*last;
-unsigned collide;
+ LEDInfo *old, *last;
+ unsigned collide;
- last= NULL;
- for (old=oldLEDs;old!=NULL;old=(LEDInfo *)old->defs.next) {
- if (old->name==new->name) {
- if ((old->real_mods==new->real_mods)&&
- (old->vmods==new->vmods)&&
- (old->groups==new->groups)&&
- (old->ctrls==new->ctrls)&&
- (old->which_mods==new->which_mods)&&
- (old->which_groups==new->which_groups)) {
- old->defs.defined|= new->defs.defined;
- return oldLEDs;
- }
- if (new->defs.merge==MergeReplace) {
- CommonInfo *next= old->defs.next;
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Map for indicator %s redefined\n",
- XkbAtomText(NULL,old->name,XkbMessage));
- ACTION("Earlier definition ignored\n");
- }
- *old= *new;
- old->defs.next= next;
- return oldLEDs;
- }
- collide= 0;
- if (UseNewField(_LED_Index,&old->defs,&new->defs,&collide)) {
- old->indicator= new->indicator;
- old->defs.defined|= _LED_Index;
- }
- if (UseNewField(_LED_Mods,&old->defs,&new->defs,&collide)) {
- old->which_mods= new->which_mods;
- old->real_mods= new->real_mods;
- old->vmods= new->vmods;
- old->defs.defined|= _LED_Mods;
- }
- if (UseNewField(_LED_Groups,&old->defs,&new->defs,&collide)) {
- old->which_groups= new->which_groups;
- old->groups= new->groups;
- old->defs.defined|= _LED_Groups;
- }
- if (UseNewField(_LED_Ctrls,&old->defs,&new->defs,&collide)) {
- old->ctrls= new->ctrls;
- old->defs.defined|= _LED_Ctrls;
- }
- if (UseNewField(_LED_Explicit,&old->defs,&new->defs,&collide)) {
- old->flags&= ~XkbIM_NoExplicit;
- old->flags|= (new->flags&XkbIM_NoExplicit);
- old->defs.defined|= _LED_Explicit;
- }
- if (UseNewField(_LED_Automatic,&old->defs,&new->defs,&collide)) {
- old->flags&= ~XkbIM_NoAutomatic;
- old->flags|= (new->flags&XkbIM_NoAutomatic);
- old->defs.defined|= _LED_Automatic;
- }
- if (UseNewField(_LED_DrivesKbd,&old->defs,&new->defs,&collide)) {
- old->flags&= ~XkbIM_LEDDrivesKB;
- old->flags|= (new->flags&XkbIM_LEDDrivesKB);
- old->defs.defined|= _LED_DrivesKbd;
- }
- if (collide) {
- WARN1("Map for indicator %s redefined\n",
- XkbAtomText(NULL,old->name,XkbMessage));
- ACTION1("Using %s definition for duplicate fields\n",
- (new->defs.merge==MergeAugment?"first":"last"));
- }
- return oldLEDs;
- }
- if (old->defs.next==NULL)
- last= old;
+ last = NULL;
+ for (old = oldLEDs; old != NULL; old = (LEDInfo *) old->defs.next)
+ {
+ if (old->name == new->name)
+ {
+ if ((old->real_mods == new->real_mods) &&
+ (old->vmods == new->vmods) &&
+ (old->groups == new->groups) &&
+ (old->ctrls == new->ctrls) &&
+ (old->which_mods == new->which_mods) &&
+ (old->which_groups == new->which_groups))
+ {
+ old->defs.defined |= new->defs.defined;
+ return oldLEDs;
+ }
+ if (new->defs.merge == MergeReplace)
+ {
+ CommonInfo *next = old->defs.next;
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Map for indicator %s redefined\n",
+ XkbAtomText(NULL, old->name, XkbMessage));
+ ACTION("Earlier definition ignored\n");
+ }
+ *old = *new;
+ old->defs.next = next;
+ return oldLEDs;
+ }
+ collide = 0;
+ if (UseNewField(_LED_Index, &old->defs, &new->defs, &collide))
+ {
+ old->indicator = new->indicator;
+ old->defs.defined |= _LED_Index;
+ }
+ if (UseNewField(_LED_Mods, &old->defs, &new->defs, &collide))
+ {
+ old->which_mods = new->which_mods;
+ old->real_mods = new->real_mods;
+ old->vmods = new->vmods;
+ old->defs.defined |= _LED_Mods;
+ }
+ if (UseNewField(_LED_Groups, &old->defs, &new->defs, &collide))
+ {
+ old->which_groups = new->which_groups;
+ old->groups = new->groups;
+ old->defs.defined |= _LED_Groups;
+ }
+ if (UseNewField(_LED_Ctrls, &old->defs, &new->defs, &collide))
+ {
+ old->ctrls = new->ctrls;
+ old->defs.defined |= _LED_Ctrls;
+ }
+ if (UseNewField(_LED_Explicit, &old->defs, &new->defs, &collide))
+ {
+ old->flags &= ~XkbIM_NoExplicit;
+ old->flags |= (new->flags & XkbIM_NoExplicit);
+ old->defs.defined |= _LED_Explicit;
+ }
+ if (UseNewField(_LED_Automatic, &old->defs, &new->defs, &collide))
+ {
+ old->flags &= ~XkbIM_NoAutomatic;
+ old->flags |= (new->flags & XkbIM_NoAutomatic);
+ old->defs.defined |= _LED_Automatic;
+ }
+ if (UseNewField(_LED_DrivesKbd, &old->defs, &new->defs, &collide))
+ {
+ old->flags &= ~XkbIM_LEDDrivesKB;
+ old->flags |= (new->flags & XkbIM_LEDDrivesKB);
+ old->defs.defined |= _LED_DrivesKbd;
+ }
+ if (collide)
+ {
+ WARN1("Map for indicator %s redefined\n",
+ XkbAtomText(NULL, old->name, XkbMessage));
+ ACTION1("Using %s definition for duplicate fields\n",
+ (new->defs.merge == MergeAugment ? "first" : "last"));
+ }
+ return oldLEDs;
+ }
+ if (old->defs.next == NULL)
+ last = old;
}
/* new definition */
- old= uTypedAlloc(LEDInfo);
- if (!old) {
- WSGO("Couldn't allocate indicator map\n");
- ACTION1("Map for indicator %s not compiled\n",
- XkbAtomText(NULL,new->name,XkbMessage));
- return False;
+ old = uTypedAlloc(LEDInfo);
+ if (!old)
+ {
+ WSGO("Couldn't allocate indicator map\n");
+ ACTION1("Map for indicator %s not compiled\n",
+ XkbAtomText(NULL, new->name, XkbMessage));
+ return NULL;
}
- *old= *new;
- old->defs.next= NULL;
- if (last) {
- last->defs.next= &old->defs;
- return oldLEDs;
+ *old = *new;
+ old->defs.next = NULL;
+ if (last)
+ {
+ last->defs.next = &old->defs;
+ return oldLEDs;
}
return old;
}
-LookupEntry modComponentNames[] = {
- { "base", XkbIM_UseBase },
- { "latched", XkbIM_UseLatched },
- { "locked", XkbIM_UseLocked },
- { "effective", XkbIM_UseEffective },
- { "compat", XkbIM_UseCompat },
- { "any", XkbIM_UseAnyMods },
- { "none", 0 },
- { NULL, 0 }
+static LookupEntry modComponentNames[] = {
+ {"base", XkbIM_UseBase}
+ ,
+ {"latched", XkbIM_UseLatched}
+ ,
+ {"locked", XkbIM_UseLocked}
+ ,
+ {"effective", XkbIM_UseEffective}
+ ,
+ {"compat", XkbIM_UseCompat}
+ ,
+ {"any", XkbIM_UseAnyMods}
+ ,
+ {"none", 0}
+ ,
+ {NULL, 0}
};
-LookupEntry groupComponentNames[] = {
- { "base", XkbIM_UseBase },
- { "latched", XkbIM_UseLatched },
- { "locked", XkbIM_UseLocked },
- { "effective", XkbIM_UseEffective },
- { "any", XkbIM_UseAnyGroup },
- { "none", 0 },
- { NULL, 0 }
+static LookupEntry groupComponentNames[] = {
+ {"base", XkbIM_UseBase}
+ ,
+ {"latched", XkbIM_UseLatched}
+ ,
+ {"locked", XkbIM_UseLocked}
+ ,
+ {"effective", XkbIM_UseEffective}
+ ,
+ {"any", XkbIM_UseAnyGroup}
+ ,
+ {"none", 0}
+ ,
+ {NULL, 0}
};
int
-SetIndicatorMapField( LEDInfo * led,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value)
+SetIndicatorMapField(LEDInfo * led,
+ XkbDescPtr xkb,
+ char *field, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult rtrn;
-Bool ok;
+ ExprResult rtrn;
+ Bool ok;
- ok= True;
- if ((uStrCaseCmp(field,"modifiers")==0)||(uStrCaseCmp(field,"mods")==0)) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveModMask(value,&rtrn,LookupVModMask,(XPointer)xkb))
- return ReportIndicatorBadType(xkb->dpy,led,field,"modifier mask");
- led->real_mods= rtrn.uval&0xff;
- led->vmods= (rtrn.uval>>8)&0xff;
- led->defs.defined|= _LED_Mods;
+ ok = True;
+ if ((uStrCaseCmp(field, "modifiers") == 0)
+ || (uStrCaseCmp(field, "mods") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveModMask(value, &rtrn, LookupVModMask, (XPointer) xkb))
+ return ReportIndicatorBadType(xkb->dpy, led, field,
+ "modifier mask");
+ led->real_mods = rtrn.uval & 0xff;
+ led->vmods = (rtrn.uval >> 8) & 0xff;
+ led->defs.defined |= _LED_Mods;
}
- else if (uStrCaseCmp(field,"groups")==0) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,(XPointer)groupNames))
- return ReportIndicatorBadType(xkb->dpy,led,field,"group mask");
- led->groups= rtrn.uval;
- led->defs.defined|= _LED_Groups;
+ else if (uStrCaseCmp(field, "groups") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveMask
+ (value, &rtrn, SimpleLookup, (XPointer) groupNames))
+ return ReportIndicatorBadType(xkb->dpy, led, field, "group mask");
+ led->groups = rtrn.uval;
+ led->defs.defined |= _LED_Groups;
}
- else if ((uStrCaseCmp(field,"controls")==0)||
- (uStrCaseCmp(field,"ctrls")==0)) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,(XPointer)ctrlNames))
- return ReportIndicatorBadType(xkb->dpy,led,field,"controls mask");
- led->ctrls= rtrn.uval;
- led->defs.defined|= _LED_Ctrls;
+ else if ((uStrCaseCmp(field, "controls") == 0) ||
+ (uStrCaseCmp(field, "ctrls") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveMask
+ (value, &rtrn, SimpleLookup, (XPointer) ctrlNames))
+ return ReportIndicatorBadType(xkb->dpy, led, field,
+ "controls mask");
+ led->ctrls = rtrn.uval;
+ led->defs.defined |= _LED_Ctrls;
}
- else if (uStrCaseCmp(field,"allowexplicit")==0) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveBoolean(value,&rtrn,NULL,NULL))
- return ReportIndicatorBadType(xkb->dpy,led,field,"boolean");
- if (rtrn.uval) led->flags&= ~XkbIM_NoExplicit;
- else led->flags|= XkbIM_NoExplicit;
- led->defs.defined|= _LED_Explicit;
+ else if (uStrCaseCmp(field, "allowexplicit") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveBoolean(value, &rtrn, NULL, NULL))
+ return ReportIndicatorBadType(xkb->dpy, led, field, "boolean");
+ if (rtrn.uval)
+ led->flags &= ~XkbIM_NoExplicit;
+ else
+ led->flags |= XkbIM_NoExplicit;
+ led->defs.defined |= _LED_Explicit;
}
- else if ((uStrCaseCmp(field,"whichmodstate")==0)||
- (uStrCaseCmp(field,"whichmodifierstate")==0)) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,
- (XPointer)modComponentNames)) {
- return ReportIndicatorBadType(xkb->dpy,led,field,
- "mask of modifier state components");
- }
- led->which_mods= rtrn.uval;
+ else if ((uStrCaseCmp(field, "whichmodstate") == 0) ||
+ (uStrCaseCmp(field, "whichmodifierstate") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveMask(value, &rtrn, SimpleLookup,
+ (XPointer) modComponentNames))
+ {
+ return ReportIndicatorBadType(xkb->dpy, led, field,
+ "mask of modifier state components");
+ }
+ led->which_mods = rtrn.uval;
}
- else if (uStrCaseCmp(field,"whichgroupstate")==0) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveMask(value,&rtrn,SimpleLookup,
- (XPointer)groupComponentNames)){
- return ReportIndicatorBadType(xkb->dpy,led,field,
- "mask of group state components");
- }
- led->which_groups= rtrn.uval;
- }
- else if ((uStrCaseCmp(field,"driveskbd")==0)||
- (uStrCaseCmp(field,"driveskeyboard")==0)||
- (uStrCaseCmp(field,"leddriveskbd")==0)||
- (uStrCaseCmp(field,"leddriveskeyboard")==0)||
- (uStrCaseCmp(field,"indicatordriveskbd")==0)||
- (uStrCaseCmp(field,"indicatordriveskeyboard")==0)) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveBoolean(value,&rtrn,NULL,NULL))
- return ReportIndicatorBadType(xkb->dpy,led,field,"boolean");
- if (rtrn.uval) led->flags|= XkbIM_LEDDrivesKB;
- else led->flags&= ~XkbIM_LEDDrivesKB;
- led->defs.defined|= _LED_DrivesKbd;
+ else if (uStrCaseCmp(field, "whichgroupstate") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveMask(value, &rtrn, SimpleLookup,
+ (XPointer) groupComponentNames))
+ {
+ return ReportIndicatorBadType(xkb->dpy, led, field,
+ "mask of group state components");
+ }
+ led->which_groups = rtrn.uval;
}
- else if (uStrCaseCmp(field,"index")==0) {
- if (arrayNdx!=NULL)
- return ReportIndicatorNotArray(xkb->dpy,led,field);
- if (!ExprResolveInteger(value,&rtrn,NULL,NULL))
- return ReportIndicatorBadType(xkb->dpy,led,field,"indicator index");
- if ((rtrn.uval<1)||(rtrn.uval>32)) {
- ERROR2("Illegal indicator index %d (range 1..%d)\n",rtrn.uval,
- XkbNumIndicators);
- ACTION1("Index definition for %s indicator ignored\n",
- XkbAtomText(NULL,led->name,XkbMessage));
- return False;
- }
- led->indicator= rtrn.uval;
- led->defs.defined|= _LED_Index;
+ else if ((uStrCaseCmp(field, "driveskbd") == 0) ||
+ (uStrCaseCmp(field, "driveskeyboard") == 0) ||
+ (uStrCaseCmp(field, "leddriveskbd") == 0) ||
+ (uStrCaseCmp(field, "leddriveskeyboard") == 0) ||
+ (uStrCaseCmp(field, "indicatordriveskbd") == 0) ||
+ (uStrCaseCmp(field, "indicatordriveskeyboard") == 0))
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveBoolean(value, &rtrn, NULL, NULL))
+ return ReportIndicatorBadType(xkb->dpy, led, field, "boolean");
+ if (rtrn.uval)
+ led->flags |= XkbIM_LEDDrivesKB;
+ else
+ led->flags &= ~XkbIM_LEDDrivesKB;
+ led->defs.defined |= _LED_DrivesKbd;
}
- else {
- ERROR2("Unknown field %s in map for %s indicator\n",field,
- XkbAtomText(NULL,led->name,XkbMessage));
- ACTION("Definition ignored\n");
- ok= False;
+ else if (uStrCaseCmp(field, "index") == 0)
+ {
+ if (arrayNdx != NULL)
+ return ReportIndicatorNotArray(xkb->dpy, led, field);
+ if (!ExprResolveInteger(value, &rtrn, NULL, NULL))
+ return ReportIndicatorBadType(xkb->dpy, led, field,
+ "indicator index");
+ if ((rtrn.uval < 1) || (rtrn.uval > 32))
+ {
+ ERROR2("Illegal indicator index %d (range 1..%d)\n",
+ rtrn.uval, XkbNumIndicators);
+ ACTION1("Index definition for %s indicator ignored\n",
+ XkbAtomText(NULL, led->name, XkbMessage));
+ return False;
+ }
+ led->indicator = rtrn.uval;
+ led->defs.defined |= _LED_Index;
+ }
+ else
+ {
+ ERROR2("Unknown field %s in map for %s indicator\n", field,
+ XkbAtomText(NULL, led->name, XkbMessage));
+ ACTION("Definition ignored\n");
+ ok = False;
}
return ok;
}
LEDInfo *
-HandleIndicatorMapDef( IndicatorMapDef * def,
- XkbDescPtr xkb,
- LEDInfo * dflt,
- LEDInfo * oldLEDs,
- unsigned merge)
+HandleIndicatorMapDef(IndicatorMapDef * def,
+ XkbDescPtr xkb,
+ LEDInfo * dflt, LEDInfo * oldLEDs, unsigned merge)
{
-LEDInfo led,*rtrn;
-VarDef * var;
-Bool ok;
-
- if (def->merge!=MergeDefault)
- merge= def->merge;
+ LEDInfo led, *rtrn;
+ VarDef *var;
+ Bool ok;
- led= *dflt;
- led.defs.merge= merge;
- led.name= def->name;
+ if (def->merge != MergeDefault)
+ merge = def->merge;
- ok= True;
- for (var= def->body;var!=NULL;var= (VarDef *)var->common.next) {
- ExprResult elem,field;
- ExprDef * arrayNdx;
- if (!ExprResolveLhs(var->name,&elem,&field,&arrayNdx)) {
- ok= False;
- continue;
- }
- if (elem.str!=NULL) {
- ERROR1("Cannot set defaults for \"%s\" element in indicator map\n",
- elem.str);
- ACTION2("Assignment to %s.%s ignored\n",elem.str,field.str);
- ok= False;
- }
- else {
- ok=SetIndicatorMapField(&led,xkb,field.str,arrayNdx,var->value)&&ok;
- }
+ led = *dflt;
+ led.defs.merge = merge;
+ led.name = def->name;
+
+ ok = True;
+ for (var = def->body; var != NULL; var = (VarDef *) var->common.next)
+ {
+ ExprResult elem, field;
+ ExprDef *arrayNdx;
+ if (!ExprResolveLhs(var->name, &elem, &field, &arrayNdx))
+ {
+ ok = False;
+ continue;
+ }
+ if (elem.str != NULL)
+ {
+ ERROR1
+ ("Cannot set defaults for \"%s\" element in indicator map\n",
+ elem.str);
+ ACTION2("Assignment to %s.%s ignored\n", elem.str, field.str);
+ ok = False;
+ }
+ else
+ {
+ ok = SetIndicatorMapField(&led, xkb, field.str, arrayNdx,
+ var->value) && ok;
+ }
}
- if (ok) {
- rtrn= AddIndicatorMap(oldLEDs,&led);
- return rtrn;
+ if (ok)
+ {
+ rtrn = AddIndicatorMap(oldLEDs, &led);
+ return rtrn;
}
return NULL;
}
-Bool
-CopyIndicatorMapDefs(XkbFileInfo *result,LEDInfo *leds,LEDInfo **unboundRtrn)
+Bool
+CopyIndicatorMapDefs(XkbFileInfo * result, LEDInfo * leds,
+ LEDInfo ** unboundRtrn)
{
-LEDInfo * led,*next;
-LEDInfo * unbound,*last;
-XkbDescPtr xkb;
+ LEDInfo *led, *next;
+ LEDInfo *unbound, *last;
+ XkbDescPtr xkb;
- xkb= result->xkb;
- if (XkbAllocNames(xkb,XkbIndicatorNamesMask,0,0)!=Success) {
- WSGO("Couldn't allocate names\n");
- ACTION("Indicator names may be incorrect\n");
+ xkb = result->xkb;
+ if (XkbAllocNames(xkb, XkbIndicatorNamesMask, 0, 0) != Success)
+ {
+ WSGO("Couldn't allocate names\n");
+ ACTION("Indicator names may be incorrect\n");
}
- if (XkbAllocIndicatorMaps(xkb)!=Success) {
- WSGO("Can't allocate indicator maps\n");
- ACTION("Indicator map definitions may be lost\n");
- return False;
+ if (XkbAllocIndicatorMaps(xkb) != Success)
+ {
+ WSGO("Can't allocate indicator maps\n");
+ ACTION("Indicator map definitions may be lost\n");
+ return False;
}
- last= unbound= (unboundRtrn?*unboundRtrn:NULL);
- while ((last!=NULL) && (last->defs.next!=NULL)) {
- last= (LEDInfo *)last->defs.next;
+ last = unbound = (unboundRtrn ? *unboundRtrn : NULL);
+ while ((last != NULL) && (last->defs.next != NULL))
+ {
+ last = (LEDInfo *) last->defs.next;
}
- for (led=leds;led!=NULL;led=next) {
- next= (LEDInfo *)led->defs.next;
- if ((led->groups!=0)&&(led->which_groups==0))
- led->which_groups= XkbIM_UseEffective;
- if ((led->which_mods==0)&&((led->real_mods)||(led->vmods)))
- led->which_mods= XkbIM_UseEffective;
- if ((led->indicator==_LED_NotBound)||(!xkb->indicators)) {
- if (unboundRtrn!=NULL) {
- led->defs.next= NULL;
- if (last!=NULL) last->defs.next= (CommonInfo *)led;
- else unbound= led;
- last= led;
- }
- else uFree(led);
- }
- else {
- register XkbIndicatorMapPtr im;
- im= &xkb->indicators->maps[led->indicator-1];
- im->flags= led->flags;
- im->which_groups= led->which_groups;
- im->groups= led->groups;
- im->which_mods= led->which_mods;
- im->mods.mask= led->real_mods;
- im->mods.real_mods= led->real_mods;
- im->mods.vmods= led->vmods;
- im->ctrls= led->ctrls;
- if (xkb->names!=NULL)
- xkb->names->indicators[led->indicator-1]= led->name;
- uFree(led);
- }
+ for (led = leds; led != NULL; led = next)
+ {
+ next = (LEDInfo *) led->defs.next;
+ if ((led->groups != 0) && (led->which_groups == 0))
+ led->which_groups = XkbIM_UseEffective;
+ if ((led->which_mods == 0) && ((led->real_mods) || (led->vmods)))
+ led->which_mods = XkbIM_UseEffective;
+ if ((led->indicator == _LED_NotBound) || (!xkb->indicators))
+ {
+ if (unboundRtrn != NULL)
+ {
+ led->defs.next = NULL;
+ if (last != NULL)
+ last->defs.next = (CommonInfo *) led;
+ else
+ unbound = led;
+ last = led;
+ }
+ else
+ uFree(led);
+ }
+ else
+ {
+ register XkbIndicatorMapPtr im;
+ im = &xkb->indicators->maps[led->indicator - 1];
+ im->flags = led->flags;
+ im->which_groups = led->which_groups;
+ im->groups = led->groups;
+ im->which_mods = led->which_mods;
+ im->mods.mask = led->real_mods;
+ im->mods.real_mods = led->real_mods;
+ im->mods.vmods = led->vmods;
+ im->ctrls = led->ctrls;
+ if (xkb->names != NULL)
+ xkb->names->indicators[led->indicator - 1] = led->name;
+ uFree(led);
+ }
}
- if (unboundRtrn!=NULL) {
- *unboundRtrn= unbound;
+ if (unboundRtrn != NULL)
+ {
+ *unboundRtrn = unbound;
}
return True;
}
Bool
-BindIndicators( XkbFileInfo * result,
- Bool force,
- LEDInfo * unbound,
- LEDInfo ** unboundRtrn)
+BindIndicators(XkbFileInfo * result,
+ Bool force, LEDInfo * unbound, LEDInfo ** unboundRtrn)
{
-XkbDescPtr xkb;
-register int i;
-register LEDInfo *led,*next,*last;
+ XkbDescPtr xkb;
+ register int i;
+ register LEDInfo *led, *next, *last;
- xkb= result->xkb;
- if (xkb->names!=NULL) {
- for (led=unbound;led!=NULL;led= (LEDInfo *)led->defs.next) {
- if (led->indicator==_LED_NotBound) {
- for (i=0;i<XkbNumIndicators;i++) {
- if (xkb->names->indicators[i]==led->name) {
- led->indicator= i+1;
- break;
- }
- }
- }
- }
- if (force) {
- for (led=unbound;led!=NULL;led= (LEDInfo *)led->defs.next) {
- if (led->indicator==_LED_NotBound) {
- for (i=0;i<XkbNumIndicators;i++) {
- if (xkb->names->indicators[i]==None) {
- xkb->names->indicators[i]= led->name;
- led->indicator= i+1;
- xkb->indicators->phys_indicators&= ~(1<<i);
- break;
- }
- }
- if (led->indicator==_LED_NotBound) {
- ERROR("No unnamed indicators found\n");
- ACTION1("Virtual indicator map \"%s\" not bound\n",
- XkbAtomGetString(xkb->dpy,led->name));
- continue;
- }
- }
- }
- }
+ xkb = result->xkb;
+ if (xkb->names != NULL)
+ {
+ for (led = unbound; led != NULL; led = (LEDInfo *) led->defs.next)
+ {
+ if (led->indicator == _LED_NotBound)
+ {
+ for (i = 0; i < XkbNumIndicators; i++)
+ {
+ if (xkb->names->indicators[i] == led->name)
+ {
+ led->indicator = i + 1;
+ break;
+ }
+ }
+ }
+ }
+ if (force)
+ {
+ for (led = unbound; led != NULL; led = (LEDInfo *) led->defs.next)
+ {
+ if (led->indicator == _LED_NotBound)
+ {
+ for (i = 0; i < XkbNumIndicators; i++)
+ {
+ if (xkb->names->indicators[i] == None)
+ {
+ xkb->names->indicators[i] = led->name;
+ led->indicator = i + 1;
+ xkb->indicators->phys_indicators &= ~(1 << i);
+ break;
+ }
+ }
+ if (led->indicator == _LED_NotBound)
+ {
+ ERROR("No unnamed indicators found\n");
+ ACTION1
+ ("Virtual indicator map \"%s\" not bound\n",
+ XkbAtomGetString(xkb->dpy, led->name));
+ continue;
+ }
+ }
+ }
+ }
}
- for (last=NULL,led=unbound;led!=NULL;led= next) {
- next= (LEDInfo *)led->defs.next;
- if (led->indicator==_LED_NotBound) {
- if (force) {
- unbound= next;
- uFree(led);
- }
- else {
- if (last)
- last->defs.next= &led->defs;
- else unbound= led;
- last= led;
- }
- }
- else {
- if ((xkb->names!=NULL)&&
- (xkb->names->indicators[led->indicator-1]!=led->name)) {
- Atom old= xkb->names->indicators[led->indicator-1];
- ERROR1("Multiple names bound to indicator %d\n",(unsigned int)led->indicator);
- ACTION2("Using %s, ignoring %s\n",
- XkbAtomGetString(xkb->dpy,old),
- XkbAtomGetString(xkb->dpy,led->name));
- led->indicator= _LED_NotBound;
- if (force) {
- uFree(led);
- unbound= next;
- }
- else {
- if (last)
- last->defs.next= &led->defs;
- else unbound= led;
- last= led;
- }
- }
- else {
- XkbIndicatorMapPtr map;
- map= &xkb->indicators->maps[led->indicator-1];
- map->flags= led->flags;
- map->which_groups= led->which_groups;
- map->groups= led->groups;
- map->which_mods= led->which_mods;
- map->mods.mask= led->real_mods;
- map->mods.real_mods= led->real_mods;
- map->mods.vmods= led->vmods;
- map->ctrls= led->ctrls;
- if (last) last->defs.next= &next->defs;
- else unbound= next;
- led->defs.next= NULL;
- uFree(led);
- }
- }
+ for (last = NULL, led = unbound; led != NULL; led = next)
+ {
+ next = (LEDInfo *) led->defs.next;
+ if (led->indicator == _LED_NotBound)
+ {
+ if (force)
+ {
+ unbound = next;
+ uFree(led);
+ }
+ else
+ {
+ if (last)
+ last->defs.next = &led->defs;
+ else
+ unbound = led;
+ last = led;
+ }
+ }
+ else
+ {
+ if ((xkb->names != NULL) &&
+ (xkb->names->indicators[led->indicator - 1] != led->name))
+ {
+ Atom old = xkb->names->indicators[led->indicator - 1];
+ ERROR1("Multiple names bound to indicator %d\n",
+ (unsigned int) led->indicator);
+ ACTION2("Using %s, ignoring %s\n",
+ XkbAtomGetString(xkb->dpy, old),
+ XkbAtomGetString(xkb->dpy, led->name));
+ led->indicator = _LED_NotBound;
+ if (force)
+ {
+ uFree(led);
+ unbound = next;
+ }
+ else
+ {
+ if (last)
+ last->defs.next = &led->defs;
+ else
+ unbound = led;
+ last = led;
+ }
+ }
+ else
+ {
+ XkbIndicatorMapPtr map;
+ map = &xkb->indicators->maps[led->indicator - 1];
+ map->flags = led->flags;
+ map->which_groups = led->which_groups;
+ map->groups = led->groups;
+ map->which_mods = led->which_mods;
+ map->mods.mask = led->real_mods;
+ map->mods.real_mods = led->real_mods;
+ map->mods.vmods = led->vmods;
+ map->ctrls = led->ctrls;
+ if (last)
+ last->defs.next = &next->defs;
+ else
+ unbound = next;
+ led->defs.next = NULL;
+ uFree(led);
+ }
+ }
}
- if (unboundRtrn) {
- *unboundRtrn= unbound;
+ if (unboundRtrn)
+ {
+ *unboundRtrn = unbound;
}
- else if (unbound) {
- for (led=unbound;led!=NULL;led=next) {
- next= (LEDInfo *)led->defs.next;
- uFree(led);
- }
+ else if (unbound)
+ {
+ for (led = unbound; led != NULL; led = next)
+ {
+ next = (LEDInfo *) led->defs.next;
+ uFree(led);
+ }
}
return True;
}
diff --git a/app/xkbcomp/indicators.h b/app/xkbcomp/indicators.h
index 041cacc17..35ae38a4c 100644
--- a/app/xkbcomp/indicators.h
+++ b/app/xkbcomp/indicators.h
@@ -1,4 +1,3 @@
-/* $Xorg: indicators.h,v 1.3 2000/08/17 19:54:32 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
#ifndef INDICATORS_H
#define INDICATORS_H 1
@@ -39,57 +37,52 @@
#define _LED_NotBound 255
-typedef struct _LEDInfo {
- CommonInfo defs;
- Atom name;
- unsigned char indicator;
- unsigned char flags;
- unsigned char which_mods;
- unsigned char real_mods;
- unsigned short vmods;
- unsigned char which_groups;
- unsigned char groups;
- unsigned int ctrls;
+typedef struct _LEDInfo
+{
+ CommonInfo defs;
+ Atom name;
+ unsigned char indicator;
+ unsigned char flags;
+ unsigned char which_mods;
+ unsigned char real_mods;
+ unsigned short vmods;
+ unsigned char which_groups;
+ unsigned char groups;
+ unsigned int ctrls;
} LEDInfo;
-extern void ClearIndicatorMapInfo(
- Display * /* dpy */,
- LEDInfo * /* info */
-);
+extern void ClearIndicatorMapInfo(Display * /* dpy */ ,
+ LEDInfo * /* info */
+ );
-extern LEDInfo *AddIndicatorMap(
- LEDInfo * /* oldLEDs */,
- LEDInfo * /* newLED */
-);
+extern LEDInfo *AddIndicatorMap(LEDInfo * /* oldLEDs */ ,
+ LEDInfo * /* newLED */
+ );
-extern int SetIndicatorMapField(
- LEDInfo * /* led */,
- XkbDescPtr /* xkb */,
- char * /* field */,
- ExprDef * /* arrayNdx */,
- ExprDef * /* value */
-);
+extern int SetIndicatorMapField(LEDInfo * /* led */ ,
+ XkbDescPtr /* xkb */ ,
+ char * /* field */ ,
+ ExprDef * /* arrayNdx */ ,
+ ExprDef * /* value */
+ );
-extern LEDInfo *HandleIndicatorMapDef(
- IndicatorMapDef * /* stmt */,
- XkbDescPtr /* xkb */,
- LEDInfo * /* dflt */,
- LEDInfo * /* oldLEDs */,
- unsigned /* mergeMode */
-);
+extern LEDInfo *HandleIndicatorMapDef(IndicatorMapDef * /* stmt */ ,
+ XkbDescPtr /* xkb */ ,
+ LEDInfo * /* dflt */ ,
+ LEDInfo * /* oldLEDs */ ,
+ unsigned /* mergeMode */
+ );
-extern Bool CopyIndicatorMapDefs(
- XkbFileInfo * /* result */,
- LEDInfo * /* leds */,
- LEDInfo ** /* unboundRtrn */
-);
+extern Bool CopyIndicatorMapDefs(XkbFileInfo * /* result */ ,
+ LEDInfo * /* leds */ ,
+ LEDInfo ** /* unboundRtrn */
+ );
-extern Bool BindIndicators(
- XkbFileInfo * /* result */,
- Bool /* force */,
- LEDInfo * /* unbound */,
- LEDInfo ** /* unboundRtrn */
-);
+extern Bool BindIndicators(XkbFileInfo * /* result */ ,
+ Bool /* force */ ,
+ LEDInfo * /* unbound */ ,
+ LEDInfo ** /* unboundRtrn */
+ );
#endif /* INDICATORS_H */
diff --git a/app/xkbcomp/keycodes.c b/app/xkbcomp/keycodes.c
index a86592e4d..13579ec1a 100644
--- a/app/xkbcomp/keycodes.c
+++ b/app/xkbcomp/keycodes.c
@@ -1,4 +1,3 @@
-/* $Xorg: keycodes.c,v 1.4 2000/08/17 19:54:32 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
#include "xkbcomp.h"
#include "tokens.h"
@@ -34,715 +32,862 @@
#include "alias.h"
char *
-longText(unsigned long val,unsigned format)
+longText(unsigned long val, unsigned format)
{
-char buf[4];
+ char buf[4];
- LongToKeyName(val,buf);
- return XkbKeyNameText(buf,format);
+ LongToKeyName(val, buf);
+ return XkbKeyNameText(buf, format);
}
/***====================================================================***/
void
-LongToKeyName(unsigned long val,char *name)
+LongToKeyName(unsigned long val, char *name)
{
- name[0]= ((val>>24)&0xff);
- name[1]= ((val>>16)&0xff);
- name[2]= ((val>>8)&0xff);
- name[3]= (val&0xff);
+ name[0] = ((val >> 24) & 0xff);
+ name[1] = ((val >> 16) & 0xff);
+ name[2] = ((val >> 8) & 0xff);
+ name[3] = (val & 0xff);
return;
}
/***====================================================================***/
-typedef struct _IndicatorNameInfo {
- CommonInfo defs;
- int ndx;
- Atom name;
- Bool virtual;
+typedef struct _IndicatorNameInfo
+{
+ CommonInfo defs;
+ int ndx;
+ Atom name;
+ Bool virtual;
} IndicatorNameInfo;
-typedef struct _KeyNamesInfo {
- char * name;
- int errorCount;
- unsigned fileID;
- unsigned merge;
- int computedMin;
- int computedMax;
- int explicitMin;
- int explicitMax;
- int effectiveMin;
- int effectiveMax;
- unsigned long names[XkbMaxLegalKeyCode+1];
- unsigned files[XkbMaxLegalKeyCode+1];
- unsigned char has_alt_forms[XkbMaxLegalKeyCode+1];
- IndicatorNameInfo * leds;
- AliasInfo * aliases;
+typedef struct _KeyNamesInfo
+{
+ char *name; /* e.g. evdev+aliases(qwerty) */
+ int errorCount;
+ unsigned fileID;
+ unsigned merge;
+ int computedMin; /* lowest keycode stored */
+ int computedMax; /* highest keycode stored */
+ int explicitMin;
+ int explicitMax;
+ int effectiveMin;
+ int effectiveMax;
+ unsigned long names[XkbMaxLegalKeyCode + 1]; /* 4-letter name of key, keycode is the index */
+ unsigned files[XkbMaxLegalKeyCode + 1];
+ unsigned char has_alt_forms[XkbMaxLegalKeyCode + 1];
+ IndicatorNameInfo *leds;
+ AliasInfo *aliases;
} KeyNamesInfo;
+static void HandleKeycodesFile(XkbFile * file,
+ XkbDescPtr xkb,
+ unsigned merge,
+ KeyNamesInfo * info);
+
static void
-InitIndicatorNameInfo(IndicatorNameInfo *ii,KeyNamesInfo *info)
+InitIndicatorNameInfo(IndicatorNameInfo * ii, KeyNamesInfo * info)
{
- ii->defs.defined= 0;
- ii->defs.merge= info->merge;
- ii->defs.fileID= info->fileID;
- ii->defs.next= NULL;
- ii->ndx= 0;
- ii->name= None;
- ii->virtual= False;
+ ii->defs.defined = 0;
+ ii->defs.merge = info->merge;
+ ii->defs.fileID = info->fileID;
+ ii->defs.next = NULL;
+ ii->ndx = 0;
+ ii->name = None;
+ ii->virtual = False;
return;
}
-static void
-ClearIndicatorNameInfo(IndicatorNameInfo *ii,KeyNamesInfo *info)
+static void
+ClearIndicatorNameInfo(IndicatorNameInfo * ii, KeyNamesInfo * info)
{
- if (ii==info->leds) {
- ClearCommonInfo(&ii->defs);
- info->leds= NULL;
+ if (ii == info->leds)
+ {
+ ClearCommonInfo(&ii->defs);
+ info->leds = NULL;
}
return;
}
static IndicatorNameInfo *
-NextIndicatorName(KeyNamesInfo *info)
+NextIndicatorName(KeyNamesInfo * info)
{
-IndicatorNameInfo * ii;
+ IndicatorNameInfo *ii;
- ii= uTypedAlloc(IndicatorNameInfo);
- if (ii) {
- InitIndicatorNameInfo(ii,info);
- info->leds= (IndicatorNameInfo *)AddCommonInfo(&info->leds->defs,
- (CommonInfo *)ii);
+ ii = uTypedAlloc(IndicatorNameInfo);
+ if (ii)
+ {
+ InitIndicatorNameInfo(ii, info);
+ info->leds = (IndicatorNameInfo *) AddCommonInfo(&info->leds->defs,
+ (CommonInfo *) ii);
}
return ii;
}
static IndicatorNameInfo *
-FindIndicatorByIndex(KeyNamesInfo *info,int ndx)
+FindIndicatorByIndex(KeyNamesInfo * info, int ndx)
{
-IndicatorNameInfo * old;
+ IndicatorNameInfo *old;
- for (old= info->leds;old!=NULL;old=(IndicatorNameInfo *)old->defs.next) {
- if (old->ndx==ndx)
- return old;
+ for (old = info->leds; old != NULL;
+ old = (IndicatorNameInfo *) old->defs.next)
+ {
+ if (old->ndx == ndx)
+ return old;
}
return NULL;
}
static IndicatorNameInfo *
-FindIndicatorByName(KeyNamesInfo *info,Atom name)
+FindIndicatorByName(KeyNamesInfo * info, Atom name)
{
-IndicatorNameInfo * old;
+ IndicatorNameInfo *old;
- for (old= info->leds;old!=NULL;old=(IndicatorNameInfo *)old->defs.next) {
- if (old->name==name)
- return old;
+ for (old = info->leds; old != NULL;
+ old = (IndicatorNameInfo *) old->defs.next)
+ {
+ if (old->name == name)
+ return old;
}
return NULL;
}
static Bool
-AddIndicatorName(KeyNamesInfo *info,IndicatorNameInfo *new)
+AddIndicatorName(KeyNamesInfo * info, IndicatorNameInfo * new)
{
-IndicatorNameInfo *old;
-Bool replace;
-const char *action;
-
- replace= (new->defs.merge==MergeReplace)||
- (new->defs.merge==MergeOverride);
- old= FindIndicatorByName(info,new->name);
- if (old) {
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple indicators named %s\n",
- XkbAtomText(NULL,new->name,XkbMessage));
- if (old->ndx==new->ndx) {
- if (old->virtual!=new->virtual) {
- if (replace)
- old->virtual= new->virtual;
- action= "Using %s instead of %s\n";
- }
- else {
- action= "Identical definitions ignored\n";
- }
- ACTION2(action,(old->virtual?"virtual":"real"),
- (old->virtual?"real":"virtual"));
- return True;
- }
- else {
- if (replace) action= "Ignoring %d, using %d\n";
- else action= "Using %d, ignoring %d\n";
- ACTION2(action,old->ndx,new->ndx);
- }
- if (replace) {
- if (info->leds==old)
- info->leds= (IndicatorNameInfo *)old->defs.next;
- else {
- IndicatorNameInfo *tmp;
- tmp= info->leds;
- for (;tmp!=NULL;tmp=(IndicatorNameInfo *)tmp->defs.next) {
- if (tmp->defs.next==(CommonInfo *)old) {
- tmp->defs.next= old->defs.next;
- break;
- }
- }
- }
- uFree(old);
- }
- }
- }
- old= FindIndicatorByIndex(info,new->ndx);
- if (old) {
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple names for indicator %d\n",new->ndx);
- if ((old->name==new->name)&&(old->virtual==new->virtual))
- action= "Identical definitions ignored\n";
- else {
- const char *oldType,*newType;
- Atom using,ignoring;
- if (old->virtual) oldType= "virtual indicator";
- else oldType= "real indicator";
- if (new->virtual) newType= "virtual indicator";
- else newType= "real indicator";
- if (replace) {
- using= new->name;
- ignoring= old->name;
- }
- else {
- using= old->name;
- ignoring= new->name;
- }
- ACTION4("Using %s %s, ignoring %s %s\n",
- oldType,XkbAtomText(NULL,using,XkbMessage),
- newType,XkbAtomText(NULL,ignoring,XkbMessage));
- }
- }
- if (replace) {
- old->name= new->name;
- old->virtual= new->virtual;
- }
- return True;
- }
- old= new;
- new= NextIndicatorName(info);
- if (!new) {
- WSGO1("Couldn't allocate name for indicator %d\n",new->ndx);
- ACTION("Ignored\n");
- return False;
- }
- new->name= old->name;
- new->ndx= old->ndx;
- new->virtual= old->virtual;
+ IndicatorNameInfo *old;
+ Bool replace;
+
+ replace = (new->defs.merge == MergeReplace) ||
+ (new->defs.merge == MergeOverride);
+ old = FindIndicatorByName(info, new->name);
+ if (old)
+ {
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple indicators named %s\n",
+ XkbAtomText(NULL, new->name, XkbMessage));
+ if (old->ndx == new->ndx)
+ {
+ if (old->virtual != new->virtual)
+ {
+ if (replace)
+ old->virtual = new->virtual;
+ ACTION2("Using %s instead of %s\n",
+ (old->virtual ? "virtual" : "real"),
+ (old->virtual ? "real" : "virtual"));
+ }
+ else
+ {
+ ACTION("Identical definitions ignored\n");
+ }
+ return True;
+ }
+ else
+ {
+ if (replace)
+ ACTION2("Ignoring %d, using %d\n", old->ndx, new->ndx);
+ else
+ ACTION2("Using %d, ignoring %d\n", old->ndx, new->ndx);
+ }
+ if (replace)
+ {
+ if (info->leds == old)
+ info->leds = (IndicatorNameInfo *) old->defs.next;
+ else
+ {
+ IndicatorNameInfo *tmp;
+ tmp = info->leds;
+ for (; tmp != NULL;
+ tmp = (IndicatorNameInfo *) tmp->defs.next)
+ {
+ if (tmp->defs.next == (CommonInfo *) old)
+ {
+ tmp->defs.next = old->defs.next;
+ break;
+ }
+ }
+ }
+ uFree(old);
+ }
+ }
+ }
+ old = FindIndicatorByIndex(info, new->ndx);
+ if (old)
+ {
+ if (((old->defs.fileID == new->defs.fileID) && (warningLevel > 0))
+ || (warningLevel > 9))
+ {
+ WARN1("Multiple names for indicator %d\n", new->ndx);
+ if ((old->name == new->name) && (old->virtual == new->virtual))
+ ACTION("Identical definitions ignored\n");
+ else
+ {
+ const char *oldType, *newType;
+ Atom using, ignoring;
+ if (old->virtual)
+ oldType = "virtual indicator";
+ else
+ oldType = "real indicator";
+ if (new->virtual)
+ newType = "virtual indicator";
+ else
+ newType = "real indicator";
+ if (replace)
+ {
+ using = new->name;
+ ignoring = old->name;
+ }
+ else
+ {
+ using = old->name;
+ ignoring = new->name;
+ }
+ ACTION4("Using %s %s, ignoring %s %s\n",
+ oldType, XkbAtomText(NULL, using, XkbMessage),
+ newType, XkbAtomText(NULL, ignoring, XkbMessage));
+ }
+ }
+ if (replace)
+ {
+ old->name = new->name;
+ old->virtual = new->virtual;
+ }
+ return True;
+ }
+ old = new;
+ new = NextIndicatorName(info);
+ if (!new)
+ {
+ WSGO1("Couldn't allocate name for indicator %d\n", new->ndx);
+ ACTION("Ignored\n");
+ return False;
+ }
+ new->name = old->name;
+ new->ndx = old->ndx;
+ new->virtual = old->virtual;
return True;
}
static void
-ClearKeyNamesInfo(KeyNamesInfo *info)
+ClearKeyNamesInfo(KeyNamesInfo * info)
{
- if (info->name!=NULL)
- uFree(info->name);
- info->name= NULL;
- info->computedMax= info->explicitMax= info->explicitMin= -1;
- info->computedMin= 256;
- info->effectiveMin= 8;
- info->effectiveMax= 255;
- bzero((char *)info->names,sizeof(info->names));
- bzero((char *)info->files,sizeof(info->files));
- bzero((char *)info->has_alt_forms,sizeof(info->has_alt_forms));
+ if (info->name != NULL)
+ uFree(info->name);
+ info->name = NULL;
+ info->computedMax = info->explicitMax = info->explicitMin = -1;
+ info->computedMin = 256;
+ info->effectiveMin = 8;
+ info->effectiveMax = 255;
+ bzero((char *) info->names, sizeof(info->names));
+ bzero((char *) info->files, sizeof(info->files));
+ bzero((char *) info->has_alt_forms, sizeof(info->has_alt_forms));
if (info->leds)
- ClearIndicatorNameInfo(info->leds,info);
+ ClearIndicatorNameInfo(info->leds, info);
if (info->aliases)
- ClearAliases(&info->aliases);
+ ClearAliases(&info->aliases);
return;
}
static void
-InitKeyNamesInfo(KeyNamesInfo *info)
+InitKeyNamesInfo(KeyNamesInfo * info)
{
- info->name= NULL;
- info->leds= NULL;
- info->aliases= NULL;
+ info->name = NULL;
+ info->leds = NULL;
+ info->aliases = NULL;
ClearKeyNamesInfo(info);
- info->errorCount= 0;
+ info->errorCount = 0;
return;
}
static int
-FindKeyByLong(KeyNamesInfo *info,unsigned long name)
+FindKeyByLong(KeyNamesInfo * info, unsigned long name)
{
-register int i;
+ register int i;
- for (i=info->effectiveMin;i<=info->effectiveMax;i++) {
- if (info->names[i]==name)
- return i;
+ for (i = info->effectiveMin; i <= info->effectiveMax; i++)
+ {
+ if (info->names[i] == name)
+ return i;
}
return 0;
}
+/**
+ * Store the name of the key as a long in the info struct under the given
+ * keycode. If the same keys is referred to twice, print a warning.
+ * Note that the key's name is stored as a long, the keycode is the index.
+ */
static Bool
-AddKeyName( KeyNamesInfo * info,
- int kc,
- char * name,
- unsigned merge,
- unsigned fileID,
- Bool reportCollisions)
+AddKeyName(KeyNamesInfo * info,
+ int kc,
+ char *name, unsigned merge, unsigned fileID, Bool reportCollisions)
{
-int old;
-unsigned long lval;
-
- if ((kc<info->effectiveMin)||(kc>info->effectiveMax)) {
- ERROR2("Illegal keycode %d for name <%s>\n",kc,name);
- ACTION2("Must be in the range %d-%d inclusive\n",info->effectiveMin,
- info->effectiveMax);
- return False;
- }
- if (kc<info->computedMin) info->computedMin= kc;
- if (kc>info->computedMax) info->computedMax= kc;
- lval= KeyNameToLong(name);
-
- if (reportCollisions) {
- reportCollisions= ((warningLevel>7)||
- ((warningLevel>0)&&(fileID==info->files[kc])));
- }
-
- if (info->names[kc]!=0) {
- char buf[6];
-
- LongToKeyName(info->names[kc],buf);
- buf[4]= '\0';
- if (info->names[kc]==lval) {
- if (info->has_alt_forms[kc] || (merge==MergeAltForm)) {
- info->has_alt_forms[kc]= True;
- }
- else if (reportCollisions) {
- WARN("Multiple identical key name definitions\n");
- ACTION2("Later occurences of \"<%s> = %d\" ignored\n",buf,kc);
- }
- return True;
- }
- if (merge==MergeAugment) {
- if (reportCollisions) {
- WARN1("Multiple names for keycode %d\n",kc);
- ACTION2("Using <%s>, ignoring <%s>\n",buf,name);
- }
- return True;
- }
- else {
- if (reportCollisions) {
- WARN1("Multiple names for keycode %d\n",kc);
- ACTION2("Using <%s>, ignoring <%s>\n",name,buf);
- }
- info->names[kc]= 0;
- info->files[kc]= 0;
- }
- }
- old= FindKeyByLong(info,lval);
- if ((old!=0)&&(old!=kc)) {
- if (merge==MergeOverride) {
- info->names[old]= 0;
- info->files[old]= 0;
- info->has_alt_forms[old]= True;
- if (reportCollisions) {
- WARN1("Key name <%s> assigned to multiple keys\n",name);
- ACTION2("Using %d, ignoring %d\n",kc,old);
- }
- }
- else if (merge!=MergeAltForm) {
- if ((reportCollisions)&&(warningLevel>3)) {
- WARN1("Key name <%s> assigned to multiple keys\n",name);
- ACTION2("Using %d, ignoring %d\n",old,kc);
- ACTION("Use 'alternate' keyword to assign the same name to multiple keys\n");
- }
- return True;
- }
- else {
- info->has_alt_forms[old]= True;
- }
- }
- info->names[kc]= lval;
- info->files[kc]= fileID;
- info->has_alt_forms[kc]= (merge==MergeAltForm);
+ int old;
+ unsigned long lval;
+
+ if ((kc < info->effectiveMin) || (kc > info->effectiveMax))
+ {
+ ERROR2("Illegal keycode %d for name <%s>\n", kc, name);
+ ACTION2("Must be in the range %d-%d inclusive\n",
+ info->effectiveMin, info->effectiveMax);
+ return False;
+ }
+ if (kc < info->computedMin)
+ info->computedMin = kc;
+ if (kc > info->computedMax)
+ info->computedMax = kc;
+ lval = KeyNameToLong(name);
+
+ if (reportCollisions)
+ {
+ reportCollisions = ((warningLevel > 7) ||
+ ((warningLevel > 0)
+ && (fileID == info->files[kc])));
+ }
+
+ if (info->names[kc] != 0)
+ {
+ char buf[6];
+
+ LongToKeyName(info->names[kc], buf);
+ buf[4] = '\0';
+ if (info->names[kc] == lval)
+ {
+ if (info->has_alt_forms[kc] || (merge == MergeAltForm))
+ {
+ info->has_alt_forms[kc] = True;
+ }
+ else if (reportCollisions)
+ {
+ WARN("Multiple identical key name definitions\n");
+ ACTION2("Later occurences of \"<%s> = %d\" ignored\n",
+ buf, kc);
+ }
+ return True;
+ }
+ if (merge == MergeAugment)
+ {
+ if (reportCollisions)
+ {
+ WARN1("Multiple names for keycode %d\n", kc);
+ ACTION2("Using <%s>, ignoring <%s>\n", buf, name);
+ }
+ return True;
+ }
+ else
+ {
+ if (reportCollisions)
+ {
+ WARN1("Multiple names for keycode %d\n", kc);
+ ACTION2("Using <%s>, ignoring <%s>\n", name, buf);
+ }
+ info->names[kc] = 0;
+ info->files[kc] = 0;
+ }
+ }
+ old = FindKeyByLong(info, lval);
+ if ((old != 0) && (old != kc))
+ {
+ if (merge == MergeOverride)
+ {
+ info->names[old] = 0;
+ info->files[old] = 0;
+ info->has_alt_forms[old] = True;
+ if (reportCollisions)
+ {
+ WARN1("Key name <%s> assigned to multiple keys\n", name);
+ ACTION2("Using %d, ignoring %d\n", kc, old);
+ }
+ }
+ else if (merge != MergeAltForm)
+ {
+ if ((reportCollisions) && (warningLevel > 3))
+ {
+ WARN1("Key name <%s> assigned to multiple keys\n", name);
+ ACTION2("Using %d, ignoring %d\n", old, kc);
+ ACTION
+ ("Use 'alternate' keyword to assign the same name to multiple keys\n");
+ }
+ return True;
+ }
+ else
+ {
+ info->has_alt_forms[old] = True;
+ }
+ }
+ info->names[kc] = lval;
+ info->files[kc] = fileID;
+ info->has_alt_forms[kc] = (merge == MergeAltForm);
return True;
}
/***====================================================================***/
static void
-MergeIncludedKeycodes(KeyNamesInfo *into,KeyNamesInfo *from,unsigned merge)
+MergeIncludedKeycodes(KeyNamesInfo * into, KeyNamesInfo * from,
+ unsigned merge)
{
-register int i;
-char buf[5];
-
- if (from->errorCount>0) {
- into->errorCount+= from->errorCount;
- return;
- }
- if (into->name==NULL) {
- into->name= from->name;
- from->name= NULL;
- }
- for (i=from->computedMin;i<=from->computedMax;i++) {
- unsigned thisMerge;
- if (from->names[i]==0)
- continue;
- LongToKeyName(from->names[i],buf);
- buf[4]= '\0';
- if (from->has_alt_forms[i])
- thisMerge= MergeAltForm;
- else thisMerge= merge;
- if (!AddKeyName(into,i,buf,thisMerge,from->fileID,False))
- into->errorCount++;
- }
- if (from->leds) {
- IndicatorNameInfo *led,*next;
- for (led=from->leds;led!=NULL;led=next) {
- if (merge!=MergeDefault)
- led->defs.merge= merge;
- if (!AddIndicatorName(into,led))
- into->errorCount++;
- next= (IndicatorNameInfo *)led->defs.next;
- }
- }
- if (!MergeAliases(&into->aliases,&from->aliases,merge))
- into->errorCount++;
- if (from->explicitMin>0) {
- if ((into->explicitMin<0)||(into->explicitMin>from->explicitMin))
- into->effectiveMin= into->explicitMin= from->explicitMin;
- }
- if (from->explicitMax>0) {
- if ((into->explicitMax<0)||(into->explicitMax<from->explicitMax))
- into->effectiveMax= into->explicitMax= from->explicitMax;
+ register int i;
+ char buf[5];
+
+ if (from->errorCount > 0)
+ {
+ into->errorCount += from->errorCount;
+ return;
+ }
+ if (into->name == NULL)
+ {
+ into->name = from->name;
+ from->name = NULL;
+ }
+ for (i = from->computedMin; i <= from->computedMax; i++)
+ {
+ unsigned thisMerge;
+ if (from->names[i] == 0)
+ continue;
+ LongToKeyName(from->names[i], buf);
+ buf[4] = '\0';
+ if (from->has_alt_forms[i])
+ thisMerge = MergeAltForm;
+ else
+ thisMerge = merge;
+ if (!AddKeyName(into, i, buf, thisMerge, from->fileID, False))
+ into->errorCount++;
+ }
+ if (from->leds)
+ {
+ IndicatorNameInfo *led, *next;
+ for (led = from->leds; led != NULL; led = next)
+ {
+ if (merge != MergeDefault)
+ led->defs.merge = merge;
+ if (!AddIndicatorName(into, led))
+ into->errorCount++;
+ next = (IndicatorNameInfo *) led->defs.next;
+ }
+ }
+ if (!MergeAliases(&into->aliases, &from->aliases, merge))
+ into->errorCount++;
+ if (from->explicitMin > 0)
+ {
+ if ((into->explicitMin < 0)
+ || (into->explicitMin > from->explicitMin))
+ into->effectiveMin = into->explicitMin = from->explicitMin;
+ }
+ if (from->explicitMax > 0)
+ {
+ if ((into->explicitMax < 0)
+ || (into->explicitMax < from->explicitMax))
+ into->effectiveMax = into->explicitMax = from->explicitMax;
}
return;
}
-typedef void (*FileHandler)(
- XkbFile * /* rtrn */,
- XkbDescPtr /* xkb */,
- unsigned /* merge */,
- KeyNamesInfo * /* included */
-);
-
+/**
+ * Handle the given include statement (e.g. "include "evdev+aliases(qwerty)").
+ *
+ * @param stmt The include statement from the keymap file.
+ * @param xkb Unused for all but the xkb->flags.
+ * @param info Struct to store the key info in.
+ */
static Bool
-HandleIncludeKeycodes( IncludeStmt * stmt,
- XkbDescPtr xkb,
- KeyNamesInfo * info,
- FileHandler hndlr)
+HandleIncludeKeycodes(IncludeStmt * stmt, XkbDescPtr xkb, KeyNamesInfo * info)
{
-unsigned newMerge;
-XkbFile * rtrn;
-KeyNamesInfo included;
-Bool haveSelf;
-
- haveSelf= False;
- if ((stmt->file==NULL)&&(stmt->map==NULL)) {
- haveSelf= True;
- included= *info;
- bzero(info,sizeof(KeyNamesInfo));
- }
- else if (strcmp(stmt->file,"computed")==0) {
- xkb->flags|= AutoKeyNames;
- info->explicitMin= XkbMinLegalKeyCode;
- info->explicitMax= XkbMaxLegalKeyCode;
- return (info->errorCount==0);
- }
- else if (ProcessIncludeFile(stmt,XkmKeyNamesIndex,&rtrn,&newMerge)) {
- InitKeyNamesInfo(&included);
- (*hndlr)(rtrn,xkb,MergeOverride,&included);
- if (stmt->stmt!=NULL) {
- if (included.name!=NULL)
- uFree(included.name);
- included.name= stmt->stmt;
- stmt->stmt= NULL;
- }
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- if ((stmt->next!=NULL)&&(included.errorCount<1)) {
- IncludeStmt * next;
- unsigned op;
- KeyNamesInfo next_incl;
-
- for (next=stmt->next;next!=NULL;next=next->next) {
- if ((next->file==NULL)&&(next->map==NULL)) {
- haveSelf= True;
- MergeIncludedKeycodes(&included,info,next->merge);
- ClearKeyNamesInfo(info);
- }
- else if (ProcessIncludeFile(next,XkmKeyNamesIndex,&rtrn,&op)) {
- InitKeyNamesInfo(&next_incl);
- (*hndlr)(rtrn,xkb,MergeOverride,&next_incl);
- MergeIncludedKeycodes(&included,&next_incl,op);
- ClearKeyNamesInfo(&next_incl);
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- }
+ unsigned newMerge;
+ XkbFile *rtrn;
+ KeyNamesInfo included = {NULL};
+ Bool haveSelf;
+
+ haveSelf = False;
+ if ((stmt->file == NULL) && (stmt->map == NULL))
+ {
+ haveSelf = True;
+ included = *info;
+ bzero(info, sizeof(KeyNamesInfo));
+ }
+ else if (strcmp(stmt->file, "computed") == 0)
+ {
+ xkb->flags |= AutoKeyNames;
+ info->explicitMin = XkbMinLegalKeyCode;
+ info->explicitMax = XkbMaxLegalKeyCode;
+ return (info->errorCount == 0);
+ } /* parse file, store returned info in the xkb struct */
+ else if (ProcessIncludeFile(stmt, XkmKeyNamesIndex, &rtrn, &newMerge))
+ {
+ InitKeyNamesInfo(&included);
+ HandleKeycodesFile(rtrn, xkb, MergeOverride, &included);
+ if (stmt->stmt != NULL)
+ {
+ if (included.name != NULL)
+ uFree(included.name);
+ included.name = stmt->stmt;
+ stmt->stmt = NULL;
+ }
+ }
+ else
+ {
+ info->errorCount += 10; /* XXX: why 10?? */
+ return False;
+ }
+ /* Do we have more than one include statement? */
+ if ((stmt->next != NULL) && (included.errorCount < 1))
+ {
+ IncludeStmt *next;
+ unsigned op;
+ KeyNamesInfo next_incl;
+
+ for (next = stmt->next; next != NULL; next = next->next)
+ {
+ if ((next->file == NULL) && (next->map == NULL))
+ {
+ haveSelf = True;
+ MergeIncludedKeycodes(&included, info, next->merge);
+ ClearKeyNamesInfo(info);
+ }
+ else if (ProcessIncludeFile(next, XkmKeyNamesIndex, &rtrn, &op))
+ {
+ InitKeyNamesInfo(&next_incl);
+ HandleKeycodesFile(rtrn, xkb, MergeOverride, &next_incl);
+ MergeIncludedKeycodes(&included, &next_incl, op);
+ ClearKeyNamesInfo(&next_incl);
+ }
+ else
+ {
+ info->errorCount += 10; /* XXX: Why 10?? */
+ return False;
+ }
+ }
}
if (haveSelf)
- *info= included;
- else {
- MergeIncludedKeycodes(info,&included,newMerge);
- ClearKeyNamesInfo(&included);
+ *info = included;
+ else
+ {
+ MergeIncludedKeycodes(info, &included, newMerge);
+ ClearKeyNamesInfo(&included);
}
- return (info->errorCount==0);
+ return (info->errorCount == 0);
}
+/**
+ * Parse the given statement and store the output in the info struct.
+ * e.g. <ESC> = 9
+ */
static int
-HandleKeycodeDef( KeycodeDef * stmt,
- XkbDescPtr xkb,
- unsigned merge,
- KeyNamesInfo * info)
+HandleKeycodeDef(KeycodeDef * stmt, unsigned merge, KeyNamesInfo * info)
{
-int code;
-ExprResult result;
-
- if (!ExprResolveInteger(stmt->value,&result,NULL,NULL)) {
- ACTION1("No value keycode assigned to name <%s>\n",stmt->name);
- return 0;
- }
- code= result.ival;
- if ((code<info->effectiveMin)||(code>info->effectiveMax)) {
- ERROR2("Illegal keycode %d for name <%s>\n",code,stmt->name);
- ACTION2("Must be in the range %d-%d inclusive\n",info->effectiveMin,
- info->effectiveMax);
- return 0;
- }
- if (stmt->merge!=MergeDefault) {
- if (stmt->merge==MergeReplace)
- merge= MergeOverride;
- else merge= stmt->merge;
- }
- return AddKeyName(info,code,stmt->name,merge,info->fileID,True);
+ int code;
+ ExprResult result;
+
+ if (!ExprResolveInteger(stmt->value, &result, NULL, NULL))
+ {
+ ACTION1("No value keycode assigned to name <%s>\n", stmt->name);
+ return 0;
+ }
+ code = result.ival;
+ if ((code < info->effectiveMin) || (code > info->effectiveMax))
+ {
+ ERROR2("Illegal keycode %d for name <%s>\n", code, stmt->name);
+ ACTION2("Must be in the range %d-%d inclusive\n",
+ info->effectiveMin, info->effectiveMax);
+ return 0;
+ }
+ if (stmt->merge != MergeDefault)
+ {
+ if (stmt->merge == MergeReplace)
+ merge = MergeOverride;
+ else
+ merge = stmt->merge;
+ }
+ return AddKeyName(info, code, stmt->name, merge, info->fileID, True);
}
#define MIN_KEYCODE_DEF 0
#define MAX_KEYCODE_DEF 1
+/**
+ * Handle the minimum/maximum statement of the xkb file.
+ * Sets explicitMin/Max and effectiveMin/Max of the info struct.
+ *
+ * @return 1 on success, 0 otherwise.
+ */
static int
-HandleKeyNameVar(VarDef *stmt,XkbDescPtr xkb,unsigned merge,KeyNamesInfo *info)
+HandleKeyNameVar(VarDef * stmt, KeyNamesInfo * info)
{
-ExprResult tmp,field;
-ExprDef * arrayNdx;
-int which;
-
- if (ExprResolveLhs(stmt->name,&tmp,&field,&arrayNdx)==0)
- return 0; /* internal error, already reported */
-
- if (tmp.str!=NULL) {
- ERROR1("Unknown element %s encountered\n",tmp.str);
- ACTION1("Default for field %s ignored\n",field.str);
- return 0;
- }
- if (uStrCaseCmp(field.str,"minimum")==0) which= MIN_KEYCODE_DEF;
- else if (uStrCaseCmp(field.str,"maximum")==0) which= MAX_KEYCODE_DEF;
- else {
- ERROR("Unknown field encountered\n");
- ACTION1("Assigment to field %s ignored\n",field.str);
- return 0;
- }
- if (arrayNdx!=NULL) {
- ERROR1("The %s setting is not an array\n",field.str);
- ACTION("Illegal array reference ignored\n");
- return 0;
- }
-
- if (ExprResolveInteger(stmt->value,&tmp,NULL,NULL)==0) {
- ACTION1("Assignment to field %s ignored\n",field.str);
- return 0;
- }
- if ((tmp.ival<XkbMinLegalKeyCode)||(tmp.ival>XkbMaxLegalKeyCode)) {
- ERROR3("Illegal keycode %d (must be in the range %d-%d inclusive)\n",
- tmp.ival,XkbMinLegalKeyCode,XkbMaxLegalKeyCode);
- ACTION1("Value of \"%s\" not changed\n",field.str);
- return 0;
- }
- if (which==MIN_KEYCODE_DEF) {
- if ((info->explicitMax>0)&&(info->explicitMax<tmp.ival)) {
- ERROR2("Minimum key code (%d) must be <= maximum key code (%d)\n",
- tmp.ival,info->explicitMax);
- ACTION("Minimum key code value not changed\n");
- return 0;
- }
- if ((info->computedMax>0)&&(info->computedMin<tmp.ival)) {
- ERROR2("Minimum key code (%d) must be <= lowest defined key (%d)\n",
- tmp.ival,info->computedMin);
- ACTION("Minimum key code value not changed\n");
- return 0;
- }
- info->explicitMin= tmp.ival;
- info->effectiveMin= tmp.ival;
- }
- if (which==MAX_KEYCODE_DEF) {
- if ((info->explicitMin>0)&&(info->explicitMin>tmp.ival)) {
- ERROR2("Maximum code (%d) must be >= minimum key code (%d)\n",
- tmp.ival,info->explicitMin);
- ACTION("Maximum code value not changed\n");
- return 0;
- }
- if ((info->computedMax>0)&&(info->computedMax>tmp.ival)) {
- ERROR2("Maximum code (%d) must be >= highest defined key (%d)\n",
- tmp.ival,info->computedMax);
- ACTION("Maximum code value not changed\n");
- return 0;
- }
- info->explicitMax= tmp.ival;
- info->effectiveMax= tmp.ival;
+ ExprResult tmp, field;
+ ExprDef *arrayNdx;
+ int which;
+
+ if (ExprResolveLhs(stmt->name, &tmp, &field, &arrayNdx) == 0)
+ return 0; /* internal error, already reported */
+
+ if (tmp.str != NULL)
+ {
+ ERROR1("Unknown element %s encountered\n", tmp.str);
+ ACTION1("Default for field %s ignored\n", field.str);
+ return 0;
+ }
+ if (uStrCaseCmp(field.str, "minimum") == 0)
+ which = MIN_KEYCODE_DEF;
+ else if (uStrCaseCmp(field.str, "maximum") == 0)
+ which = MAX_KEYCODE_DEF;
+ else
+ {
+ ERROR("Unknown field encountered\n");
+ ACTION1("Assigment to field %s ignored\n", field.str);
+ return 0;
+ }
+ if (arrayNdx != NULL)
+ {
+ ERROR1("The %s setting is not an array\n", field.str);
+ ACTION("Illegal array reference ignored\n");
+ return 0;
+ }
+
+ if (ExprResolveInteger(stmt->value, &tmp, NULL, NULL) == 0)
+ {
+ ACTION1("Assignment to field %s ignored\n", field.str);
+ return 0;
+ }
+ if ((tmp.ival < XkbMinLegalKeyCode) || (tmp.ival > XkbMaxLegalKeyCode))
+ {
+ ERROR3
+ ("Illegal keycode %d (must be in the range %d-%d inclusive)\n",
+ tmp.ival, XkbMinLegalKeyCode, XkbMaxLegalKeyCode);
+ ACTION1("Value of \"%s\" not changed\n", field.str);
+ return 0;
+ }
+ if (which == MIN_KEYCODE_DEF)
+ {
+ if ((info->explicitMax > 0) && (info->explicitMax < tmp.ival))
+ {
+ ERROR2
+ ("Minimum key code (%d) must be <= maximum key code (%d)\n",
+ tmp.ival, info->explicitMax);
+ ACTION("Minimum key code value not changed\n");
+ return 0;
+ }
+ if ((info->computedMax > 0) && (info->computedMin < tmp.ival))
+ {
+ ERROR2
+ ("Minimum key code (%d) must be <= lowest defined key (%d)\n",
+ tmp.ival, info->computedMin);
+ ACTION("Minimum key code value not changed\n");
+ return 0;
+ }
+ info->explicitMin = tmp.ival;
+ info->effectiveMin = tmp.ival;
+ }
+ if (which == MAX_KEYCODE_DEF)
+ {
+ if ((info->explicitMin > 0) && (info->explicitMin > tmp.ival))
+ {
+ ERROR2("Maximum code (%d) must be >= minimum key code (%d)\n",
+ tmp.ival, info->explicitMin);
+ ACTION("Maximum code value not changed\n");
+ return 0;
+ }
+ if ((info->computedMax > 0) && (info->computedMax > tmp.ival))
+ {
+ ERROR2
+ ("Maximum code (%d) must be >= highest defined key (%d)\n",
+ tmp.ival, info->computedMax);
+ ACTION("Maximum code value not changed\n");
+ return 0;
+ }
+ info->explicitMax = tmp.ival;
+ info->effectiveMax = tmp.ival;
}
return 1;
}
static int
-HandleIndicatorNameDef( IndicatorNameDef * def,
- XkbDescPtr xkb,
- unsigned merge,
- KeyNamesInfo * info)
+HandleIndicatorNameDef(IndicatorNameDef * def,
+ unsigned merge, KeyNamesInfo * info)
{
-IndicatorNameInfo ii;
-ExprResult tmp;
-
- if ((def->ndx<1)||(def->ndx>XkbNumIndicators)) {
- info->errorCount++;
- ERROR1("Name specified for illegal indicator index %d\n",def->ndx);
- ACTION("Ignored\n");
- return False;
- }
- InitIndicatorNameInfo(&ii,info);
- ii.ndx= def->ndx;
- if (!ExprResolveString(def->name,&tmp,NULL,NULL)) {
- char buf[20];
- sprintf(buf,"%d",def->ndx);
- info->errorCount++;
- return ReportBadType("indicator","name",buf,"string");
- }
- ii.name= XkbInternAtom(NULL,tmp.str,False);
- ii.virtual= def->virtual;
- if (!AddIndicatorName(info,&ii))
- return False;
+ IndicatorNameInfo ii;
+ ExprResult tmp;
+
+ if ((def->ndx < 1) || (def->ndx > XkbNumIndicators))
+ {
+ info->errorCount++;
+ ERROR1("Name specified for illegal indicator index %d\n", def->ndx);
+ ACTION("Ignored\n");
+ return False;
+ }
+ InitIndicatorNameInfo(&ii, info);
+ ii.ndx = def->ndx;
+ if (!ExprResolveString(def->name, &tmp, NULL, NULL))
+ {
+ char buf[20];
+ snprintf(buf, sizeof(buf), "%d", def->ndx);
+ info->errorCount++;
+ return ReportBadType("indicator", "name", buf, "string");
+ }
+ ii.name = XkbInternAtom(NULL, tmp.str, False);
+ ii.virtual = def->virtual;
+ if (!AddIndicatorName(info, &ii))
+ return False;
return True;
}
+/**
+ * Handle the xkb_keycodes section of a xkb file.
+ * All information about parsed keys is stored in the info struct.
+ *
+ * Such a section may have include statements, in which case this function is
+ * semi-recursive (it calls HandleIncludeKeycodes, which may call
+ * HandleKeycodesFile again).
+ *
+ * @param file The input file (parsed xkb_keycodes section)
+ * @param xkb Necessary to pass down, may have flags changed.
+ * @param merge Merge strategy (MergeOverride, etc.)
+ * @param info Struct to contain the fully parsed key information.
+ */
static void
-HandleKeycodesFile( XkbFile * file,
- XkbDescPtr xkb,
- unsigned merge,
- KeyNamesInfo * info)
+HandleKeycodesFile(XkbFile * file,
+ XkbDescPtr xkb, unsigned merge, KeyNamesInfo * info)
{
-ParseCommon *stmt;
-
- info->name= uStringDup(file->name);
- stmt= file->defs;
- while (stmt) {
- switch (stmt->stmtType) {
- case StmtInclude:
- if (!HandleIncludeKeycodes((IncludeStmt *)stmt,xkb,info,
- HandleKeycodesFile))
- info->errorCount++;
- break;
- case StmtKeycodeDef:
- if (!HandleKeycodeDef((KeycodeDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtKeyAliasDef:
- if (!HandleAliasDef((KeyAliasDef *)stmt,
- merge,info->fileID,&info->aliases))
- info->errorCount++;
- break;
- case StmtVarDef:
- if (!HandleKeyNameVar((VarDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtIndicatorNameDef:
- if (!HandleIndicatorNameDef((IndicatorNameDef *)stmt,xkb,
- merge,info)) {
- info->errorCount++;
- }
- break;
- case StmtInterpDef:
- case StmtVModDef:
- ERROR("Keycode files may define key and indicator names only\n");
- ACTION1("Ignoring definition of %s\n",
- ((stmt->stmtType==StmtInterpDef)?
- "a symbol interpretation":
- "virtual modifiers"));
- info->errorCount++;
- break;
- default:
- WSGO1("Unexpected statement type %d in HandleKeycodesFile\n",
- stmt->stmtType);
- break;
- }
- stmt= stmt->next;
- if (info->errorCount>10) {
+ ParseCommon *stmt;
+
+ info->name = uStringDup(file->name);
+ stmt = file->defs;
+ while (stmt)
+ {
+ switch (stmt->stmtType)
+ {
+ case StmtInclude: /* e.g. include "evdev+aliases(qwerty)" */
+ if (!HandleIncludeKeycodes((IncludeStmt *) stmt, xkb, info))
+ info->errorCount++;
+ break;
+ case StmtKeycodeDef: /* e.g. <ESC> = 9; */
+ if (!HandleKeycodeDef((KeycodeDef *) stmt, merge, info))
+ info->errorCount++;
+ break;
+ case StmtKeyAliasDef: /* e.g. alias <MENU> = <COMP>; */
+ if (!HandleAliasDef((KeyAliasDef *) stmt,
+ merge, info->fileID, &info->aliases))
+ info->errorCount++;
+ break;
+ case StmtVarDef: /* e.g. minimum, maximum */
+ if (!HandleKeyNameVar((VarDef *) stmt, info))
+ info->errorCount++;
+ break;
+ case StmtIndicatorNameDef: /* e.g. indicator 1 = "Caps Lock"; */
+ if (!HandleIndicatorNameDef((IndicatorNameDef *) stmt,
+ merge, info))
+ {
+ info->errorCount++;
+ }
+ break;
+ case StmtInterpDef:
+ case StmtVModDef:
+ ERROR("Keycode files may define key and indicator names only\n");
+ ACTION1("Ignoring definition of %s\n",
+ ((stmt->stmtType ==
+ StmtInterpDef) ? "a symbol interpretation" :
+ "virtual modifiers"));
+ info->errorCount++;
+ break;
+ default:
+ WSGO1("Unexpected statement type %d in HandleKeycodesFile\n",
+ stmt->stmtType);
+ break;
+ }
+ stmt = stmt->next;
+ if (info->errorCount > 10)
+ {
#ifdef NOISY
- ERROR("Too many errors\n");
+ ERROR("Too many errors\n");
#endif
- ACTION1("Abandoning keycodes file \"%s\"\n",file->topName);
- break;
- }
+ ACTION1("Abandoning keycodes file \"%s\"\n", file->topName);
+ break;
+ }
}
return;
}
+/**
+ * Compile the xkb_keycodes section, parse it's output, return the results.
+ *
+ * @param file The parsed XKB file (may have include statements requiring
+ * further parsing)
+ * @param result The effective keycodes, as gathered from the file.
+ * @param merge Merge strategy.
+ *
+ * @return True on success, False otherwise.
+ */
Bool
-CompileKeycodes(XkbFile *file,XkbFileInfo *result,unsigned merge)
+CompileKeycodes(XkbFile * file, XkbFileInfo * result, unsigned merge)
{
-KeyNamesInfo info;
-XkbDescPtr xkb;
+ KeyNamesInfo info; /* contains all the info after parsing */
+ XkbDescPtr xkb;
- xkb= result->xkb;
+ xkb = result->xkb;
InitKeyNamesInfo(&info);
- HandleKeycodesFile(file,xkb,merge,&info);
-
- if (info.errorCount==0) {
- if (info.explicitMin>0)
- xkb->min_key_code= info.effectiveMin;
- else xkb->min_key_code= info.computedMin;
- if (info.explicitMax>0)
- xkb->max_key_code= info.effectiveMax;
- else xkb->max_key_code= info.computedMax;
- if (XkbAllocNames(xkb,XkbKeyNamesMask|XkbIndicatorNamesMask,0,0)==Success) {
- register int i;
- xkb->names->keycodes= XkbInternAtom(xkb->dpy,info.name,False);
- uDEBUG2(1,"key range: %d..%d\n",xkb->min_key_code,xkb->max_key_code);
- for (i=info.computedMin;i<=info.computedMax;i++) {
- LongToKeyName(info.names[i],xkb->names->keys[i].name);
- uDEBUG2(2,"key %d = %s\n",i,
- XkbKeyNameText(xkb->names->keys[i].name,XkbMessage));
- }
- }
- else {
- WSGO("Cannot create XkbNamesRec in CompileKeycodes\n");
- return False;
- }
- if (info.leds) {
- IndicatorNameInfo *ii;
- if (XkbAllocIndicatorMaps(xkb)!=Success) {
- WSGO("Couldn't allocate IndicatorRec in CompileKeycodes\n");
- ACTION("Physical indicators not set\n");
- }
- for (ii=info.leds;ii!=NULL;ii=(IndicatorNameInfo *)ii->defs.next){
- xkb->names->indicators[ii->ndx-1]=
- XkbInternAtom(xkb->dpy,
- XkbAtomGetString(NULL,ii->name),False);
- if (xkb->indicators!=NULL) {
- register unsigned bit;
- bit= 1<<(ii->ndx-1);
- if (ii->virtual)
- xkb->indicators->phys_indicators&= ~bit;
- else xkb->indicators->phys_indicators|= bit;
- }
- }
- }
- if (info.aliases)
- ApplyAliases(xkb,False,&info.aliases);
- return True;
+ HandleKeycodesFile(file, xkb, merge, &info);
+
+ /* all the keys are now stored in info */
+
+ if (info.errorCount == 0)
+ {
+ if (info.explicitMin > 0) /* if "minimum" statement was present */
+ xkb->min_key_code = info.effectiveMin;
+ else
+ xkb->min_key_code = info.computedMin;
+ if (info.explicitMax > 0) /* if "maximum" statement was present */
+ xkb->max_key_code = info.effectiveMax;
+ else
+ xkb->max_key_code = info.computedMax;
+ if (XkbAllocNames(xkb, XkbKeyNamesMask | XkbIndicatorNamesMask, 0, 0)
+ == Success)
+ {
+ register int i;
+ xkb->names->keycodes = XkbInternAtom(xkb->dpy, info.name, False);
+ uDEBUG2(1, "key range: %d..%d\n", xkb->min_key_code,
+ xkb->max_key_code);
+ for (i = info.computedMin; i <= info.computedMax; i++)
+ {
+ LongToKeyName(info.names[i], xkb->names->keys[i].name);
+ uDEBUG2(2, "key %d = %s\n", i,
+ XkbKeyNameText(xkb->names->keys[i].name, XkbMessage));
+ }
+ }
+ else
+ {
+ WSGO("Cannot create XkbNamesRec in CompileKeycodes\n");
+ return False;
+ }
+ if (info.leds)
+ {
+ IndicatorNameInfo *ii;
+ if (XkbAllocIndicatorMaps(xkb) != Success)
+ {
+ WSGO("Couldn't allocate IndicatorRec in CompileKeycodes\n");
+ ACTION("Physical indicators not set\n");
+ }
+ for (ii = info.leds; ii != NULL;
+ ii = (IndicatorNameInfo *) ii->defs.next)
+ {
+ xkb->names->indicators[ii->ndx - 1] =
+ XkbInternAtom(xkb->dpy,
+ XkbAtomGetString(NULL, ii->name), False);
+ if (xkb->indicators != NULL)
+ {
+ register unsigned bit;
+ bit = 1 << (ii->ndx - 1);
+ if (ii->virtual)
+ xkb->indicators->phys_indicators &= ~bit;
+ else
+ xkb->indicators->phys_indicators |= bit;
+ }
+ }
+ }
+ if (info.aliases)
+ ApplyAliases(xkb, False, &info.aliases);
+ return True;
}
ClearKeyNamesInfo(&info);
return False;
diff --git a/app/xkbcomp/keycodes.h b/app/xkbcomp/keycodes.h
index 9333718cc..11f4460fe 100644
--- a/app/xkbcomp/keycodes.h
+++ b/app/xkbcomp/keycodes.h
@@ -1,4 +1,3 @@
-/* $Xorg: keycodes.h,v 1.3 2000/08/17 19:54:32 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,21 +23,18 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
#ifndef KEYCODES_H
#define KEYCODES_H 1
#define KeyNameToLong(n) ((((unsigned long)n[0])<<24)|(((unsigned long)n[1])<<16)|(((unsigned long)n[2])<<8)|n[3])
-extern char * longText(
- unsigned long /* val */,
- unsigned /* format */
-);
+extern char *longText(unsigned long /* val */ ,
+ unsigned /* format */
+ );
-extern void LongToKeyName(
- unsigned long /* val */,
- char * /* name_rtrn */
-);
+extern void LongToKeyName(unsigned long /* val */ ,
+ char * /* name_rtrn */
+ );
#endif /* KEYCODES_H */
diff --git a/app/xkbcomp/keymap.c b/app/xkbcomp/keymap.c
index 86e9c9e8f..a419d8c42 100644
--- a/app/xkbcomp/keymap.c
+++ b/app/xkbcomp/keymap.c
@@ -1,4 +1,3 @@
-/* $Xorg: keymap.c,v 1.3 2000/08/17 19:54:32 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
#include "xkbcomp.h"
#include "tokens.h"
@@ -41,128 +39,145 @@
#define SYMBOLS 4
#define MAX_SECTIONS 5
-XkbFile * sections[MAX_SECTIONS];
+static XkbFile *sections[MAX_SECTIONS];
+/**
+ * Compile the given file and store the output in result.
+ * @param file A list of XkbFiles, each denoting one type (e.g.
+ * XkmKeyNamesIdx, etc.)
+ */
Bool
-CompileKeymap(XkbFile *file,XkbFileInfo *result,unsigned merge)
+CompileKeymap(XkbFile * file, XkbFileInfo * result, unsigned merge)
{
-unsigned have;
-Bool ok;
-unsigned required,legal;
-unsigned mainType;
-char * mainName;
-LEDInfo * unbound= NULL;
+ 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;
+ bzero(sections, MAX_SECTIONS * sizeof(XkbFile *));
+ mainType = file->type;
+ mainName = file->name;
+ switch (mainType)
+ {
+ case XkmSemanticsFile:
+ required = XkmSemanticsRequired;
+ legal = XkmSemanticsLegal;
+ break;
+ case XkmLayoutFile: /* standard type if setxkbmap -print */
+ 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;
+ have = 0;
+ ok = 1;
+ file = (XkbFile *) file->defs;
+ /* Check for duplicate entries in the input file */
+ 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);
+ /* compile the sections we have in the file one-by-one, or fail. */
+ 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;
+ 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);
+ ok = BindIndicators(result, True, unbound, NULL);
return ok;
}
-
diff --git a/app/xkbcomp/keytypes.c b/app/xkbcomp/keytypes.c
index b09345b79..da55d755d 100644
--- a/app/xkbcomp/keytypes.c
+++ b/app/xkbcomp/keytypes.c
@@ -1,4 +1,3 @@
-/* $Xorg: keytypes.c,v 1.3 2000/08/17 19:54:32 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/keytypes.c,v 1.4 2001/01/17 23:45:44 dawes Exp $ */
#include "xkbcomp.h"
#include "tokens.h"
@@ -33,13 +31,14 @@
#include "action.h"
#include "misc.h"
-typedef struct _PreserveInfo {
- CommonInfo defs;
- short matchingMapIndex;
- unsigned char indexMods;
- unsigned char preMods;
- unsigned short indexVMods;
- unsigned short preVMods;
+typedef struct _PreserveInfo
+{
+ CommonInfo defs;
+ short matchingMapIndex;
+ unsigned char indexMods;
+ unsigned char preMods;
+ unsigned short indexVMods;
+ unsigned short preVMods;
} PreserveInfo;
#define _KT_Name (1<<0)
@@ -48,39 +47,41 @@ typedef struct _PreserveInfo {
#define _KT_Preserve (1<<3)
#define _KT_LevelNames (1<<4)
-typedef struct _KeyTypeInfo {
- CommonInfo defs;
- Display * dpy;
- Atom name;
- int fileID;
- unsigned mask;
- unsigned vmask;
- Bool groupInfo;
- int numLevels;
- int nEntries;
- int szEntries;
- XkbKTMapEntryPtr entries;
- PreserveInfo * preserve;
- int szNames;
- Atom * lvlNames;
+typedef struct _KeyTypeInfo
+{
+ CommonInfo defs;
+ Display *dpy;
+ Atom name;
+ int fileID;
+ unsigned mask;
+ unsigned vmask;
+ Bool groupInfo;
+ int numLevels;
+ int nEntries;
+ int szEntries;
+ XkbKTMapEntryPtr entries;
+ PreserveInfo *preserve;
+ int szNames;
+ Atom *lvlNames;
} KeyTypeInfo;
-typedef struct _KeyTypesInfo {
- Display * dpy;
- char * name;
- int errorCount;
- int fileID;
- unsigned stdPresent;
- int nTypes;
- KeyTypeInfo * types;
- KeyTypeInfo dflt;
- VModInfo vmods;
+typedef struct _KeyTypesInfo
+{
+ Display *dpy;
+ char *name;
+ int errorCount;
+ int fileID;
+ unsigned stdPresent;
+ int nTypes;
+ KeyTypeInfo *types;
+ KeyTypeInfo dflt;
+ VModInfo vmods;
} KeyTypesInfo;
-Atom tok_ONE_LEVEL;
-Atom tok_TWO_LEVEL;
-Atom tok_ALPHABETIC;
-Atom tok_KEYPAD;
+Atom tok_ONE_LEVEL;
+Atom tok_TWO_LEVEL;
+Atom tok_ALPHABETIC;
+Atom tok_KEYPAD;
/***====================================================================***/
@@ -91,29 +92,26 @@ Atom tok_KEYPAD;
/***====================================================================***/
-extern Bool AddMapEntry(
- XkbDescPtr /* xkb */,
- KeyTypeInfo * /* type */,
- XkbKTMapEntryPtr /* new */,
- Bool /* clobber */,
- Bool /* report */
-);
-
-extern Bool AddPreserve(
- XkbDescPtr /* xkb */,
- KeyTypeInfo * /* type */,
- PreserveInfo * /* new */,
- Bool /* clobber */,
- Bool /* report */
-);
-
-extern Bool AddLevelName(
- KeyTypeInfo * /* type */,
- unsigned /* level */,
- Atom /* name */,
- Bool /* clobber */,
- Bool /* report */
-);
+extern Bool AddMapEntry(XkbDescPtr /* xkb */ ,
+ KeyTypeInfo * /* type */ ,
+ XkbKTMapEntryPtr /* new */ ,
+ Bool /* clobber */ ,
+ Bool /* report */
+ );
+
+extern Bool AddPreserve(XkbDescPtr /* xkb */ ,
+ KeyTypeInfo * /* type */ ,
+ PreserveInfo * /* new */ ,
+ Bool /* clobber */ ,
+ Bool /* report */
+ );
+
+extern Bool AddLevelName(KeyTypeInfo * /* type */ ,
+ unsigned /* level */ ,
+ Atom /* name */ ,
+ Bool /* clobber */ ,
+ Bool /* report */
+ );
#define MapEntryTxt(t,x,e) \
XkbVModMaskText((t)->dpy,(x),(e)->mods.real_mods,(e)->mods.vmods,XkbMessage)
@@ -128,131 +126,147 @@ extern Bool AddLevelName(
/***====================================================================***/
static void
-InitKeyTypesInfo(KeyTypesInfo *info,XkbDescPtr xkb,KeyTypesInfo *from)
+InitKeyTypesInfo(KeyTypesInfo * info, XkbDescPtr xkb, KeyTypesInfo * from)
{
- tok_ONE_LEVEL= XkbInternAtom(NULL,"ONE_LEVEL",False);
- tok_TWO_LEVEL= XkbInternAtom(NULL,"TWO_LEVEL",False);
- tok_ALPHABETIC= XkbInternAtom(NULL,"ALPHABETIC",False);
- tok_KEYPAD= XkbInternAtom(NULL,"KEYPAD",False);
- info->dpy= NULL;
- info->name= uStringDup("default");
- info->errorCount= 0;
- info->stdPresent= 0;
- info->nTypes= 0;
- info->types= NULL;
- info->dflt.defs.defined= 0;
- info->dflt.defs.fileID= 0;
- info->dflt.defs.merge= MergeOverride;
- info->dflt.defs.next= NULL;
- info->dflt.name= None;
- info->dflt.mask= 0;
- info->dflt.vmask= 0;
- info->dflt.groupInfo= False;
- info->dflt.numLevels= 1;
- info->dflt.nEntries= info->dflt.szEntries= 0;
- info->dflt.entries= NULL;
- info->dflt.szNames= 0;
- info->dflt.lvlNames= NULL;
- info->dflt.preserve= NULL;
- InitVModInfo(&info->vmods,xkb);
- if (from!=NULL) {
- info->dpy= from->dpy;
- info->dflt= from->dflt;
- if (from->dflt.entries) {
- info->dflt.entries= uTypedCalloc(from->dflt.szEntries,
- XkbKTMapEntryRec);
- if (info->dflt.entries) {
- unsigned sz = from->dflt.nEntries*sizeof(XkbKTMapEntryRec);
- memcpy(info->dflt.entries,from->dflt.entries,sz);
- }
- }
- if (from->dflt.lvlNames) {
- info->dflt.lvlNames= uTypedCalloc(from->dflt.szNames,Atom);
- if (info->dflt.lvlNames) {
- register unsigned sz = from->dflt.szNames*sizeof(Atom);
- memcpy(info->dflt.lvlNames,from->dflt.lvlNames,sz);
- }
- }
- if (from->dflt.preserve) {
- PreserveInfo *old,*new,*last;
- last= NULL;
- old= from->dflt.preserve;
- for (;old;old=(PreserveInfo *)old->defs.next) {
- new= uTypedAlloc(PreserveInfo);
- if (!new)
- return;
- *new= *old;
- new->defs.next= NULL;
- if (last) last->defs.next= (CommonInfo *)new;
- else info->dflt.preserve= new;
- last= new;
- }
- }
+ tok_ONE_LEVEL = XkbInternAtom(NULL, "ONE_LEVEL", False);
+ tok_TWO_LEVEL = XkbInternAtom(NULL, "TWO_LEVEL", False);
+ tok_ALPHABETIC = XkbInternAtom(NULL, "ALPHABETIC", False);
+ tok_KEYPAD = XkbInternAtom(NULL, "KEYPAD", False);
+ info->dpy = NULL;
+ info->name = uStringDup("default");
+ info->errorCount = 0;
+ info->stdPresent = 0;
+ info->nTypes = 0;
+ info->types = NULL;
+ info->dflt.defs.defined = 0;
+ info->dflt.defs.fileID = 0;
+ info->dflt.defs.merge = MergeOverride;
+ info->dflt.defs.next = NULL;
+ info->dflt.name = None;
+ info->dflt.mask = 0;
+ info->dflt.vmask = 0;
+ info->dflt.groupInfo = False;
+ info->dflt.numLevels = 1;
+ info->dflt.nEntries = info->dflt.szEntries = 0;
+ info->dflt.entries = NULL;
+ info->dflt.szNames = 0;
+ info->dflt.lvlNames = NULL;
+ info->dflt.preserve = NULL;
+ InitVModInfo(&info->vmods, xkb);
+ if (from != NULL)
+ {
+ info->dpy = from->dpy;
+ info->dflt = from->dflt;
+ if (from->dflt.entries)
+ {
+ info->dflt.entries = uTypedCalloc(from->dflt.szEntries,
+ XkbKTMapEntryRec);
+ if (info->dflt.entries)
+ {
+ unsigned sz = from->dflt.nEntries * sizeof(XkbKTMapEntryRec);
+ memcpy(info->dflt.entries, from->dflt.entries, sz);
+ }
+ }
+ if (from->dflt.lvlNames)
+ {
+ info->dflt.lvlNames = uTypedCalloc(from->dflt.szNames, Atom);
+ if (info->dflt.lvlNames)
+ {
+ register unsigned sz = from->dflt.szNames * sizeof(Atom);
+ memcpy(info->dflt.lvlNames, from->dflt.lvlNames, sz);
+ }
+ }
+ if (from->dflt.preserve)
+ {
+ PreserveInfo *old, *new, *last;
+ last = NULL;
+ old = from->dflt.preserve;
+ for (; old; old = (PreserveInfo *) old->defs.next)
+ {
+ new = uTypedAlloc(PreserveInfo);
+ if (!new)
+ return;
+ *new = *old;
+ new->defs.next = NULL;
+ if (last)
+ last->defs.next = (CommonInfo *) new;
+ else
+ info->dflt.preserve = new;
+ last = new;
+ }
+ }
}
return;
}
static void
-FreeKeyTypeInfo(KeyTypeInfo *type)
+FreeKeyTypeInfo(KeyTypeInfo * type)
{
- if (type->entries!=NULL) {
- uFree(type->entries);
- type->entries= NULL;
+ if (type->entries != NULL)
+ {
+ uFree(type->entries);
+ type->entries = NULL;
}
- if (type->lvlNames!=NULL) {
- uFree(type->lvlNames);
- type->lvlNames= NULL;
+ if (type->lvlNames != NULL)
+ {
+ uFree(type->lvlNames);
+ type->lvlNames = NULL;
}
- if (type->preserve!=NULL) {
- ClearCommonInfo(&type->preserve->defs);
- type->preserve= NULL;
+ if (type->preserve != NULL)
+ {
+ ClearCommonInfo(&type->preserve->defs);
+ type->preserve = NULL;
}
return;
}
static void
-FreeKeyTypesInfo(KeyTypesInfo *info)
+FreeKeyTypesInfo(KeyTypesInfo * info)
{
- info->dpy= NULL;
+ info->dpy = NULL;
if (info->name)
- uFree(info->name);
- info->name= NULL;
- if (info->types) {
- register KeyTypeInfo *type;
- for (type= info->types;type;type=(KeyTypeInfo *)type->defs.next) {
- FreeKeyTypeInfo(type);
- }
- info->types= (KeyTypeInfo *)ClearCommonInfo(&info->types->defs);
+ uFree(info->name);
+ info->name = NULL;
+ if (info->types)
+ {
+ register KeyTypeInfo *type;
+ for (type = info->types; type; type = (KeyTypeInfo *) type->defs.next)
+ {
+ FreeKeyTypeInfo(type);
+ }
+ info->types = (KeyTypeInfo *) ClearCommonInfo(&info->types->defs);
}
FreeKeyTypeInfo(&info->dflt);
return;
}
static KeyTypeInfo *
-NextKeyType(KeyTypesInfo *info)
+NextKeyType(KeyTypesInfo * info)
{
-KeyTypeInfo * type;
-
- type= uTypedAlloc(KeyTypeInfo);
- if (type!=NULL) {
- bzero(type,sizeof(KeyTypeInfo));
- type->defs.fileID= info->fileID;
- type->dpy= info->dpy;
- info->types= (KeyTypeInfo *)AddCommonInfo(&info->types->defs,
- (CommonInfo *)type);
- info->nTypes++;
+ KeyTypeInfo *type;
+
+ type = uTypedAlloc(KeyTypeInfo);
+ if (type != NULL)
+ {
+ bzero(type, sizeof(KeyTypeInfo));
+ type->defs.fileID = info->fileID;
+ type->dpy = info->dpy;
+ info->types = (KeyTypeInfo *) AddCommonInfo(&info->types->defs,
+ (CommonInfo *) type);
+ info->nTypes++;
}
return type;
}
static KeyTypeInfo *
-FindMatchingKeyType(KeyTypesInfo *info,KeyTypeInfo *new)
+FindMatchingKeyType(KeyTypesInfo * info, KeyTypeInfo * new)
{
-KeyTypeInfo *old;
+ KeyTypeInfo *old;
- for (old=info->types;old;old=(KeyTypeInfo *)old->defs.next) {
- if (old->name==new->name)
- return old;
+ for (old = info->types; old; old = (KeyTypeInfo *) old->defs.next)
+ {
+ if (old->name == new->name)
+ return old;
}
return NULL;
}
@@ -260,900 +274,1020 @@ KeyTypeInfo *old;
static Bool
ReportTypeBadWidth(const char *type, int has, int needs)
{
- ERROR3("Key type \"%s\" has %d levels, must have %d\n",type,has,needs);
+ ERROR3("Key type \"%s\" has %d levels, must have %d\n", type, has, needs);
ACTION("Illegal type definition ignored\n");
return False;
}
static Bool
-AddKeyType(XkbDescPtr xkb,KeyTypesInfo *info,KeyTypeInfo *new)
+AddKeyType(XkbDescPtr xkb, KeyTypesInfo * info, KeyTypeInfo * new)
{
-KeyTypeInfo * old;
-
- if (new->name==tok_ONE_LEVEL) {
- if (new->numLevels>1)
- return ReportTypeBadWidth("ONE_LEVEL",new->numLevels,1);
- info->stdPresent|= XkbOneLevelMask;
+ KeyTypeInfo *old;
+
+ if (new->name == tok_ONE_LEVEL)
+ {
+ if (new->numLevels > 1)
+ return ReportTypeBadWidth("ONE_LEVEL", new->numLevels, 1);
+ info->stdPresent |= XkbOneLevelMask;
}
- else if (new->name==tok_TWO_LEVEL) {
- if (new->numLevels>2)
- return ReportTypeBadWidth("TWO_LEVEL",new->numLevels,2);
- else if (new->numLevels<2)
- new->numLevels= 2;
- info->stdPresent|= XkbTwoLevelMask;
+ else if (new->name == tok_TWO_LEVEL)
+ {
+ if (new->numLevels > 2)
+ return ReportTypeBadWidth("TWO_LEVEL", new->numLevels, 2);
+ else if (new->numLevels < 2)
+ new->numLevels = 2;
+ info->stdPresent |= XkbTwoLevelMask;
}
- else if (new->name==tok_ALPHABETIC) {
- if (new->numLevels>2)
- return ReportTypeBadWidth("ALPHABETIC",new->numLevels,2);
- else if (new->numLevels<2)
- new->numLevels= 2;
- info->stdPresent|= XkbAlphabeticMask;
+ else if (new->name == tok_ALPHABETIC)
+ {
+ if (new->numLevels > 2)
+ return ReportTypeBadWidth("ALPHABETIC", new->numLevels, 2);
+ else if (new->numLevels < 2)
+ new->numLevels = 2;
+ info->stdPresent |= XkbAlphabeticMask;
}
- else if (new->name==tok_KEYPAD) {
- if (new->numLevels>2)
- return ReportTypeBadWidth("KEYPAD",new->numLevels,2);
- else if (new->numLevels<2)
- new->numLevels= 2;
- info->stdPresent|= XkbKeypadMask;
+ else if (new->name == tok_KEYPAD)
+ {
+ if (new->numLevels > 2)
+ return ReportTypeBadWidth("KEYPAD", new->numLevels, 2);
+ else if (new->numLevels < 2)
+ new->numLevels = 2;
+ info->stdPresent |= XkbKeypadMask;
}
- old= FindMatchingKeyType(info,new);
- if (old!=NULL) {
- Bool report;
- if ((new->defs.merge==MergeReplace)||(new->defs.merge==MergeOverride)) {
- KeyTypeInfo *next= (KeyTypeInfo *)old->defs.next;
- if (((old->defs.fileID==new->defs.fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- WARN1("Multiple definitions of the %s key type\n",
- XkbAtomGetString(NULL,new->name));
- ACTION("Earlier definition ignored\n");
- }
- FreeKeyTypeInfo(old);
- *old= *new;
- new->szEntries= new->nEntries= 0;
- new->entries= NULL;
- new->preserve= NULL;
- new->lvlNames= NULL;
- old->defs.next= &next->defs;
- return True;
- }
- report= (old->defs.fileID==new->defs.fileID)&&(warningLevel>0);
- if (report) {
- WARN1("Multiple definitions of the %s key type\n",
- XkbAtomGetString(NULL,new->name));
- ACTION("Later definition ignored\n");
- }
- FreeKeyTypeInfo(new);
- return True;
+ old = FindMatchingKeyType(info, new);
+ if (old != NULL)
+ {
+ Bool report;
+ if ((new->defs.merge == MergeReplace)
+ || (new->defs.merge == MergeOverride))
+ {
+ KeyTypeInfo *next = (KeyTypeInfo *) old->defs.next;
+ if (((old->defs.fileID == new->defs.fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ WARN1("Multiple definitions of the %s key type\n",
+ XkbAtomGetString(NULL, new->name));
+ ACTION("Earlier definition ignored\n");
+ }
+ FreeKeyTypeInfo(old);
+ *old = *new;
+ new->szEntries = new->nEntries = 0;
+ new->entries = NULL;
+ new->preserve = NULL;
+ new->lvlNames = NULL;
+ old->defs.next = &next->defs;
+ return True;
+ }
+ report = (old->defs.fileID == new->defs.fileID) && (warningLevel > 0);
+ if (report)
+ {
+ WARN1("Multiple definitions of the %s key type\n",
+ XkbAtomGetString(NULL, new->name));
+ ACTION("Later definition ignored\n");
+ }
+ FreeKeyTypeInfo(new);
+ return True;
}
- old= NextKeyType(info);
- if (old==NULL)
- return False;
- *old= *new;
- old->defs.next= NULL;
- new->nEntries= new->szEntries= 0;
- new->entries= NULL;
- new->szNames= 0;
- new->lvlNames= NULL;
- new->preserve= NULL;
+ old = NextKeyType(info);
+ if (old == NULL)
+ return False;
+ *old = *new;
+ old->defs.next = NULL;
+ new->nEntries = new->szEntries = 0;
+ new->entries = NULL;
+ new->szNames = 0;
+ new->lvlNames = NULL;
+ new->preserve = NULL;
return True;
}
/***====================================================================***/
static void
-MergeIncludedKeyTypes( KeyTypesInfo * into,
- KeyTypesInfo * from,
- unsigned merge,
- XkbDescPtr xkb)
+MergeIncludedKeyTypes(KeyTypesInfo * into,
+ KeyTypesInfo * from, unsigned merge, XkbDescPtr xkb)
{
-KeyTypeInfo * type;
+ KeyTypeInfo *type;
- if (from->errorCount>0) {
- into->errorCount+= from->errorCount;
- return;
+ if (from->errorCount > 0)
+ {
+ into->errorCount += from->errorCount;
+ return;
}
- if (into->name==NULL) {
- into->name= from->name;
- from->name= NULL;
+ if (into->name == NULL)
+ {
+ into->name = from->name;
+ from->name = NULL;
}
- for (type=from->types;type;type=(KeyTypeInfo *)type->defs.next) {
- if (merge!=MergeDefault)
- type->defs.merge= merge;
- if (!AddKeyType(xkb,into,type))
- into->errorCount++;
+ for (type = from->types; type; type = (KeyTypeInfo *) type->defs.next)
+ {
+ if (merge != MergeDefault)
+ type->defs.merge = merge;
+ if (!AddKeyType(xkb, into, type))
+ into->errorCount++;
}
- into->stdPresent|= from->stdPresent;
+ into->stdPresent |= from->stdPresent;
return;
}
-typedef void (*FileHandler)(
- XkbFile * /* file */,
- XkbDescPtr /* xkb */,
- unsigned /* merge */,
- KeyTypesInfo * /* included */
-);
+typedef void (*FileHandler) (XkbFile * /* file */ ,
+ XkbDescPtr /* xkb */ ,
+ unsigned /* merge */ ,
+ KeyTypesInfo * /* included */
+ );
static Bool
-HandleIncludeKeyTypes( IncludeStmt * stmt,
- XkbDescPtr xkb,
- KeyTypesInfo * info,
- FileHandler hndlr)
+HandleIncludeKeyTypes(IncludeStmt * stmt,
+ XkbDescPtr xkb, KeyTypesInfo * info, FileHandler hndlr)
{
-unsigned newMerge;
-XkbFile * rtrn;
-KeyTypesInfo included;
-Bool haveSelf;
-
- haveSelf= False;
- if ((stmt->file==NULL)&&(stmt->map==NULL)) {
- haveSelf= True;
- included= *info;
- bzero(info,sizeof(KeyTypesInfo));
+ unsigned newMerge;
+ XkbFile *rtrn;
+ KeyTypesInfo included;
+ Bool haveSelf;
+
+ haveSelf = False;
+ if ((stmt->file == NULL) && (stmt->map == NULL))
+ {
+ haveSelf = True;
+ included = *info;
+ bzero(info, sizeof(KeyTypesInfo));
}
- else if (ProcessIncludeFile(stmt,XkmTypesIndex,&rtrn,&newMerge)) {
- InitKeyTypesInfo(&included,xkb,info);
- included.fileID= included.dflt.defs.fileID= rtrn->id;
- included.dflt.defs.merge= newMerge;
-
- (*hndlr)(rtrn,xkb,newMerge,&included);
- if (stmt->stmt!=NULL) {
- if (included.name!=NULL)
- uFree(included.name);
- included.name= stmt->stmt;
- stmt->stmt= NULL;
- }
+ else if (ProcessIncludeFile(stmt, XkmTypesIndex, &rtrn, &newMerge))
+ {
+ InitKeyTypesInfo(&included, xkb, info);
+ included.fileID = included.dflt.defs.fileID = rtrn->id;
+ included.dflt.defs.merge = newMerge;
+
+ (*hndlr) (rtrn, xkb, newMerge, &included);
+ if (stmt->stmt != NULL)
+ {
+ if (included.name != NULL)
+ uFree(included.name);
+ included.name = stmt->stmt;
+ stmt->stmt = NULL;
+ }
}
- else {
- info->errorCount+= 10;
- return False;
+ else
+ {
+ info->errorCount += 10;
+ return False;
}
- if ((stmt->next!=NULL)&&(included.errorCount<1)) {
- IncludeStmt * next;
- unsigned op;
- KeyTypesInfo next_incl;
-
- for (next=stmt->next;next!=NULL;next=next->next) {
- if ((next->file==NULL)&&(next->map==NULL)) {
- haveSelf= True;
- MergeIncludedKeyTypes(&included,info,next->merge,xkb);
- FreeKeyTypesInfo(info);
- }
- else if (ProcessIncludeFile(next,XkmTypesIndex,&rtrn,&op)) {
- InitKeyTypesInfo(&next_incl,xkb,&included);
- next_incl.fileID= next_incl.dflt.defs.fileID= rtrn->id;
- next_incl.dflt.defs.merge= op;
- (*hndlr)(rtrn,xkb,op,&next_incl);
- MergeIncludedKeyTypes(&included,&next_incl,op,xkb);
- FreeKeyTypesInfo(&next_incl);
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- }
+ if ((stmt->next != NULL) && (included.errorCount < 1))
+ {
+ IncludeStmt *next;
+ unsigned op;
+ KeyTypesInfo next_incl;
+
+ for (next = stmt->next; next != NULL; next = next->next)
+ {
+ if ((next->file == NULL) && (next->map == NULL))
+ {
+ haveSelf = True;
+ MergeIncludedKeyTypes(&included, info, next->merge, xkb);
+ FreeKeyTypesInfo(info);
+ }
+ else if (ProcessIncludeFile(next, XkmTypesIndex, &rtrn, &op))
+ {
+ InitKeyTypesInfo(&next_incl, xkb, &included);
+ next_incl.fileID = next_incl.dflt.defs.fileID = rtrn->id;
+ next_incl.dflt.defs.merge = op;
+ (*hndlr) (rtrn, xkb, op, &next_incl);
+ MergeIncludedKeyTypes(&included, &next_incl, op, xkb);
+ FreeKeyTypesInfo(&next_incl);
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ }
}
if (haveSelf)
- *info= included;
- else {
- MergeIncludedKeyTypes(info,&included,newMerge,xkb);
- FreeKeyTypesInfo(&included);
+ *info = included;
+ else
+ {
+ MergeIncludedKeyTypes(info, &included, newMerge, xkb);
+ FreeKeyTypesInfo(&included);
}
- return (info->errorCount==0);
+ return (info->errorCount == 0);
}
/***====================================================================***/
static XkbKTMapEntryPtr
-FindMatchingMapEntry(KeyTypeInfo *type,unsigned mask,unsigned vmask)
+FindMatchingMapEntry(KeyTypeInfo * type, unsigned mask, unsigned vmask)
{
-register int i;
-XkbKTMapEntryPtr entry;
+ register int i;
+ XkbKTMapEntryPtr entry;
- for (i=0,entry=type->entries;i<type->nEntries;i++,entry++) {
- if ((entry->mods.real_mods==mask)&&(entry->mods.vmods==vmask))
- return entry;
+ for (i = 0, entry = type->entries; i < type->nEntries; i++, entry++)
+ {
+ if ((entry->mods.real_mods == mask) && (entry->mods.vmods == vmask))
+ return entry;
}
return NULL;
}
static void
-DeleteLevel1MapEntries(KeyTypeInfo *type)
+DeleteLevel1MapEntries(KeyTypeInfo * type)
{
-register int i,n;
-
- for (i=0;i<type->nEntries;i++) {
- if (type->entries[i].level==0) {
- for (n=i;n<type->nEntries-1;n++) {
- type->entries[n]= type->entries[n+1];
- }
- type->nEntries--;
- }
+ register int i, n;
+
+ for (i = 0; i < type->nEntries; i++)
+ {
+ if (type->entries[i].level == 0)
+ {
+ for (n = i; n < type->nEntries - 1; n++)
+ {
+ type->entries[n] = type->entries[n + 1];
+ }
+ type->nEntries--;
+ }
}
return;
}
+/**
+ * Return a pointer to the next free XkbKTMapEntry, reallocating space if
+ * necessary.
+ */
static XkbKTMapEntryPtr
-NextMapEntry(KeyTypeInfo *type)
+NextMapEntry(KeyTypeInfo * type)
{
- if (type->entries==NULL) {
- type->entries= uTypedCalloc(2,XkbKTMapEntryRec);
- if (type->entries==NULL) {
- ERROR1("Couldn't allocate map entries for %s\n",TypeTxt(type));
- ACTION("Map entries lost\n");
- return NULL;
- }
- type->szEntries= 2;
- type->nEntries= 0;
+ if (type->entries == NULL)
+ {
+ type->entries = uTypedCalloc(2, XkbKTMapEntryRec);
+ if (type->entries == NULL)
+ {
+ ERROR1("Couldn't allocate map entries for %s\n", TypeTxt(type));
+ ACTION("Map entries lost\n");
+ return NULL;
+ }
+ type->szEntries = 2;
+ type->nEntries = 0;
}
- else if (type->nEntries>=type->szEntries) {
- type->szEntries*=2;
- type->entries= uTypedRecalloc(type->entries,
- type->nEntries,type->szEntries,
- XkbKTMapEntryRec);
- if (type->entries==NULL) {
- ERROR1("Couldn't reallocate map entries for %s\n",TypeTxt(type));
- ACTION("Map entries lost\n");
- return NULL;
- }
+ else if (type->nEntries >= type->szEntries)
+ {
+ type->szEntries *= 2;
+ type->entries = uTypedRecalloc(type->entries,
+ type->nEntries, type->szEntries,
+ XkbKTMapEntryRec);
+ if (type->entries == NULL)
+ {
+ ERROR1("Couldn't reallocate map entries for %s\n", TypeTxt(type));
+ ACTION("Map entries lost\n");
+ return NULL;
+ }
}
return &type->entries[type->nEntries++];
}
Bool
-AddPreserve( XkbDescPtr xkb,
- KeyTypeInfo * type,
- PreserveInfo * new,
- Bool clobber,
- Bool report)
+AddPreserve(XkbDescPtr xkb,
+ KeyTypeInfo * type, PreserveInfo * new, Bool clobber, Bool report)
{
-PreserveInfo *old;
-
- old= type->preserve;
- while (old!=NULL) {
- if ((old->indexMods!=new->indexMods)||
- (old->indexVMods!=new->indexVMods)) {
- old= (PreserveInfo *)old->defs.next;
- continue;
- }
- if ((old->preMods==new->preMods)&&(old->preVMods==new->preVMods)) {
- if (warningLevel>9) {
+ PreserveInfo *old;
+
+ old = type->preserve;
+ while (old != NULL)
+ {
+ if ((old->indexMods != new->indexMods) ||
+ (old->indexVMods != new->indexVMods))
+ {
+ old = (PreserveInfo *) old->defs.next;
+ continue;
+ }
+ if ((old->preMods == new->preMods)
+ && (old->preVMods == new->preVMods))
+ {
+ if (warningLevel > 9)
+ {
WARN2("Identical definitions for preserve[%s] in %s\n",
- PreserveIndexTxt(type,xkb,old),TypeTxt(type));
+ PreserveIndexTxt(type, xkb, old), TypeTxt(type));
ACTION("Ignored\n");
- }
- return True;
- }
- if (report && (warningLevel>0)) {
- char *str;
- WARN2("Multiple definitions for preserve[%s] in %s\n",
- PreserveIndexTxt(type,xkb,old),TypeTxt(type));
-
- if (clobber) str= PreserveTxt(type,xkb,new);
- else str= PreserveTxt(type,xkb,old);
- ACTION1("Using %s, ",str);
- if (clobber) str= PreserveTxt(type,xkb,old);
- else str= PreserveTxt(type,xkb,new);
- INFO1("ignoring %s\n",str);
- }
- if (clobber) {
- old->preMods= new->preMods;
- old->preVMods= new->preVMods;
- }
- return True;
+ }
+ return True;
+ }
+ if (report && (warningLevel > 0))
+ {
+ char *str;
+ WARN2("Multiple definitions for preserve[%s] in %s\n",
+ PreserveIndexTxt(type, xkb, old), TypeTxt(type));
+
+ if (clobber)
+ str = PreserveTxt(type, xkb, new);
+ else
+ str = PreserveTxt(type, xkb, old);
+ ACTION1("Using %s, ", str);
+ if (clobber)
+ str = PreserveTxt(type, xkb, old);
+ else
+ str = PreserveTxt(type, xkb, new);
+ INFO1("ignoring %s\n", str);
+ }
+ if (clobber)
+ {
+ old->preMods = new->preMods;
+ old->preVMods = new->preVMods;
+ }
+ return True;
}
- old= uTypedAlloc(PreserveInfo);
- if (!old) {
- WSGO1("Couldn't allocate preserve in %s\n",TypeTxt(type));
- ACTION1("Preserve[%s] lost\n",PreserveIndexTxt(type,xkb,old));
- return False;
+ old = uTypedAlloc(PreserveInfo);
+ if (!old)
+ {
+ WSGO1("Couldn't allocate preserve in %s\n", TypeTxt(type));
+ ACTION1("Preserve[%s] lost\n", PreserveIndexTxt(type, xkb, old));
+ return False;
}
- *old= *new;
- old->matchingMapIndex= -1;
- type->preserve=(PreserveInfo*)AddCommonInfo(&type->preserve->defs,&old->defs);
+ *old = *new;
+ old->matchingMapIndex = -1;
+ type->preserve =
+ (PreserveInfo *) AddCommonInfo(&type->preserve->defs, &old->defs);
return True;
}
+/**
+ * Add a new KTMapEntry to the given key type. If an entry with the same mods
+ * already exists, the level is updated (if clobber is TRUE). Otherwise, a new
+ * entry is created.
+ *
+ * @param clobber Overwrite existing entry.
+ * @param report True if a warning is to be printed on.
+ */
Bool
-AddMapEntry( XkbDescPtr xkb,
- KeyTypeInfo * type,
- XkbKTMapEntryPtr new,
- Bool clobber,
- Bool report)
+AddMapEntry(XkbDescPtr xkb,
+ KeyTypeInfo * type,
+ XkbKTMapEntryPtr new, Bool clobber, Bool report)
{
-XkbKTMapEntryPtr old;
-
- if ((old=FindMatchingMapEntry(type,new->mods.real_mods,new->mods.vmods))) {
- if (report&&(old->level!=new->level)) {
- unsigned use,ignore;
- if (clobber) {
- use= new->level+1;
- ignore= old->level+1;
- }
- else {
- use= old->level+1;
- ignore= new->level+1;
- }
- WARN2("Multiple map entries for %s in %s\n",
- MapEntryTxt(type,xkb,new),TypeTxt(type));
- ACTION2("Using %d, ignoring %d\n",use,ignore);
- }
- else if (warningLevel>9) {
- WARN3("Multiple occurences of map[%s]= %d in %s\n",
- MapEntryTxt(type,xkb,new),new->level+1,TypeTxt(type));
- ACTION("Ignored\n");
- return True;
- }
- if (clobber)
- old->level= new->level;
- return True;
+ XkbKTMapEntryPtr old;
+
+ if ((old =
+ FindMatchingMapEntry(type, new->mods.real_mods, new->mods.vmods)))
+ {
+ if (report && (old->level != new->level))
+ {
+ unsigned use, ignore;
+ if (clobber)
+ {
+ use = new->level + 1;
+ ignore = old->level + 1;
+ }
+ else
+ {
+ use = old->level + 1;
+ ignore = new->level + 1;
+ }
+ WARN2("Multiple map entries for %s in %s\n",
+ MapEntryTxt(type, xkb, new), TypeTxt(type));
+ ACTION2("Using %d, ignoring %d\n", use, ignore);
+ }
+ else if (warningLevel > 9)
+ {
+ WARN3("Multiple occurences of map[%s]= %d in %s\n",
+ MapEntryTxt(type, xkb, new), new->level + 1, TypeTxt(type));
+ ACTION("Ignored\n");
+ return True;
+ }
+ if (clobber)
+ old->level = new->level;
+ return True;
}
- if ((old=NextMapEntry(type))==NULL)
- return False; /* allocation failure, already reported */
- if (new->level>=type->numLevels)
- type->numLevels= new->level+1;
- if (new->mods.vmods==0) old->active= True;
- else old->active= False;
- old->mods.mask= new->mods.real_mods;
- old->mods.real_mods= new->mods.real_mods;
- old->mods.vmods= new->mods.vmods;
- old->level= new->level;
+ if ((old = NextMapEntry(type)) == NULL)
+ return False; /* allocation failure, already reported */
+ if (new->level >= type->numLevels)
+ type->numLevels = new->level + 1;
+ if (new->mods.vmods == 0)
+ old->active = True;
+ else
+ old->active = False;
+ old->mods.mask = new->mods.real_mods;
+ old->mods.real_mods = new->mods.real_mods;
+ old->mods.vmods = new->mods.vmods;
+ old->level = new->level;
return True;
}
static LookupEntry lnames[] = {
- { "level1", 1 },
- { "level2", 2 },
- { "level3", 3 },
- { "level4", 4 },
- { "level5", 5 },
- { "level6", 6 },
- { "level7", 7 },
- { "level8", 8 },
- { NULL, 0 }
+ {"level1", 1},
+ {"level2", 2},
+ {"level3", 3},
+ {"level4", 4},
+ {"level5", 5},
+ {"level6", 6},
+ {"level7", 7},
+ {"level8", 8},
+ {NULL, 0}
};
static Bool
-SetMapEntry( KeyTypeInfo * type,
- XkbDescPtr xkb,
- ExprDef * arrayNdx,
- ExprDef * value)
+SetMapEntry(KeyTypeInfo * type,
+ XkbDescPtr xkb, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult rtrn;
-XkbKTMapEntryRec entry;
-
- if (arrayNdx==NULL)
- return ReportTypeShouldBeArray(type,"map entry");
- if (!ExprResolveModMask(arrayNdx,&rtrn,LookupVModMask,(XPointer)xkb))
- return ReportTypeBadType(type,"map entry","modifier mask");
- entry.mods.real_mods= rtrn.uval&0xff;
- entry.mods.vmods= (rtrn.uval>>8)&0xffff;
- if ((entry.mods.real_mods&(~type->mask))||
- ((entry.mods.vmods&(~type->vmask))!=0)) {
- if (warningLevel>0) {
- WARN1("Map entry for unused modifiers in %s\n",TypeTxt(type));
- ACTION1("Using %s instead of ",XkbVModMaskText(type->dpy,xkb,
- entry.mods.real_mods&type->mask,
- entry.mods.vmods&type->vmask,
- XkbMessage));
- INFO1("%s\n",MapEntryTxt(type,xkb,&entry));
- }
- entry.mods.real_mods&= type->mask;
- entry.mods.vmods&= type->vmask;
+ ExprResult rtrn;
+ XkbKTMapEntryRec entry;
+
+ if (arrayNdx == NULL)
+ return ReportTypeShouldBeArray(type, "map entry");
+ if (!ExprResolveModMask(arrayNdx, &rtrn, LookupVModMask, (XPointer) xkb))
+ return ReportTypeBadType(type, "map entry", "modifier mask");
+ entry.mods.real_mods = rtrn.uval & 0xff; /* modifiers < 512 */
+ entry.mods.vmods = (rtrn.uval >> 8) & 0xffff; /* modifiers > 512 */
+ if ((entry.mods.real_mods & (~type->mask)) ||
+ ((entry.mods.vmods & (~type->vmask)) != 0))
+ {
+ if (warningLevel > 0)
+ {
+ WARN1("Map entry for unused modifiers in %s\n", TypeTxt(type));
+ ACTION1("Using %s instead of ",
+ XkbVModMaskText(type->dpy, xkb,
+ entry.mods.real_mods & type->mask,
+ entry.mods.vmods & type->vmask,
+ XkbMessage));
+ INFO1("%s\n", MapEntryTxt(type, xkb, &entry));
+ }
+ entry.mods.real_mods &= type->mask;
+ entry.mods.vmods &= type->vmask;
}
- if (!ExprResolveInteger(value,&rtrn,SimpleLookup,(XPointer)lnames)) {
- ERROR("Level specifications in a key type must be integer\n");
- ACTION("Ignoring malformed level specification\n");
- return False;
+ if (!ExprResolveInteger(value, &rtrn, SimpleLookup, (XPointer) lnames))
+ {
+ ERROR("Level specifications in a key type must be integer\n");
+ ACTION("Ignoring malformed level specification\n");
+ return False;
}
- if ((rtrn.ival<1)||(rtrn.ival>XkbMaxShiftLevel+1)) {
- ERROR3("Shift level %d out of range (1..%d) in key type %s\n",
- XkbMaxShiftLevel+1,
- rtrn.ival,TypeTxt(type));
- ACTION1("Ignoring illegal definition of map[%s]\n",
- MapEntryTxt(type,xkb,&entry));
- return False;
+ if ((rtrn.ival < 1) || (rtrn.ival > XkbMaxShiftLevel + 1))
+ {
+ ERROR3("Shift level %d out of range (1..%d) in key type %s\n",
+ XkbMaxShiftLevel + 1, rtrn.ival, TypeTxt(type));
+ ACTION1("Ignoring illegal definition of map[%s]\n",
+ MapEntryTxt(type, xkb, &entry));
+ return False;
}
- entry.level= rtrn.ival-1;
- return AddMapEntry(xkb,type,&entry,True,True);
+ entry.level = rtrn.ival - 1;
+ return AddMapEntry(xkb, type, &entry, True, True);
}
static Bool
-SetPreserve( KeyTypeInfo * type,
- XkbDescPtr xkb,
- ExprDef * arrayNdx,
- ExprDef * value)
+SetPreserve(KeyTypeInfo * type,
+ XkbDescPtr xkb, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult rtrn;
-PreserveInfo new;
-
- if (arrayNdx==NULL)
- return ReportTypeShouldBeArray(type,"preserve entry");
- if (!ExprResolveModMask(arrayNdx,&rtrn,LookupVModMask,(XPointer)xkb))
- return ReportTypeBadType(type,"preserve entry","modifier mask");
- new.defs= type->defs;
- new.defs.next= NULL;
- new.indexMods= rtrn.uval&0xff;
- new.indexVMods= (rtrn.uval>>8)&0xffff;
- if ((new.indexMods&(~type->mask))||(new.indexVMods&(~type->vmask))) {
- if (warningLevel>0) {
- WARN1("Preserve for modifiers not used by the %s type\n",
- TypeTxt(type));
- ACTION1("Index %s converted to ",PreserveIndexTxt(type,xkb,&new));
- }
- new.indexMods&= type->mask;
- new.indexVMods&= type->vmask;
- if (warningLevel>0)
- INFO1("%s\n",PreserveIndexTxt(type,xkb,&new));
+ ExprResult rtrn;
+ PreserveInfo new;
+
+ if (arrayNdx == NULL)
+ return ReportTypeShouldBeArray(type, "preserve entry");
+ if (!ExprResolveModMask(arrayNdx, &rtrn, LookupVModMask, (XPointer) xkb))
+ return ReportTypeBadType(type, "preserve entry", "modifier mask");
+ new.defs = type->defs;
+ new.defs.next = NULL;
+ new.indexMods = rtrn.uval & 0xff;
+ new.indexVMods = (rtrn.uval >> 8) & 0xffff;
+ if ((new.indexMods & (~type->mask)) || (new.indexVMods & (~type->vmask)))
+ {
+ if (warningLevel > 0)
+ {
+ WARN1("Preserve for modifiers not used by the %s type\n",
+ TypeTxt(type));
+ ACTION1("Index %s converted to ",
+ PreserveIndexTxt(type, xkb, &new));
+ }
+ new.indexMods &= type->mask;
+ new.indexVMods &= type->vmask;
+ if (warningLevel > 0)
+ INFO1("%s\n", PreserveIndexTxt(type, xkb, &new));
}
- if (!ExprResolveModMask(value,&rtrn,LookupVModMask,(XPointer)xkb)) {
- ERROR("Preserve value in a key type is not a modifier mask\n");
- ACTION2("Ignoring preserve[%s] in type %s\n",
- PreserveIndexTxt(type,xkb,&new),
- TypeTxt(type));
- return False;
+ if (!ExprResolveModMask(value, &rtrn, LookupVModMask, (XPointer) xkb))
+ {
+ ERROR("Preserve value in a key type is not a modifier mask\n");
+ ACTION2("Ignoring preserve[%s] in type %s\n",
+ PreserveIndexTxt(type, xkb, &new), TypeTxt(type));
+ return False;
}
- new.preMods= rtrn.uval&0xff;
- new.preVMods= (rtrn.uval>>16)&0xffff;
- if ((new.preMods&(~new.indexMods))||(new.preVMods&&(~new.indexVMods))) {
- if (warningLevel>0) {
- WARN2("Illegal value for preserve[%s] in type %s\n",
- PreserveTxt(type,xkb,&new),
- TypeTxt(type));
- ACTION1("Converted %s to ",PreserveIndexTxt(type,xkb,&new));
- }
- new.preMods&= new.indexMods;
- new.preVMods&= new.indexVMods;
- if (warningLevel>0) {
- INFO1("%s\n",PreserveIndexTxt(type,xkb,&new));
- }
+ new.preMods = rtrn.uval & 0xff;
+ new.preVMods = (rtrn.uval >> 16) & 0xffff;
+ if ((new.preMods & (~new.indexMods))
+ || (new.preVMods && (~new.indexVMods)))
+ {
+ if (warningLevel > 0)
+ {
+ WARN2("Illegal value for preserve[%s] in type %s\n",
+ PreserveTxt(type, xkb, &new), TypeTxt(type));
+ ACTION1("Converted %s to ", PreserveIndexTxt(type, xkb, &new));
+ }
+ new.preMods &= new.indexMods;
+ new.preVMods &= new.indexVMods;
+ if (warningLevel > 0)
+ {
+ INFO1("%s\n", PreserveIndexTxt(type, xkb, &new));
+ }
}
- return AddPreserve(xkb,type,&new,True,True);
+ return AddPreserve(xkb, type, &new, True, True);
}
/***====================================================================***/
Bool
-AddLevelName( KeyTypeInfo * type,
- unsigned level,
- Atom name,
- Bool clobber,
- Bool report)
+AddLevelName(KeyTypeInfo * type,
+ unsigned level, Atom name, Bool clobber, Bool report)
{
- if ((type->lvlNames==NULL)||(type->szNames<=level)) {
- type->lvlNames=
- uTypedRecalloc(type->lvlNames,type->szNames,level+1,Atom);
- if (type->lvlNames==NULL) {
- ERROR1("Couldn't allocate level names for type %s\n",TypeTxt(type));
- ACTION("Level names lost\n");
- type->szNames= 0;
- return False;
- }
- type->szNames= level+1;
+ if ((type->lvlNames == NULL) || (type->szNames <= level))
+ {
+ type->lvlNames =
+ uTypedRecalloc(type->lvlNames, type->szNames, level + 1, Atom);
+ if (type->lvlNames == NULL)
+ {
+ ERROR1("Couldn't allocate level names for type %s\n",
+ TypeTxt(type));
+ ACTION("Level names lost\n");
+ type->szNames = 0;
+ return False;
+ }
+ type->szNames = level + 1;
}
- else if (type->lvlNames[level]==name) {
- if (warningLevel>9) {
- WARN2("Duplicate names for level %d of key type %s\n",level+1,
- TypeTxt(type));
- ACTION("Ignored\n");
- }
- return True;
+ else if (type->lvlNames[level] == name)
+ {
+ if (warningLevel > 9)
+ {
+ WARN2("Duplicate names for level %d of key type %s\n",
+ level + 1, TypeTxt(type));
+ ACTION("Ignored\n");
+ }
+ return True;
}
- else if (type->lvlNames[level]!=None) {
- if (warningLevel>0) {
- char *old,*new;
- old= XkbAtomText(type->dpy,type->lvlNames[level],XkbMessage);
- new= XkbAtomText(type->dpy,name,XkbMessage);
- WARN2("Multiple names for level %d of key type %s\n",level+1,
- TypeTxt(type));
- if (clobber)
- ACTION2("Using %s, ignoring %s\n",new,old);
- else ACTION2("Using %s, ignoring %s\n",old,new);
- }
- if (!clobber)
- return True;
+ else if (type->lvlNames[level] != None)
+ {
+ if (warningLevel > 0)
+ {
+ char *old, *new;
+ old = XkbAtomText(type->dpy, type->lvlNames[level], XkbMessage);
+ new = XkbAtomText(type->dpy, name, XkbMessage);
+ WARN2("Multiple names for level %d of key type %s\n",
+ level + 1, TypeTxt(type));
+ if (clobber)
+ ACTION2("Using %s, ignoring %s\n", new, old);
+ else
+ ACTION2("Using %s, ignoring %s\n", old, new);
+ }
+ if (!clobber)
+ return True;
}
- if (level>=type->numLevels)
- type->numLevels= level+1;
- type->lvlNames[level]= name;
+ if (level >= type->numLevels)
+ type->numLevels = level + 1;
+ type->lvlNames[level] = name;
return True;
}
static Bool
-SetLevelName(KeyTypeInfo *type,ExprDef *arrayNdx,ExprDef *value)
+SetLevelName(KeyTypeInfo * type, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult rtrn;
-unsigned level;
-
- if (arrayNdx==NULL)
- return ReportTypeShouldBeArray(type,"level name");
- if (!ExprResolveInteger(arrayNdx,&rtrn,SimpleLookup,(XPointer)lnames))
- return ReportTypeBadType(type,"level name","integer");
- if ((rtrn.ival<1)||(rtrn.ival>XkbMaxShiftLevel+1)) {
- ERROR3("Level name %d out of range (1..%d) in key type %s\n",
- rtrn.ival,
- XkbMaxShiftLevel+1,
- XkbAtomText(type->dpy,type->name,XkbMessage));
- ACTION("Ignoring illegal level name definition\n");
- return False;
+ ExprResult rtrn;
+ unsigned level;
+
+ if (arrayNdx == NULL)
+ return ReportTypeShouldBeArray(type, "level name");
+ if (!ExprResolveInteger(arrayNdx, &rtrn, SimpleLookup, (XPointer) lnames))
+ return ReportTypeBadType(type, "level name", "integer");
+ if ((rtrn.ival < 1) || (rtrn.ival > XkbMaxShiftLevel + 1))
+ {
+ ERROR3("Level name %d out of range (1..%d) in key type %s\n",
+ rtrn.ival,
+ XkbMaxShiftLevel + 1,
+ XkbAtomText(type->dpy, type->name, XkbMessage));
+ ACTION("Ignoring illegal level name definition\n");
+ return False;
}
- level= rtrn.ival-1;
- if (!ExprResolveString(value,&rtrn,NULL,NULL)) {
- ERROR2("Non-string name for level %d in key type %s\n",level+1,
- XkbAtomText(type->dpy,type->name,XkbMessage));
- ACTION("Ignoring illegal level name definition\n");
- return False;
+ level = rtrn.ival - 1;
+ if (!ExprResolveString(value, &rtrn, NULL, NULL))
+ {
+ ERROR2("Non-string name for level %d in key type %s\n", level + 1,
+ XkbAtomText(type->dpy, type->name, XkbMessage));
+ ACTION("Ignoring illegal level name definition\n");
+ return False;
}
- return
- AddLevelName(type,level,XkbInternAtom(NULL,rtrn.str,False),True,True);
+ return
+ AddLevelName(type, level, XkbInternAtom(NULL, rtrn.str, False), True,
+ True);
}
/***====================================================================***/
+/**
+ * Parses the fields in a type "..." { } description.
+ *
+ * @param field The field to parse (e.g. modifiers, map, level_name)
+ */
static Bool
-SetKeyTypeField( KeyTypeInfo * type,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- KeyTypesInfo * info)
+SetKeyTypeField(KeyTypeInfo * type,
+ XkbDescPtr xkb,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, KeyTypesInfo * info)
{
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"modifiers")==0) {
- unsigned mods,vmods;
- if (arrayNdx!=NULL) {
- WARN("The modifiers field of a key type is not an array\n");
- ACTION("Illegal array subscript ignored\n");
- }
- if (!ExprResolveModMask(value,&tmp,LookupVModMask,(XPointer)xkb)) {
- ERROR("Key type mask field must be a modifier mask\n");
- ACTION("Key type definition ignored\n");
- return False;
- }
- mods= tmp.uval&0xff;
- vmods= (tmp.uval>>8)&0xffff;
- if (type->defs.defined&_KT_Mask) {
- WARN1("Multiple modifier mask definitions for key type %s\n",
- XkbAtomText(type->dpy,type->name,XkbMessage));
- ACTION1("Using %s, ",TypeMaskTxt(type,xkb));
- INFO1("ignoring %s\n",XkbVModMaskText(type->dpy,xkb,mods,
- vmods,
- XkbMessage));
- return False;
- }
- type->mask= mods;
- type->vmask= vmods;
- type->defs.defined|= _KT_Mask;
- return True;
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "modifiers") == 0)
+ {
+ unsigned mods, vmods;
+ if (arrayNdx != NULL)
+ {
+ WARN("The modifiers field of a key type is not an array\n");
+ ACTION("Illegal array subscript ignored\n");
+ }
+ /* get modifier mask for current type */
+ if (!ExprResolveModMask(value, &tmp, LookupVModMask, (XPointer) xkb))
+ {
+ ERROR("Key type mask field must be a modifier mask\n");
+ ACTION("Key type definition ignored\n");
+ return False;
+ }
+ mods = tmp.uval & 0xff; /* core mods */
+ vmods = (tmp.uval >> 8) & 0xffff; /* xkb virtual mods */
+ if (type->defs.defined & _KT_Mask)
+ {
+ WARN1("Multiple modifier mask definitions for key type %s\n",
+ XkbAtomText(type->dpy, type->name, XkbMessage));
+ ACTION1("Using %s, ", TypeMaskTxt(type, xkb));
+ INFO1("ignoring %s\n", XkbVModMaskText(type->dpy, xkb, mods,
+ vmods, XkbMessage));
+ return False;
+ }
+ type->mask = mods;
+ type->vmask = vmods;
+ type->defs.defined |= _KT_Mask;
+ return True;
}
- else if (uStrCaseCmp(field,"map")==0) {
- type->defs.defined|= _KT_Map;
- return SetMapEntry(type,xkb,arrayNdx,value);
+ else if (uStrCaseCmp(field, "map") == 0)
+ {
+ type->defs.defined |= _KT_Map;
+ return SetMapEntry(type, xkb, arrayNdx, value);
}
- else if (uStrCaseCmp(field,"preserve")==0) {
- type->defs.defined|= _KT_Preserve;
- return SetPreserve(type,xkb,arrayNdx,value);
+ else if (uStrCaseCmp(field, "preserve") == 0)
+ {
+ type->defs.defined |= _KT_Preserve;
+ return SetPreserve(type, xkb, arrayNdx, value);
}
- else if ((uStrCaseCmp(field,"levelname")==0)||
- (uStrCaseCmp(field,"level_name")==0)) {
- type->defs.defined|= _KT_LevelNames;
- return SetLevelName(type,arrayNdx,value);
+ else if ((uStrCaseCmp(field, "levelname") == 0) ||
+ (uStrCaseCmp(field, "level_name") == 0))
+ {
+ type->defs.defined |= _KT_LevelNames;
+ return SetLevelName(type, arrayNdx, value);
}
- ERROR2("Unknown field %s in key type %s\n",field,TypeTxt(type));
+ ERROR2("Unknown field %s in key type %s\n", field, TypeTxt(type));
ACTION("Definition ignored\n");
return False;
}
static Bool
-HandleKeyTypeVar(VarDef *stmt,XkbDescPtr xkb,KeyTypesInfo *info)
+HandleKeyTypeVar(VarDef * stmt, XkbDescPtr xkb, KeyTypesInfo * info)
{
-ExprResult elem,field;
-ExprDef * arrayNdx;
-
- if (!ExprResolveLhs(stmt->name,&elem,&field,&arrayNdx))
- return False; /* internal error, already reported */
- if (elem.str&&(uStrCaseCmp(elem.str,"type")==0))
- return SetKeyTypeField(&info->dflt,xkb,field.str,arrayNdx,stmt->value,
- info);
- if (elem.str!=NULL) {
- ERROR1("Default for unknown element %s\n",uStringText(elem.str));
- ACTION1("Value for field %s ignored\n",uStringText(field.str));
+ ExprResult elem, field;
+ ExprDef *arrayNdx;
+
+ if (!ExprResolveLhs(stmt->name, &elem, &field, &arrayNdx))
+ return False; /* internal error, already reported */
+ if (elem.str && (uStrCaseCmp(elem.str, "type") == 0))
+ return SetKeyTypeField(&info->dflt, xkb, field.str, arrayNdx,
+ stmt->value, info);
+ if (elem.str != NULL)
+ {
+ ERROR1("Default for unknown element %s\n", uStringText(elem.str));
+ ACTION1("Value for field %s ignored\n", uStringText(field.str));
}
- else if (field.str!=NULL) {
- ERROR1("Default defined for unknown field %s\n",uStringText(field.str));
- ACTION("Ignored\n");
+ else if (field.str != NULL)
+ {
+ ERROR1("Default defined for unknown field %s\n",
+ uStringText(field.str));
+ ACTION("Ignored\n");
}
return False;
}
static int
-HandleKeyTypeBody( VarDef * def,
- XkbDescPtr xkb,
- KeyTypeInfo * type,
- KeyTypesInfo * info)
+HandleKeyTypeBody(VarDef * def,
+ XkbDescPtr xkb, KeyTypeInfo * type, KeyTypesInfo * info)
{
-int ok= 1;
-ExprResult tmp,field;
-ExprDef * arrayNdx;
-
- for (;def!=NULL;def= (VarDef *)def->common.next) {
- if ((def->name)&&(def->name->type==ExprFieldRef)) {
- ok= HandleKeyTypeVar(def,xkb,info);
- continue;
- }
- ok= ExprResolveLhs(def->name,&tmp,&field,&arrayNdx);
- if (ok)
- ok= SetKeyTypeField(type,xkb,field.str,arrayNdx,def->value,info);
+ int ok = 1;
+ ExprResult tmp, field;
+ ExprDef *arrayNdx;
+
+ for (; def != NULL; def = (VarDef *) def->common.next)
+ {
+ if ((def->name) && (def->name->type == ExprFieldRef))
+ {
+ ok = HandleKeyTypeVar(def, xkb, info);
+ continue;
+ }
+ ok = ExprResolveLhs(def->name, &tmp, &field, &arrayNdx);
+ if (ok)
+ ok = SetKeyTypeField(type, xkb, field.str, arrayNdx, def->value,
+ info);
}
return ok;
}
+/**
+ * Process a type "XYZ" { } specification in the xkb_types section.
+ *
+ */
static int
-HandleKeyTypeDef( KeyTypeDef * def,
- XkbDescPtr xkb,
- unsigned merge,
- KeyTypesInfo * info)
+HandleKeyTypeDef(KeyTypeDef * def,
+ XkbDescPtr xkb, unsigned merge, KeyTypesInfo * info)
{
-register int i;
-KeyTypeInfo type;
-
- if (def->merge!=MergeDefault)
- merge= def->merge;
-
- type.defs.defined= 0;
- type.defs.fileID= info->fileID;
- type.defs.merge= merge;
- type.defs.next= 0;
- type.dpy= info->dpy;
- type.name= def->name;
- type.mask= info->dflt.mask;
- type.vmask= info->dflt.vmask;
- type.groupInfo= info->dflt.groupInfo;
- type.numLevels= 1;
- type.nEntries= type.szEntries= 0;
- type.entries= NULL;
- type.szNames= 0;
- type.lvlNames= NULL;
- type.preserve= NULL;
-
- if (!HandleKeyTypeBody(def->body,xkb,&type,info)) {
- info->errorCount++;
- return False;
+ register int i;
+ KeyTypeInfo type;
+
+ if (def->merge != MergeDefault)
+ merge = def->merge;
+
+ type.defs.defined = 0;
+ type.defs.fileID = info->fileID;
+ type.defs.merge = merge;
+ type.defs.next = NULL;
+ type.dpy = info->dpy;
+ type.name = def->name;
+ type.mask = info->dflt.mask;
+ type.vmask = info->dflt.vmask;
+ type.groupInfo = info->dflt.groupInfo;
+ type.numLevels = 1;
+ type.nEntries = type.szEntries = 0;
+ type.entries = NULL;
+ type.szNames = 0;
+ type.lvlNames = NULL;
+ type.preserve = NULL;
+
+ /* Parse the actual content. */
+ if (!HandleKeyTypeBody(def->body, xkb, &type, info))
+ {
+ info->errorCount++;
+ return False;
}
/* now copy any appropriate map, preserve or level names from the */
/* default type */
- for (i=0;i<info->dflt.nEntries;i++) {
- XkbKTMapEntryPtr dflt;
- dflt= &info->dflt.entries[i];
- if (((dflt->mods.real_mods&type.mask)==dflt->mods.real_mods)&&
- ((dflt->mods.vmods&type.vmask)==dflt->mods.vmods)) {
- AddMapEntry(xkb,&type,dflt,False,False);
- }
+ for (i = 0; i < info->dflt.nEntries; i++)
+ {
+ XkbKTMapEntryPtr dflt;
+ dflt = &info->dflt.entries[i];
+ if (((dflt->mods.real_mods & type.mask) == dflt->mods.real_mods) &&
+ ((dflt->mods.vmods & type.vmask) == dflt->mods.vmods))
+ {
+ AddMapEntry(xkb, &type, dflt, False, False);
+ }
}
- if (info->dflt.preserve) {
- PreserveInfo *dflt= info->dflt.preserve;
- while (dflt) {
- if (((dflt->indexMods&type.mask)==dflt->indexMods)&&
- ((dflt->indexVMods&type.vmask)==dflt->indexVMods)) {
- AddPreserve(xkb,&type,dflt,False,False);
- }
- dflt= (PreserveInfo *)dflt->defs.next;
- }
+ if (info->dflt.preserve)
+ {
+ PreserveInfo *dflt = info->dflt.preserve;
+ while (dflt)
+ {
+ if (((dflt->indexMods & type.mask) == dflt->indexMods) &&
+ ((dflt->indexVMods & type.vmask) == dflt->indexVMods))
+ {
+ AddPreserve(xkb, &type, dflt, False, False);
+ }
+ dflt = (PreserveInfo *) dflt->defs.next;
+ }
}
- for (i=0;i<info->dflt.szNames;i++) {
- if ((i<type.numLevels)&&(info->dflt.lvlNames[i]!=None)) {
- AddLevelName(&type,i,info->dflt.lvlNames[i],False,False);
- }
+ for (i = 0; i < info->dflt.szNames; i++)
+ {
+ if ((i < type.numLevels) && (info->dflt.lvlNames[i] != None))
+ {
+ AddLevelName(&type, i, info->dflt.lvlNames[i], False, False);
+ }
}
- if (!AddKeyType(xkb,info,&type)) {
- info->errorCount++;
- return False;
+ /* Now add the new keytype to the info struct */
+ if (!AddKeyType(xkb, info, &type))
+ {
+ info->errorCount++;
+ return False;
}
return True;
}
+/**
+ * Process an xkb_types section.
+ *
+ * @param file The parsed xkb_types section.
+ * @param merge Merge Strategy (e.g. MergeOverride)
+ * @param info Pointer to memory where the outcome will be stored.
+ */
static void
-HandleKeyTypesFile( XkbFile * file,
- XkbDescPtr xkb,
- unsigned merge,
- KeyTypesInfo * info)
+HandleKeyTypesFile(XkbFile * file,
+ XkbDescPtr xkb, unsigned merge, KeyTypesInfo * info)
{
-ParseCommon *stmt;
-
- info->name= uStringDup(file->name);
- stmt= file->defs;
- while (stmt) {
- switch (stmt->stmtType) {
- case StmtInclude:
- if (!HandleIncludeKeyTypes((IncludeStmt *)stmt,xkb,info,
- HandleKeyTypesFile))
- info->errorCount++;
- break;
- case StmtKeyTypeDef:
- if (!HandleKeyTypeDef((KeyTypeDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtVarDef:
- if (!HandleKeyTypeVar((VarDef *)stmt,xkb,info))
- info->errorCount++;
- break;
- case StmtVModDef:
- if (!HandleVModDef((VModDef *)stmt,merge,&info->vmods))
- info->errorCount++;
- break;
- case StmtKeyAliasDef:
- ERROR("Key type files may not include other declarations\n");
- ACTION("Ignoring definition of key alias\n");
- info->errorCount++;
- break;
- case StmtKeycodeDef:
- ERROR("Key type files may not include other declarations\n");
- ACTION("Ignoring definition of key name\n");
- info->errorCount++;
- break;
- case StmtInterpDef:
- ERROR("Key type files may not include other declarations\n");
- ACTION("Ignoring definition of symbol interpretation\n");
- info->errorCount++;
- break;
- default:
- WSGO1("Unexpected statement type %d in HandleKeyTypesFile\n",
- stmt->stmtType);
- break;
- }
- stmt= stmt->next;
- if (info->errorCount>10) {
+ ParseCommon *stmt;
+
+ info->name = uStringDup(file->name);
+ stmt = file->defs;
+ while (stmt)
+ {
+ switch (stmt->stmtType)
+ {
+ case StmtInclude:
+ if (!HandleIncludeKeyTypes((IncludeStmt *) stmt, xkb, info,
+ HandleKeyTypesFile))
+ info->errorCount++;
+ break;
+ case StmtKeyTypeDef: /* e.g. type "ONE_LEVEL" */
+ if (!HandleKeyTypeDef((KeyTypeDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtVarDef:
+ if (!HandleKeyTypeVar((VarDef *) stmt, xkb, info))
+ info->errorCount++;
+ break;
+ case StmtVModDef: /* virtual_modifiers NumLock, ... */
+ if (!HandleVModDef((VModDef *) stmt, merge, &info->vmods))
+ info->errorCount++;
+ break;
+ case StmtKeyAliasDef:
+ ERROR("Key type files may not include other declarations\n");
+ ACTION("Ignoring definition of key alias\n");
+ info->errorCount++;
+ break;
+ case StmtKeycodeDef:
+ ERROR("Key type files may not include other declarations\n");
+ ACTION("Ignoring definition of key name\n");
+ info->errorCount++;
+ break;
+ case StmtInterpDef:
+ ERROR("Key type files may not include other declarations\n");
+ ACTION("Ignoring definition of symbol interpretation\n");
+ info->errorCount++;
+ break;
+ default:
+ WSGO1("Unexpected statement type %d in HandleKeyTypesFile\n",
+ stmt->stmtType);
+ break;
+ }
+ stmt = stmt->next;
+ if (info->errorCount > 10)
+ {
#ifdef NOISY
- ERROR("Too many errors\n");
+ ERROR("Too many errors\n");
#endif
- ACTION1("Abandoning keytypes file \"%s\"\n",file->topName);
- break;
- }
+ ACTION1("Abandoning keytypes file \"%s\"\n", file->topName);
+ break;
+ }
}
return;
}
static Bool
-CopyDefToKeyType(XkbDescPtr xkb,XkbKeyTypePtr type,KeyTypeInfo *def)
+CopyDefToKeyType(XkbDescPtr xkb, XkbKeyTypePtr type, KeyTypeInfo * def)
{
-register int i;
-PreserveInfo *pre;
-
- for (pre=def->preserve;pre!=NULL;pre=(PreserveInfo *)pre->defs.next) {
- XkbKTMapEntryPtr match;
- XkbKTMapEntryRec tmp;
- tmp.mods.real_mods= pre->indexMods;
- tmp.mods.vmods= pre->indexVMods;
- tmp.level= 0;
- AddMapEntry(xkb,def,&tmp,False,False);
- match= FindMatchingMapEntry(def,pre->indexMods,pre->indexVMods);
- if (!match) {
- WSGO("Couldn't find matching entry for preserve\n");
- ACTION("Aborting\n");
- return False;
- }
- pre->matchingMapIndex= match-def->entries;
+ register int i;
+ PreserveInfo *pre;
+
+ for (pre = def->preserve; pre != NULL;
+ pre = (PreserveInfo *) pre->defs.next)
+ {
+ XkbKTMapEntryPtr match;
+ XkbKTMapEntryRec tmp;
+ tmp.mods.real_mods = pre->indexMods;
+ tmp.mods.vmods = pre->indexVMods;
+ tmp.level = 0;
+ AddMapEntry(xkb, def, &tmp, False, False);
+ match = FindMatchingMapEntry(def, pre->indexMods, pre->indexVMods);
+ if (!match)
+ {
+ WSGO("Couldn't find matching entry for preserve\n");
+ ACTION("Aborting\n");
+ return False;
+ }
+ pre->matchingMapIndex = match - def->entries;
}
- type->mods.real_mods= def->mask;
- type->mods.vmods= def->vmask;
- type->num_levels= def->numLevels;
- type->map_count= def->nEntries;
- type->map= def->entries;
- if (def->preserve) {
- type->preserve= uTypedCalloc(type->map_count,XkbModsRec);
- if (!type->preserve) {
- WARN("Couldn't allocate preserve array in CopyDefToKeyType\n");
- ACTION1("Preserve setting for type %s lost\n",
- XkbAtomText(def->dpy,def->name,XkbMessage));
- }
- else {
- pre= def->preserve;
- for (;pre!=NULL;pre=(PreserveInfo *)pre->defs.next) {
- int ndx= pre->matchingMapIndex;
- type->preserve[ndx].mask= pre->preMods;
- type->preserve[ndx].real_mods= pre->preMods;
- type->preserve[ndx].vmods= pre->preVMods;
- }
- }
+ type->mods.real_mods = def->mask;
+ type->mods.vmods = def->vmask;
+ type->num_levels = def->numLevels;
+ type->map_count = def->nEntries;
+ type->map = def->entries;
+ if (def->preserve)
+ {
+ type->preserve = uTypedCalloc(type->map_count, XkbModsRec);
+ if (!type->preserve)
+ {
+ WARN("Couldn't allocate preserve array in CopyDefToKeyType\n");
+ ACTION1("Preserve setting for type %s lost\n",
+ XkbAtomText(def->dpy, def->name, XkbMessage));
+ }
+ else
+ {
+ pre = def->preserve;
+ for (; pre != NULL; pre = (PreserveInfo *) pre->defs.next)
+ {
+ int ndx = pre->matchingMapIndex;
+ type->preserve[ndx].mask = pre->preMods;
+ type->preserve[ndx].real_mods = pre->preMods;
+ type->preserve[ndx].vmods = pre->preVMods;
+ }
+ }
}
- else type->preserve= NULL;
- type->name= (Atom)def->name;
- if (def->szNames>0) {
- type->level_names= uTypedCalloc(def->numLevels,Atom);
-
- /* assert def->szNames<=def->numLevels */
- for (i=0;i<def->szNames;i++) {
- type->level_names[i]= (Atom)def->lvlNames[i];
- }
+ else
+ type->preserve = NULL;
+ type->name = (Atom) def->name;
+ if (def->szNames > 0)
+ {
+ type->level_names = uTypedCalloc(def->numLevels, Atom);
+
+ /* assert def->szNames<=def->numLevels */
+ for (i = 0; i < def->szNames; i++)
+ {
+ type->level_names[i] = (Atom) def->lvlNames[i];
+ }
}
- else {
- type->level_names= NULL;
+ else
+ {
+ type->level_names = NULL;
}
- def->nEntries= def->szEntries= 0;
- def->entries= NULL;
- return XkbComputeEffectiveMap(xkb,type,NULL);
+ def->nEntries = def->szEntries = 0;
+ def->entries = NULL;
+ return XkbComputeEffectiveMap(xkb, type, NULL);
}
Bool
-CompileKeyTypes(XkbFile *file,XkbFileInfo *result,unsigned merge)
+CompileKeyTypes(XkbFile * file, XkbFileInfo * result, unsigned merge)
{
-KeyTypesInfo info;
-XkbDescPtr xkb;
-
- xkb= result->xkb;
- InitKeyTypesInfo(&info,xkb,NULL);
- info.fileID= file->id;
- HandleKeyTypesFile(file,xkb,merge,&info);
-
- if (info.errorCount==0) {
- register int i;
- register KeyTypeInfo *def;
- register XkbKeyTypePtr type,next;
-
- if (info.name!=None) {
- if (XkbAllocNames(xkb,XkbTypesNameMask,0,0)==Success)
- xkb->names->types= XkbInternAtom(xkb->dpy,info.name,False);
- else {
- WSGO("Couldn't allocate space for types name\n");
- ACTION2("Name \"%s\" (from %s) NOT assigned\n",scanFile,
- info.name);
- }
- }
- i= info.nTypes;
- if ((info.stdPresent&XkbOneLevelMask)==0)
- i++;
- if ((info.stdPresent&XkbTwoLevelMask)==0)
- i++;
- if ((info.stdPresent&XkbKeypadMask)==0)
- i++;
- if ((info.stdPresent&XkbAlphabeticMask)==0)
- i++;
- if (XkbAllocClientMap(xkb,XkbKeyTypesMask,i)!=Success) {
- WSGO("Couldn't allocate client map\n");
- ACTION("Exiting\n");
- return False;
- }
- xkb->map->num_types= i;
- if (XkbAllRequiredTypes&(~info.stdPresent)) {
- unsigned missing,keypadVMod;
-
- missing= XkbAllRequiredTypes&(~info.stdPresent);
- keypadVMod= FindKeypadVMod(xkb);
- if (XkbInitCanonicalKeyTypes(xkb,missing,keypadVMod)!=Success) {
- WSGO("Couldn't initialize canonical key types\n");
- ACTION("Exiting\n");
- return False;
- }
- if (missing&XkbOneLevelMask)
- xkb->map->types[XkbOneLevelIndex].name= tok_ONE_LEVEL;
- if (missing&XkbTwoLevelMask)
- xkb->map->types[XkbTwoLevelIndex].name= tok_TWO_LEVEL;
- if (missing&XkbAlphabeticMask)
- xkb->map->types[XkbAlphabeticIndex].name= tok_ALPHABETIC;
- if (missing&XkbKeypadMask)
- xkb->map->types[XkbKeypadIndex].name= tok_KEYPAD;
- }
- next= &xkb->map->types[XkbLastRequiredType+1];
- for (i=0,def=info.types;i<info.nTypes;i++) {
- if (def->name==tok_ONE_LEVEL)
- type= &xkb->map->types[XkbOneLevelIndex];
- else if (def->name==tok_TWO_LEVEL)
- type= &xkb->map->types[XkbTwoLevelIndex];
- else if (def->name==tok_ALPHABETIC)
- type= &xkb->map->types[XkbAlphabeticIndex];
- else if (def->name==tok_KEYPAD)
- type= &xkb->map->types[XkbKeypadIndex];
- else type= next++;
- DeleteLevel1MapEntries(def);
- if (!CopyDefToKeyType(xkb,type,def))
- return False;
- def= (KeyTypeInfo *)def->defs.next;
- }
- return True;
+ KeyTypesInfo info;
+ XkbDescPtr xkb;
+
+ xkb = result->xkb;
+ InitKeyTypesInfo(&info, xkb, NULL);
+ info.fileID = file->id;
+ HandleKeyTypesFile(file, xkb, merge, &info);
+
+ if (info.errorCount == 0)
+ {
+ register int i;
+ register KeyTypeInfo *def;
+ register XkbKeyTypePtr type, next;
+
+ if (info.name != NULL)
+ {
+ if (XkbAllocNames(xkb, XkbTypesNameMask, 0, 0) == Success)
+ xkb->names->types = XkbInternAtom(xkb->dpy, info.name, False);
+ else
+ {
+ WSGO("Couldn't allocate space for types name\n");
+ ACTION2("Name \"%s\" (from %s) NOT assigned\n",
+ scanFile, info.name);
+ }
+ }
+ i = info.nTypes;
+ if ((info.stdPresent & XkbOneLevelMask) == 0)
+ i++;
+ if ((info.stdPresent & XkbTwoLevelMask) == 0)
+ i++;
+ if ((info.stdPresent & XkbKeypadMask) == 0)
+ i++;
+ if ((info.stdPresent & XkbAlphabeticMask) == 0)
+ i++;
+ if (XkbAllocClientMap(xkb, XkbKeyTypesMask, i) != Success)
+ {
+ WSGO("Couldn't allocate client map\n");
+ ACTION("Exiting\n");
+ return False;
+ }
+ xkb->map->num_types = i;
+ if (XkbAllRequiredTypes & (~info.stdPresent))
+ {
+ unsigned missing, keypadVMod;
+
+ missing = XkbAllRequiredTypes & (~info.stdPresent);
+ keypadVMod = FindKeypadVMod(xkb);
+ if (XkbInitCanonicalKeyTypes(xkb, missing, keypadVMod) != Success)
+ {
+ WSGO("Couldn't initialize canonical key types\n");
+ ACTION("Exiting\n");
+ return False;
+ }
+ if (missing & XkbOneLevelMask)
+ xkb->map->types[XkbOneLevelIndex].name = tok_ONE_LEVEL;
+ if (missing & XkbTwoLevelMask)
+ xkb->map->types[XkbTwoLevelIndex].name = tok_TWO_LEVEL;
+ if (missing & XkbAlphabeticMask)
+ xkb->map->types[XkbAlphabeticIndex].name = tok_ALPHABETIC;
+ if (missing & XkbKeypadMask)
+ xkb->map->types[XkbKeypadIndex].name = tok_KEYPAD;
+ }
+ next = &xkb->map->types[XkbLastRequiredType + 1];
+ for (i = 0, def = info.types; i < info.nTypes; i++)
+ {
+ if (def->name == tok_ONE_LEVEL)
+ type = &xkb->map->types[XkbOneLevelIndex];
+ else if (def->name == tok_TWO_LEVEL)
+ type = &xkb->map->types[XkbTwoLevelIndex];
+ else if (def->name == tok_ALPHABETIC)
+ type = &xkb->map->types[XkbAlphabeticIndex];
+ else if (def->name == tok_KEYPAD)
+ type = &xkb->map->types[XkbKeypadIndex];
+ else
+ type = next++;
+ DeleteLevel1MapEntries(def);
+ if (!CopyDefToKeyType(xkb, type, def))
+ return False;
+ def = (KeyTypeInfo *) def->defs.next;
+ }
+ return True;
}
return False;
}
-
diff --git a/app/xkbcomp/listing.c b/app/xkbcomp/listing.c
index cc887b80d..146ecbab3 100644
--- a/app/xkbcomp/listing.c
+++ b/app/xkbcomp/listing.c
@@ -1,4 +1,3 @@
-/* $Xorg: listing.c,v 1.5 2001/02/09 02:05:49 xorgcvs Exp $ */
/************************************************************
Copyright 1996 by Silicon Graphics Computer Systems, Inc.
@@ -70,8 +69,6 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
******************************************************************/
-/* $XFree86: xc/programs/xkbcomp/listing.c,v 3.9 2001/12/14 20:01:57 dawes Exp $ */
-
#include <stdio.h>
#include <ctype.h>
@@ -83,19 +80,18 @@ SOFTWARE.
#include <malloc.h>
#endif
-#define DEBUG_VAR_NOT_LOCAL
#define DEBUG_VAR listingDebug
#include "xkbcomp.h"
#include <stdlib.h>
-#ifndef X_NOT_POSIX
+
#ifdef _POSIX_SOURCE
-#include <limits.h>
+# include <limits.h>
#else
-#define _POSIX_SOURCE
-#include <limits.h>
-#undef _POSIX_SOURCE
-#endif
+# define _POSIX_SOURCE
+# include <limits.h>
+# undef _POSIX_SOURCE
#endif
+
#ifndef PATH_MAX
#ifdef WIN32
#define PATH_MAX 512
@@ -112,28 +108,13 @@ SOFTWARE.
#endif
#ifdef WIN32
-#include <windows.h>
-#define FileName(file) file.cFileName
-#undef TEXT
-#undef ALTERNATE
+# include <windows.h>
+# define FileName(file) file.cFileName
+# undef TEXT
+# undef ALTERNATE
#else
-#define FileName(file) file->d_name
-#ifndef X_NOT_POSIX
-#include <dirent.h>
-#else
-#ifdef SYSV
-#include <dirent.h>
-#else
-#ifdef USG
-#include <dirent.h>
-#else
-#include <sys/dir.h>
-#ifndef dirent
-#define dirent direct
-#endif
-#endif
-#endif
-#endif
+# include <dirent.h>
+# define FileName(file) file->d_name
#endif
#include "xkbpath.h"
@@ -144,184 +125,213 @@ SOFTWARE.
#define lowbit(x) ((x) & (-(x)))
-static int szListing= 0;
-static int nListed= 0;
-static int nFilesListed= 0;
+unsigned int listingDebug;
+
+static int szListing = 0;
+static int nListed = 0;
+static int nFilesListed = 0;
-typedef struct _Listing {
- char * file;
- char * map;
+typedef struct _Listing
+{
+ char *file;
+ char *map;
} Listing;
-static int szMapOnly;
-static int nMapOnly;
-static char ** mapOnly;
+static int szMapOnly;
+static int nMapOnly;
+static char **mapOnly;
-static Listing * list= NULL;
+static Listing *list = NULL;
/***====================================================================***/
int
AddMapOnly(char *map)
{
- if (nMapOnly>=szMapOnly) {
- if (szMapOnly<1) szMapOnly= 5;
- else szMapOnly*= 2;
- mapOnly= uTypedRealloc(list,szMapOnly,char *);
- if (!mapOnly) {
- WSGO("Couldn't allocate list of maps\n");
- return 0;
- }
+ if (nMapOnly >= szMapOnly)
+ {
+ if (szMapOnly < 1)
+ szMapOnly = 5;
+ else
+ szMapOnly *= 2;
+ mapOnly = uTypedRealloc(list, szMapOnly, char *);
+ if (!mapOnly)
+ {
+ WSGO("Couldn't allocate list of maps\n");
+ return 0;
+ }
}
- mapOnly[nMapOnly++]= map;
+ mapOnly[nMapOnly++] = map;
return 1;
}
int
-AddListing(char *file,char *map)
+AddListing(char *file, char *map)
{
- if (nListed>=szListing) {
- if (szListing<1) szListing= 10;
- else szListing*= 2;
- list= uTypedRealloc(list,szListing,Listing);
- if (!list) {
- WSGO("Couldn't allocate list of files and maps\n");
- ACTION("Exiting\n");
- exit(1);
- }
+ if (nListed >= szListing)
+ {
+ if (szListing < 1)
+ szListing = 10;
+ else
+ szListing *= 2;
+ list = uTypedRealloc(list, szListing, Listing);
+ if (!list)
+ {
+ WSGO("Couldn't allocate list of files and maps\n");
+ ACTION("Exiting\n");
+ exit(1);
+ }
}
- list[nListed].file= file;
- list[nListed].map= map;
+ list[nListed].file = file;
+ list[nListed].map = map;
nListed++;
- if (file!=NULL)
- nFilesListed++;
+ if (file != NULL)
+ nFilesListed++;
return 1;
}
/***====================================================================***/
static void
-ListFile(FILE *outFile,char *fileName,XkbFile *map)
+ListFile(FILE * outFile, char *fileName, XkbFile * map)
{
-register unsigned flags;
-char * mapName;
-
- flags= map->flags;
- if ((flags&XkbLC_Hidden)&&(!(verboseLevel&WantHiddenMaps)))
- return;
- if ((flags&XkbLC_Partial)&&(!(verboseLevel&WantPartialMaps)))
- return;
- if (verboseLevel&WantLongListing) {
- fprintf(outFile,(flags&XkbLC_Hidden)?"h":"-");
- fprintf(outFile,(flags&XkbLC_Default)?"d":"-");
- fprintf(outFile,(flags&XkbLC_Partial)?"p":"-");
- fprintf(outFile,"----- ");
- if (map->type==XkmSymbolsIndex) {
- fprintf(outFile,(flags&XkbLC_AlphanumericKeys)?"a":"-");
- fprintf(outFile,(flags&XkbLC_ModifierKeys)?"m":"-");
- fprintf(outFile,(flags&XkbLC_KeypadKeys)?"k":"-");
- fprintf(outFile,(flags&XkbLC_FunctionKeys)?"f":"-");
- fprintf(outFile,(flags&XkbLC_AlternateGroup)?"g":"-");
- fprintf(outFile,"--- ");
- }
- else fprintf(outFile,"-------- ");
+ register unsigned flags;
+ char *mapName;
+
+ flags = map->flags;
+ if ((flags & XkbLC_Hidden) && (!(verboseLevel & WantHiddenMaps)))
+ return;
+ if ((flags & XkbLC_Partial) && (!(verboseLevel & WantPartialMaps)))
+ return;
+ if (verboseLevel & WantLongListing)
+ {
+ fprintf(outFile, (flags & XkbLC_Hidden) ? "h" : "-");
+ fprintf(outFile, (flags & XkbLC_Default) ? "d" : "-");
+ fprintf(outFile, (flags & XkbLC_Partial) ? "p" : "-");
+ fprintf(outFile, "----- ");
+ if (map->type == XkmSymbolsIndex)
+ {
+ fprintf(outFile, (flags & XkbLC_AlphanumericKeys) ? "a" : "-");
+ fprintf(outFile, (flags & XkbLC_ModifierKeys) ? "m" : "-");
+ fprintf(outFile, (flags & XkbLC_KeypadKeys) ? "k" : "-");
+ fprintf(outFile, (flags & XkbLC_FunctionKeys) ? "f" : "-");
+ fprintf(outFile, (flags & XkbLC_AlternateGroup) ? "g" : "-");
+ fprintf(outFile, "--- ");
+ }
+ else
+ fprintf(outFile, "-------- ");
}
- mapName= map->name;
- if ((!(verboseLevel&WantFullNames))&&((flags&XkbLC_Default)!=0))
- mapName= NULL;
- if (dirsToStrip>0) {
- char *tmp,*last;
- int i;
- for (i=0,tmp=last=fileName;(i<dirsToStrip)&&tmp;i++) {
- last= tmp;
- tmp= strchr(tmp,'/');
- if (tmp!=NULL)
- tmp++;
- }
- fileName= (tmp?tmp:last);
+ mapName = map->name;
+ if ((!(verboseLevel & WantFullNames)) && ((flags & XkbLC_Default) != 0))
+ mapName = NULL;
+ if (dirsToStrip > 0)
+ {
+ char *tmp, *last;
+ int i;
+ for (i = 0, tmp = last = fileName; (i < dirsToStrip) && tmp; i++)
+ {
+ last = tmp;
+ tmp = strchr(tmp, '/');
+ if (tmp != NULL)
+ tmp++;
+ }
+ fileName = (tmp ? tmp : last);
}
if (mapName)
- fprintf(outFile,"%s(%s)\n",fileName,mapName);
- else fprintf(outFile,"%s\n",fileName);
+ fprintf(outFile, "%s(%s)\n", fileName, mapName);
+ else
+ fprintf(outFile, "%s\n", fileName);
return;
}
/***====================================================================***/
static int
-AddDirectory(char *head,char *ptrn,char *rest,char *map)
+AddDirectory(char *head, char *ptrn, char *rest, char *map)
{
#ifdef WIN32
- HANDLE dirh;
- WIN32_FIND_DATA file;
+ HANDLE dirh;
+ WIN32_FIND_DATA file;
#else
- DIR *dirp;
- struct dirent *file;
+ DIR *dirp;
+ struct dirent *file;
#endif
- int nMatch;
-
- if (map==NULL) {
- char *tmp = ptrn;
- if ((rest==NULL)&&(ptrn!=NULL)&&(strchr(ptrn,'/')==NULL)) {
- tmp= ptrn;
- map= strchr(ptrn,'(');
- }
- else if ((rest==NULL)&&(ptrn==NULL)&&
- (head!=NULL)&&(strchr(head,'/')==NULL)) {
- tmp= head;
- map= strchr(head,'(');
- }
- if (map!=NULL) {
- tmp= strchr(tmp,')');
- if ((tmp==NULL)||(tmp[1]!='\0')) {
- ERROR1("File and map must have the format file(map)\n");
- return 0;
- }
- *map= '\0'; map++;
- *tmp= '\0';
- }
+ int nMatch;
+
+ if (map == NULL)
+ {
+ char *tmp = ptrn;
+ if ((rest == NULL) && (ptrn != NULL) && (strchr(ptrn, '/') == NULL))
+ {
+ tmp = ptrn;
+ map = strchr(ptrn, '(');
+ }
+ else if ((rest == NULL) && (ptrn == NULL) &&
+ (head != NULL) && (strchr(head, '/') == NULL))
+ {
+ tmp = head;
+ map = strchr(head, '(');
+ }
+ if (map != NULL)
+ {
+ tmp = strchr(tmp, ')');
+ if ((tmp == NULL) || (tmp[1] != '\0'))
+ {
+ ERROR1("File and map must have the format file(map)\n");
+ return 0;
+ }
+ *map = '\0';
+ map++;
+ *tmp = '\0';
+ }
}
#ifdef WIN32
if ((dirh = FindFirstFile("*.*", &file)) == INVALID_HANDLE_VALUE)
- return 0;
+ return 0;
#else
- if ((dirp = opendir ((head?head:"."))) == NULL)
- return 0;
- nMatch= 0;
+ if ((dirp = opendir((head ? head : "."))) == NULL)
+ return 0;
+ nMatch = 0;
#endif
#ifdef WIN32
do
#else
- while ((file = readdir (dirp)) != NULL)
+ while ((file = readdir(dirp)) != NULL)
#endif
{
- char *tmp,*filename;
- struct stat sbuf;
-
- filename= FileName(file);
- if (!filename || filename[0]=='.')
- continue;
- if (ptrn && (!XkbNameMatchesPattern(filename,ptrn)))
- continue;
- tmp= (char *)uAlloc((head?strlen(head):0)+strlen(filename)+2);
- if (!tmp)
- continue;
- sprintf(tmp,"%s%s%s",(head?head:""),(head?"/":""),filename);
- if (stat(tmp,&sbuf)<0) {
- uFree(tmp);
- continue;
- }
- if (((rest!=NULL)&&(!S_ISDIR(sbuf.st_mode)))||
- ((map!=NULL)&&(S_ISDIR(sbuf.st_mode)))) {
- uFree(tmp);
- continue;
- }
- if (S_ISDIR(sbuf.st_mode)) {
- if ((rest!=NULL)||(verboseLevel&ListRecursive))
- nMatch+= AddDirectory(tmp,rest,NULL,map);
- }
- else nMatch+= AddListing(tmp,map);
+ char *tmp, *filename;
+ struct stat sbuf;
+
+ filename = FileName(file);
+ if (!filename || filename[0] == '.')
+ continue;
+ if (ptrn && (!XkbNameMatchesPattern(filename, ptrn)))
+ continue;
+ tmp =
+ (char *) uAlloc((head ? strlen(head) : 0) + strlen(filename) + 2);
+ if (!tmp)
+ continue;
+ sprintf(tmp, "%s%s%s", (head ? head : ""), (head ? "/" : ""),
+ filename);
+ if (stat(tmp, &sbuf) < 0)
+ {
+ uFree(tmp);
+ continue;
+ }
+ if (((rest != NULL) && (!S_ISDIR(sbuf.st_mode))) ||
+ ((map != NULL) && (S_ISDIR(sbuf.st_mode))))
+ {
+ uFree(tmp);
+ continue;
+ }
+ if (S_ISDIR(sbuf.st_mode))
+ {
+ if ((rest != NULL) || (verboseLevel & ListRecursive))
+ nMatch += AddDirectory(tmp, rest, NULL, map);
+ }
+ else
+ nMatch += AddListing(tmp, map);
}
#ifdef WIN32
while (FindNextFile(dirh, &file));
@@ -334,42 +344,53 @@ AddDirectory(char *head,char *ptrn,char *rest,char *map)
Bool
AddMatchingFiles(char *head_in)
{
-char *str,*head,*ptrn,*rest= NULL;
-
- if (head_in==NULL)
- return 0;
- ptrn= NULL;
- for (str=head_in;(*str!='\0')&&(*str!='?')&&(*str!='*');str++) {
- if ((str!=head_in)&&(*str=='/'))
- ptrn= str;
+ char *str, *head, *ptrn, *rest = NULL;
+
+ if (head_in == NULL)
+ return 0;
+ ptrn = NULL;
+ for (str = head_in; (*str != '\0') && (*str != '?') && (*str != '*');
+ str++)
+ {
+ if ((str != head_in) && (*str == '/'))
+ ptrn = str;
}
- if (*str=='\0') { /* no wildcards */
- head= head_in;
- ptrn= NULL;
- rest= NULL;
+ if (*str == '\0')
+ { /* no wildcards */
+ head = head_in;
+ ptrn = NULL;
+ rest = NULL;
}
- else if (ptrn==NULL) { /* no slash before the first wildcard */
- head= NULL;
- ptrn= head_in;
+ else if (ptrn == NULL)
+ { /* no slash before the first wildcard */
+ head = NULL;
+ ptrn = head_in;
}
- else { /* slash followed by wildcard */
- head= head_in;
- *ptrn= '\0'; ptrn++;
+ else
+ { /* slash followed by wildcard */
+ head = head_in;
+ *ptrn = '\0';
+ ptrn++;
}
- if (ptrn) {
- rest= strchr(ptrn,'/');
- if (rest!=NULL) {
- *rest= '\0';
- rest++;
- }
+ if (ptrn)
+ {
+ rest = strchr(ptrn, '/');
+ if (rest != NULL)
+ {
+ *rest = '\0';
+ rest++;
+ }
}
- if(((rest && ptrn)&&((strchr(ptrn,'(')!=NULL)||(strchr(ptrn,')')!=NULL)))||
- (head && ((strchr(head,'(')!=NULL)||(strchr(head,')')!=NULL)))) {
- ERROR1("Files/maps to list must have the form file(map)\n");
- ACTION("Illegal specifier ignored\n");
- return 0;
+ if (((rest && ptrn)
+ && ((strchr(ptrn, '(') != NULL) || (strchr(ptrn, ')') != NULL)))
+ || (head
+ && ((strchr(head, '(') != NULL) || (strchr(head, ')') != NULL))))
+ {
+ ERROR1("Files/maps to list must have the form file(map)\n");
+ ACTION("Illegal specifier ignored\n");
+ return 0;
}
- return AddDirectory(head,ptrn,rest,NULL);
+ return AddDirectory(head, ptrn, rest, NULL);
}
/***====================================================================***/
@@ -377,15 +398,16 @@ char *str,*head,*ptrn,*rest= NULL;
static Bool
MapMatches(char *mapToConsider, char *ptrn)
{
-int i;
-
- if (ptrn!=NULL)
- return XkbNameMatchesPattern(mapToConsider,ptrn);
- if (nMapOnly<1)
- return True;
- for (i=0;i<nMapOnly;i++) {
- if (XkbNameMatchesPattern(mapToConsider,mapOnly[i]))
- return True;
+ int i;
+
+ if (ptrn != NULL)
+ return XkbNameMatchesPattern(mapToConsider, ptrn);
+ if (nMapOnly < 1)
+ return True;
+ for (i = 0; i < nMapOnly; i++)
+ {
+ if (XkbNameMatchesPattern(mapToConsider, mapOnly[i]))
+ return True;
}
return False;
}
@@ -393,70 +415,81 @@ int i;
int
GenerateListing(char *out_name)
{
-int i;
-FILE * inputFile,*outFile;
-XkbFile * rtrn,*mapToUse;
-unsigned oldWarningLevel;
-char * mapName;
-
- if (nFilesListed<1) {
- ERROR1("Must specify at least one file or pattern to list\n");
- return 0;
+ int i;
+ FILE *inputFile, *outFile;
+ XkbFile *rtrn, *mapToUse;
+ unsigned oldWarningLevel;
+ char *mapName;
+
+ if (nFilesListed < 1)
+ {
+ ERROR1("Must specify at least one file or pattern to list\n");
+ return 0;
}
- if ((!out_name)||((out_name[0]=='-')&&(out_name[1]=='\0')))
- outFile= stdout;
- else if ((outFile=fopen(out_name,"w"))==NULL) {
- ERROR1("Cannot open \"%s\" to write keyboard description\n",out_name);
- ACTION("Exiting\n");
- return 0;
+ if ((!out_name) || ((out_name[0] == '-') && (out_name[1] == '\0')))
+ outFile = stdout;
+ else if ((outFile = fopen(out_name, "w")) == NULL)
+ {
+ ERROR1("Cannot open \"%s\" to write keyboard description\n",
+ out_name);
+ ACTION("Exiting\n");
+ return 0;
}
#ifdef DEBUG
- if (warningLevel>9)
- fprintf(stderr,"should list:\n");
+ if (warningLevel > 9)
+ fprintf(stderr, "should list:\n");
#endif
- for (i=0;i<nListed;i++) {
+ for (i = 0; i < nListed; i++)
+ {
#ifdef DEBUG
- if (warningLevel>9) {
- fprintf(stderr,"%s(%s)\n",(list[i].file?list[i].file:"*"),
- (list[i].map?list[i].map:"*"));
- }
+ if (warningLevel > 9)
+ {
+ fprintf(stderr, "%s(%s)\n",
+ (list[i].file ? list[i].file : "*"),
+ (list[i].map ? list[i].map : "*"));
+ }
#endif
- oldWarningLevel= warningLevel;
- warningLevel= 0;
- if (list[i].file) {
- struct stat sbuf;
-
- if (stat(list[i].file,&sbuf)<0) {
- if (oldWarningLevel>5)
- WARN1("Couldn't open \"%s\"\n",list[i].file);
- continue;
- }
- if (S_ISDIR(sbuf.st_mode)) {
- if (verboseLevel&ListRecursive)
- AddDirectory(list[i].file,NULL,NULL,NULL);
- continue;
- }
-
- inputFile= fopen(list[i].file,"r");
- if (!inputFile) {
- if (oldWarningLevel>5)
- WARN1("Couldn't open \"%s\"\n",list[i].file);
- continue;
- }
- setScanState(list[i].file, 1);
- if (XKBParseFile(inputFile,&rtrn)&&(rtrn!=NULL)) {
- mapName= list[i].map;
- mapToUse= rtrn;
- for (;mapToUse;mapToUse= (XkbFile *)mapToUse->common.next) {
- if (!MapMatches(mapToUse->name,mapName))
- continue;
- ListFile(outFile,list[i].file,mapToUse);
- }
- }
- fclose(inputFile);
- }
- warningLevel= oldWarningLevel;
+ oldWarningLevel = warningLevel;
+ warningLevel = 0;
+ if (list[i].file)
+ {
+ struct stat sbuf;
+
+ if (stat(list[i].file, &sbuf) < 0)
+ {
+ if (oldWarningLevel > 5)
+ WARN1("Couldn't open \"%s\"\n", list[i].file);
+ continue;
+ }
+ if (S_ISDIR(sbuf.st_mode))
+ {
+ if (verboseLevel & ListRecursive)
+ AddDirectory(list[i].file, NULL, NULL, NULL);
+ continue;
+ }
+
+ inputFile = fopen(list[i].file, "r");
+ if (!inputFile)
+ {
+ if (oldWarningLevel > 5)
+ WARN1("Couldn't open \"%s\"\n", list[i].file);
+ continue;
+ }
+ setScanState(list[i].file, 1);
+ if (XKBParseFile(inputFile, &rtrn) && (rtrn != NULL))
+ {
+ mapName = list[i].map;
+ mapToUse = rtrn;
+ for (; mapToUse; mapToUse = (XkbFile *) mapToUse->common.next)
+ {
+ if (!MapMatches(mapToUse->name, mapName))
+ continue;
+ ListFile(outFile, list[i].file, mapToUse);
+ }
+ }
+ fclose(inputFile);
+ }
+ warningLevel = oldWarningLevel;
}
return 1;
}
-
diff --git a/app/xkbcomp/misc.c b/app/xkbcomp/misc.c
index 91688f739..4990a7439 100644
--- a/app/xkbcomp/misc.c
+++ b/app/xkbcomp/misc.c
@@ -1,4 +1,3 @@
-/* $Xorg: misc.c,v 1.3 2000/08/17 19:54:33 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/misc.c,v 3.4 2001/01/17 23:45:44 dawes Exp $ */
#include "xkbcomp.h"
#include "xkbpath.h"
@@ -38,73 +36,95 @@
/***====================================================================***/
+/**
+ * Open the file given in the include statement and parse it's content.
+ * If the statement defines a specific map to use, this map is returned in
+ * file_rtrn. Otherwise, the default map is returned.
+ *
+ * @param stmt The include statement, specifying the file name to look for.
+ * @param file_type Type of file (XkmKeyNamesIdx, etc.)
+ * @param file_rtrn Returns the key map to be used.
+ * @param merge_rtrn Always returns stmt->merge.
+ *
+ * @return True on success or False otherwise.
+ */
Bool
-ProcessIncludeFile( IncludeStmt * stmt,
- unsigned file_type,
- XkbFile ** file_rtrn,
- unsigned * merge_rtrn)
+ProcessIncludeFile(IncludeStmt * stmt,
+ unsigned file_type,
+ XkbFile ** file_rtrn, unsigned *merge_rtrn)
{
-FILE *file;
-XkbFile *rtrn,*mapToUse;
-char oldFile[1024];
-int oldLine = lineNum;
-
- rtrn= XkbFindFileInCache(stmt->file,file_type,&stmt->path);
- if (rtrn==NULL) {
- file= XkbFindFileInPath(stmt->file,file_type,&stmt->path);
- if (file==NULL) {
- ERROR2("Can't find file \"%s\" for %s include\n",stmt->file,
- XkbDirectoryForInclude(file_type));
- ACTION("Exiting\n");
- return False;
- }
- strcpy(oldFile,scanFile);
- oldLine= lineNum;
- setScanState(stmt->file,1);
- if (debugFlags&2)
- INFO1("About to parse include file %s\n",stmt->file);
- if ((XKBParseFile(file,&rtrn)==0)||(rtrn==NULL)) {
- setScanState(oldFile,oldLine);
- ERROR1("Error interpreting include file \"%s\"\n",stmt->file);
- ACTION("Exiting\n");
- fclose(file);
- return False;
- }
- fclose(file);
- XkbAddFileToCache(stmt->file,file_type,stmt->path,rtrn);
+ FILE *file;
+ XkbFile *rtrn, *mapToUse;
+ char oldFile[1024] = {0};
+ int oldLine = lineNum;
+
+ rtrn = XkbFindFileInCache(stmt->file, file_type, &stmt->path);
+ if (rtrn == NULL)
+ {
+ /* file not in cache, open it, parse it and store it in cache for next
+ time. */
+ file = XkbFindFileInPath(stmt->file, file_type, &stmt->path);
+ if (file == NULL)
+ {
+ ERROR2("Can't find file \"%s\" for %s include\n", stmt->file,
+ XkbDirectoryForInclude(file_type));
+ ACTION("Exiting\n");
+ return False;
+ }
+ strcpy(oldFile, scanFile);
+ oldLine = lineNum;
+ setScanState(stmt->file, 1);
+ if (debugFlags & 2)
+ INFO1("About to parse include file %s\n", stmt->file);
+ /* parse the file */
+ if ((XKBParseFile(file, &rtrn) == 0) || (rtrn == NULL))
+ {
+ setScanState(oldFile, oldLine);
+ ERROR1("Error interpreting include file \"%s\"\n", stmt->file);
+ ACTION("Exiting\n");
+ fclose(file);
+ return False;
+ }
+ fclose(file);
+ XkbAddFileToCache(stmt->file, file_type, stmt->path, rtrn);
}
- mapToUse= rtrn;
- if (stmt->map!=NULL) {
- while ((mapToUse)&&((!uStringEqual(mapToUse->name,stmt->map))||
- (mapToUse->type!=file_type))) {
- mapToUse= (XkbFile *)mapToUse->common.next;
- }
- if (!mapToUse) {
- ERROR3("No %s named \"%s\" in the include file \"%s\"\n",
- XkbConfigText(file_type,XkbMessage),
- stmt->map,stmt->file);
- ACTION("Exiting\n");
- return False;
- }
+ mapToUse = rtrn;
+ if (stmt->map != NULL)
+ {
+ while ((mapToUse) && ((!uStringEqual(mapToUse->name, stmt->map)) ||
+ (mapToUse->type != file_type)))
+ {
+ mapToUse = (XkbFile *) mapToUse->common.next;
+ }
+ if (!mapToUse)
+ {
+ ERROR3("No %s named \"%s\" in the include file \"%s\"\n",
+ XkbConfigText(file_type, XkbMessage), stmt->map,
+ stmt->file);
+ ACTION("Exiting\n");
+ return False;
+ }
}
- else if ((rtrn->common.next!=NULL)&&(warningLevel>5)) {
- WARN1("No map in include statement, but \"%s\" contains several\n",
- stmt->file);
- ACTION1("Using first defined map, \"%s\"\n",rtrn->name);
+ else if ((rtrn->common.next != NULL) && (warningLevel > 5))
+ {
+ WARN1("No map in include statement, but \"%s\" contains several\n",
+ stmt->file);
+ ACTION1("Using first defined map, \"%s\"\n", rtrn->name);
}
- setScanState(oldFile,oldLine);
- if (mapToUse->type!=file_type) {
- ERROR2("Include file wrong type (expected %s, got %s)\n",
- XkbConfigText(file_type,XkbMessage),
- XkbConfigText(mapToUse->type,XkbMessage));
- ACTION1("Include file \"%s\" ignored\n",stmt->file);
- return False;
+ setScanState(oldFile, oldLine);
+ if (mapToUse->type != file_type)
+ {
+ ERROR2("Include file wrong type (expected %s, got %s)\n",
+ XkbConfigText(file_type, XkbMessage),
+ XkbConfigText(mapToUse->type, XkbMessage));
+ ACTION1("Include file \"%s\" ignored\n", stmt->file);
+ return False;
}
/* FIXME: we have to check recursive includes here (or somewhere) */
- mapToUse->compiled= True;
- *file_rtrn= mapToUse;
- *merge_rtrn= stmt->merge;
+ mapToUse->compiled = True;
+ *file_rtrn = mapToUse;
+ *merge_rtrn = stmt->merge;
return True;
}
@@ -113,16 +133,16 @@ int oldLine = lineNum;
int
ReportNotArray(const char *type, const char *field, const char *name)
{
- ERROR2("The %s %s field is not an array\n",type,field);
- ACTION1("Ignoring illegal assignment in %s\n",name);
+ ERROR2("The %s %s field is not an array\n", type, field);
+ ACTION1("Ignoring illegal assignment in %s\n", name);
return False;
}
int
ReportShouldBeArray(const char *type, const char *field, char *name)
{
- ERROR2("Missing subscript for %s %s\n",type,field);
- ACTION1("Ignoring illegal assignment in %s\n",name);
+ ERROR2("Missing subscript for %s %s\n", type, field);
+ ACTION1("Ignoring illegal assignment in %s\n", name);
return False;
}
@@ -130,373 +150,432 @@ int
ReportBadType(const char *type, const char *field,
const char *name, const char *wanted)
{
- ERROR3("The %s %s field must be a %s\n",type,field,wanted);
- ACTION1("Ignoring illegal assignment in %s\n",name);
+ ERROR3("The %s %s field must be a %s\n", type, field, wanted);
+ ACTION1("Ignoring illegal assignment in %s\n", name);
return False;
}
int
-ReportBadIndexType(char *type,char *field,char *name,char *wanted)
+ReportBadIndexType(char *type, char *field, char *name, char *wanted)
{
- ERROR3("Index for the %s %s field must be a %s\n",type,field,wanted);
- ACTION1("Ignoring assignment to illegal field in %s\n",name);
+ ERROR3("Index for the %s %s field must be a %s\n", type, field, wanted);
+ ACTION1("Ignoring assignment to illegal field in %s\n", name);
return False;
}
int
ReportBadField(const char *type, const char *field, const char *name)
{
- ERROR3("Unknown %s field %s in %s\n",type,field,name);
- ACTION1("Ignoring assignment to unknown field in %s\n",name);
+ ERROR3("Unknown %s field %s in %s\n", type, field, name);
+ ACTION1("Ignoring assignment to unknown field in %s\n", name);
return False;
}
int
-ReportMultipleDefs(char *type,char *field,char *name)
+ReportMultipleDefs(char *type, char *field, char *name)
{
- WARN3("Multiple definitions of %s in %s \"%s\"\n",field,type,name);
+ WARN3("Multiple definitions of %s in %s \"%s\"\n", field, type, name);
ACTION("Using last definition\n");
return False;
}
/***====================================================================***/
-Bool
-UseNewField( unsigned field,
- CommonInfo * oldDefs,
- CommonInfo * newDefs,
- unsigned * pCollide)
+Bool
+UseNewField(unsigned field,
+ CommonInfo * oldDefs, CommonInfo * newDefs, unsigned *pCollide)
{
-Bool useNew;
-
- useNew= False;
- if (oldDefs->defined&field) {
- if (newDefs->defined&field) {
- if (((oldDefs->fileID==newDefs->fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- *pCollide|= field;
- }
- if (newDefs->merge!=MergeAugment)
- useNew= True;
- }
+ Bool useNew;
+
+ useNew = False;
+ if (oldDefs->defined & field)
+ {
+ if (newDefs->defined & field)
+ {
+ if (((oldDefs->fileID == newDefs->fileID)
+ && (warningLevel > 0)) || (warningLevel > 9))
+ {
+ *pCollide |= field;
+ }
+ if (newDefs->merge != MergeAugment)
+ useNew = True;
+ }
}
- else if (newDefs->defined&field)
- useNew= True;
+ else if (newDefs->defined & field)
+ useNew = True;
return useNew;
}
-Bool
-MergeNewField( unsigned field,
- CommonInfo * oldDefs,
- CommonInfo * newDefs,
- unsigned * pCollide)
+Bool
+MergeNewField(unsigned field,
+ CommonInfo * oldDefs, CommonInfo * newDefs, unsigned *pCollide)
{
- if ((oldDefs->defined&field)&&(newDefs->defined&field)) {
- if (((oldDefs->fileID==newDefs->fileID)&&(warningLevel>0))||
- (warningLevel>9)) {
- *pCollide|= field;
- }
- if (newDefs->merge==MergeAugment)
- return True;
+ if ((oldDefs->defined & field) && (newDefs->defined & field))
+ {
+ if (((oldDefs->fileID == newDefs->fileID) && (warningLevel > 0)) ||
+ (warningLevel > 9))
+ {
+ *pCollide |= field;
+ }
+ if (newDefs->merge == MergeAugment)
+ return True;
}
return False;
}
XPointer
-ClearCommonInfo(CommonInfo *cmn)
+ClearCommonInfo(CommonInfo * cmn)
{
- if (cmn!=NULL) {
- CommonInfo *this,*next;
- for (this=cmn;this!=NULL;this=next) {
- next= this->next;
- uFree(this);
- }
+ if (cmn != NULL)
+ {
+ CommonInfo *this, *next;
+ for (this = cmn; this != NULL; this = next)
+ {
+ next = this->next;
+ uFree(this);
+ }
}
return NULL;
}
XPointer
-AddCommonInfo(CommonInfo *old,CommonInfo *new)
+AddCommonInfo(CommonInfo * old, CommonInfo * new)
{
-CommonInfo * first;
+ CommonInfo *first;
- first= old;
- while ( old && old->next ) {
- old= old->next;
+ first = old;
+ while (old && old->next)
+ {
+ old = old->next;
}
- new->next= NULL;
- if (old) {
- old->next= new;
- return (XPointer)first;
+ new->next = NULL;
+ if (old)
+ {
+ old->next = new;
+ return (XPointer) first;
}
- return (XPointer)new;
+ return (XPointer) new;
}
/***====================================================================***/
-typedef struct _KeyNameDesc {
- KeySym level1;
- KeySym level2;
- char name[5];
- Bool used;
+typedef struct _KeyNameDesc
+{
+ KeySym level1;
+ KeySym level2;
+ char name[5];
+ Bool used;
} KeyNameDesc;
-KeyNameDesc dfltKeys[] = {
- { XK_Escape, NoSymbol, "ESC\0" },
- { XK_quoteleft, XK_asciitilde, "TLDE" },
- { XK_1, XK_exclam, "AE01" },
- { XK_2, XK_at, "AE02" },
- { XK_3, XK_numbersign, "AE03" },
- { XK_4, XK_dollar, "AE04" },
- { XK_5, XK_percent, "AE05" },
- { XK_6, XK_asciicircum, "AE06" },
- { XK_7, XK_ampersand, "AE07" },
- { XK_8, XK_asterisk, "AE08" },
- { XK_9, XK_parenleft, "AE09" },
- { XK_0, XK_parenright, "AE10" },
- { XK_minus, XK_underscore, "AE11" },
- { XK_equal, XK_plus, "AE12" },
- { XK_BackSpace, NoSymbol, "BKSP" },
- { XK_Tab, NoSymbol, "TAB\0" },
- { XK_q, XK_Q, "AD01" },
- { XK_w, XK_W, "AD02" },
- { XK_e, XK_E, "AD03" },
- { XK_r, XK_R, "AD04" },
- { XK_t, XK_T, "AD05" },
- { XK_y, XK_Y, "AD06" },
- { XK_u, XK_U, "AD07" },
- { XK_i, XK_I, "AD08" },
- { XK_o, XK_O, "AD09" },
- { XK_p, XK_P, "AD10" },
- { XK_bracketleft, XK_braceleft, "AD11" },
- { XK_bracketright,XK_braceright, "AD12" },
- { XK_Return, NoSymbol, "RTRN" },
- { XK_Caps_Lock, NoSymbol, "CAPS" },
- { XK_a, XK_A, "AC01" },
- { XK_s, XK_S, "AC02" },
- { XK_d, XK_D, "AC03" },
- { XK_f, XK_F, "AC04" },
- { XK_g, XK_G, "AC05" },
- { XK_h, XK_H, "AC06" },
- { XK_j, XK_J, "AC07" },
- { XK_k, XK_K, "AC08" },
- { XK_l, XK_L, "AC09" },
- { XK_semicolon, XK_colon, "AC10" },
- { XK_quoteright, XK_quotedbl, "AC11" },
- { XK_Shift_L, NoSymbol, "LFSH" },
- { XK_z, XK_Z, "AB01" },
- { XK_x, XK_X, "AB02" },
- { XK_c, XK_C, "AB03" },
- { XK_v, XK_V, "AB04" },
- { XK_b, XK_B, "AB05" },
- { XK_n, XK_N, "AB06" },
- { XK_m, XK_M, "AB07" },
- { XK_comma, XK_less, "AB08" },
- { XK_period, XK_greater, "AB09" },
- { XK_slash, XK_question, "AB10" },
- { XK_backslash, XK_bar, "BKSL" },
- { XK_Control_L, NoSymbol, "LCTL" },
- { XK_space, NoSymbol, "SPCE" },
- { XK_Shift_R, NoSymbol, "RTSH" },
- { XK_Alt_L, NoSymbol, "LALT" },
- { XK_space, NoSymbol, "SPCE" },
- { XK_Control_R, NoSymbol, "RCTL" },
- { XK_Alt_R, NoSymbol, "RALT" },
- { XK_F1, NoSymbol, "FK01" },
- { XK_F2, NoSymbol, "FK02" },
- { XK_F3, NoSymbol, "FK03" },
- { XK_F4, NoSymbol, "FK04" },
- { XK_F5, NoSymbol, "FK05" },
- { XK_F6, NoSymbol, "FK06" },
- { XK_F7, NoSymbol, "FK07" },
- { XK_F8, NoSymbol, "FK08" },
- { XK_F9, NoSymbol, "FK09" },
- { XK_F10, NoSymbol, "FK10" },
- { XK_F11, NoSymbol, "FK11" },
- { XK_F12, NoSymbol, "FK12" },
- { XK_Print, NoSymbol, "PRSC" },
- { XK_Scroll_Lock, NoSymbol, "SCLK" },
- { XK_Pause, NoSymbol, "PAUS" },
- { XK_Insert, NoSymbol, "INS\0" },
- { XK_Home, NoSymbol, "HOME" },
- { XK_Prior, NoSymbol, "PGUP" },
- { XK_Delete, NoSymbol, "DELE" },
- { XK_End, NoSymbol, "END" },
- { XK_Next, NoSymbol, "PGDN" },
- { XK_Up, NoSymbol, "UP\0\0" },
- { XK_Left, NoSymbol, "LEFT" },
- { XK_Down, NoSymbol, "DOWN" },
- { XK_Right, NoSymbol, "RGHT" },
- { XK_Num_Lock, NoSymbol, "NMLK" },
- { XK_KP_Divide, NoSymbol, "KPDV" },
- { XK_KP_Multiply, NoSymbol, "KPMU" },
- { XK_KP_Subtract, NoSymbol, "KPSU" },
- { NoSymbol, XK_KP_7, "KP7\0" },
- { NoSymbol, XK_KP_8, "KP8\0" },
- { NoSymbol, XK_KP_9, "KP9\0" },
- { XK_KP_Add, NoSymbol, "KPAD" },
- { NoSymbol, XK_KP_4, "KP4\0" },
- { NoSymbol, XK_KP_5, "KP5\0" },
- { NoSymbol, XK_KP_6, "KP6\0" },
- { NoSymbol, XK_KP_1, "KP1\0" },
- { NoSymbol, XK_KP_2, "KP2\0" },
- { NoSymbol, XK_KP_3, "KP3\0" },
- { XK_KP_Enter, NoSymbol, "KPEN" },
- { NoSymbol, XK_KP_0, "KP0\0" },
- { XK_KP_Delete, NoSymbol, "KPDL" },
- { XK_less, XK_greater, "LSGT" },
- { XK_KP_Separator,NoSymbol, "KPCO" },
- { XK_Find, NoSymbol, "FIND" },
- { NoSymbol, NoSymbol, "\0\0\0\0" }
+static KeyNameDesc dfltKeys[] = {
+ {XK_Escape, NoSymbol, "ESC\0"},
+ {XK_quoteleft, XK_asciitilde, "TLDE"},
+ {XK_1, XK_exclam, "AE01"},
+ {XK_2, XK_at, "AE02"},
+ {XK_3, XK_numbersign, "AE03"},
+ {XK_4, XK_dollar, "AE04"},
+ {XK_5, XK_percent, "AE05"},
+ {XK_6, XK_asciicircum, "AE06"},
+ {XK_7, XK_ampersand, "AE07"},
+ {XK_8, XK_asterisk, "AE08"},
+ {XK_9, XK_parenleft, "AE09"},
+ {XK_0, XK_parenright, "AE10"},
+ {XK_minus, XK_underscore, "AE11"},
+ {XK_equal, XK_plus, "AE12"},
+ {XK_BackSpace, NoSymbol, "BKSP"},
+ {XK_Tab, NoSymbol, "TAB\0"},
+ {XK_q, XK_Q, "AD01"},
+ {XK_w, XK_W, "AD02"},
+ {XK_e, XK_E, "AD03"},
+ {XK_r, XK_R, "AD04"},
+ {XK_t, XK_T, "AD05"},
+ {XK_y, XK_Y, "AD06"},
+ {XK_u, XK_U, "AD07"},
+ {XK_i, XK_I, "AD08"},
+ {XK_o, XK_O, "AD09"},
+ {XK_p, XK_P, "AD10"},
+ {XK_bracketleft, XK_braceleft, "AD11"},
+ {XK_bracketright, XK_braceright, "AD12"},
+ {XK_Return, NoSymbol, "RTRN"},
+ {XK_Caps_Lock, NoSymbol, "CAPS"},
+ {XK_a, XK_A, "AC01"},
+ {XK_s, XK_S, "AC02"},
+ {XK_d, XK_D, "AC03"},
+ {XK_f, XK_F, "AC04"},
+ {XK_g, XK_G, "AC05"},
+ {XK_h, XK_H, "AC06"},
+ {XK_j, XK_J, "AC07"},
+ {XK_k, XK_K, "AC08"},
+ {XK_l, XK_L, "AC09"},
+ {XK_semicolon, XK_colon, "AC10"},
+ {XK_quoteright, XK_quotedbl, "AC11"},
+ {XK_Shift_L, NoSymbol, "LFSH"},
+ {XK_z, XK_Z, "AB01"},
+ {XK_x, XK_X, "AB02"},
+ {XK_c, XK_C, "AB03"},
+ {XK_v, XK_V, "AB04"},
+ {XK_b, XK_B, "AB05"},
+ {XK_n, XK_N, "AB06"},
+ {XK_m, XK_M, "AB07"},
+ {XK_comma, XK_less, "AB08"},
+ {XK_period, XK_greater, "AB09"},
+ {XK_slash, XK_question, "AB10"},
+ {XK_backslash, XK_bar, "BKSL"},
+ {XK_Control_L, NoSymbol, "LCTL"},
+ {XK_space, NoSymbol, "SPCE"},
+ {XK_Shift_R, NoSymbol, "RTSH"},
+ {XK_Alt_L, NoSymbol, "LALT"},
+ {XK_space, NoSymbol, "SPCE"},
+ {XK_Control_R, NoSymbol, "RCTL"},
+ {XK_Alt_R, NoSymbol, "RALT"},
+ {XK_F1, NoSymbol, "FK01"},
+ {XK_F2, NoSymbol, "FK02"},
+ {XK_F3, NoSymbol, "FK03"},
+ {XK_F4, NoSymbol, "FK04"},
+ {XK_F5, NoSymbol, "FK05"},
+ {XK_F6, NoSymbol, "FK06"},
+ {XK_F7, NoSymbol, "FK07"},
+ {XK_F8, NoSymbol, "FK08"},
+ {XK_F9, NoSymbol, "FK09"},
+ {XK_F10, NoSymbol, "FK10"},
+ {XK_F11, NoSymbol, "FK11"},
+ {XK_F12, NoSymbol, "FK12"},
+ {XK_Print, NoSymbol, "PRSC"},
+ {XK_Scroll_Lock, NoSymbol, "SCLK"},
+ {XK_Pause, NoSymbol, "PAUS"},
+ {XK_Insert, NoSymbol, "INS\0"},
+ {XK_Home, NoSymbol, "HOME"},
+ {XK_Prior, NoSymbol, "PGUP"},
+ {XK_Delete, NoSymbol, "DELE"},
+ {XK_End, NoSymbol, "END"},
+ {XK_Next, NoSymbol, "PGDN"},
+ {XK_Up, NoSymbol, "UP\0\0"},
+ {XK_Left, NoSymbol, "LEFT"},
+ {XK_Down, NoSymbol, "DOWN"},
+ {XK_Right, NoSymbol, "RGHT"},
+ {XK_Num_Lock, NoSymbol, "NMLK"},
+ {XK_KP_Divide, NoSymbol, "KPDV"},
+ {XK_KP_Multiply, NoSymbol, "KPMU"},
+ {XK_KP_Subtract, NoSymbol, "KPSU"},
+ {NoSymbol, XK_KP_7, "KP7\0"},
+ {NoSymbol, XK_KP_8, "KP8\0"},
+ {NoSymbol, XK_KP_9, "KP9\0"},
+ {XK_KP_Add, NoSymbol, "KPAD"},
+ {NoSymbol, XK_KP_4, "KP4\0"},
+ {NoSymbol, XK_KP_5, "KP5\0"},
+ {NoSymbol, XK_KP_6, "KP6\0"},
+ {NoSymbol, XK_KP_1, "KP1\0"},
+ {NoSymbol, XK_KP_2, "KP2\0"},
+ {NoSymbol, XK_KP_3, "KP3\0"},
+ {XK_KP_Enter, NoSymbol, "KPEN"},
+ {NoSymbol, XK_KP_0, "KP0\0"},
+ {XK_KP_Delete, NoSymbol, "KPDL"},
+ {XK_less, XK_greater, "LSGT"},
+ {XK_KP_Separator, NoSymbol, "KPCO"},
+ {XK_Find, NoSymbol, "FIND"},
+ {NoSymbol, NoSymbol, "\0\0\0\0"}
};
Status
ComputeKbdDefaults(XkbDescPtr xkb)
{
-Status rtrn;
-register int i,tmp,nUnknown;
-KeyNameDesc * name;
-KeySym * syms;
-
- if ((xkb->names==NULL)||(xkb->names->keys==NULL)) {
- if ((rtrn=XkbAllocNames(xkb,XkbKeyNamesMask,0,0))!=Success)
- return rtrn;
+ Status rtrn;
+ register int i, tmp, nUnknown;
+ KeyNameDesc *name;
+ KeySym *syms;
+ char tmpname[XkbKeyNameLength + 1];
+
+ if ((xkb->names == NULL) || (xkb->names->keys == NULL))
+ {
+ if ((rtrn = XkbAllocNames(xkb, XkbKeyNamesMask, 0, 0)) != Success)
+ return rtrn;
}
- for (name=dfltKeys;(name->name[0]!='\0');name++) {
- name->used= False;
+ for (name = dfltKeys; (name->name[0] != '\0'); name++)
+ {
+ name->used = False;
}
- nUnknown= 0;
- for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) {
- tmp= XkbKeyNumSyms(xkb,i);
- if ((xkb->names->keys[i].name[0]=='\0')&&(tmp>0)) {
- tmp= XkbKeyGroupsWidth(xkb,i);
- syms= XkbKeySymsPtr(xkb,i);
- for (name=dfltKeys;(name->name[0]!='\0');name++) {
- Bool match= True;
- if (((name->level1!=syms[0])&&(name->level1!=NoSymbol))||
- ((name->level2!=NoSymbol)&&(tmp<2))||
- ((name->level2!=syms[1])&&(name->level2!=NoSymbol))) {
- match= False;
- }
- if (match) {
- if (!name->used) {
- memcpy(xkb->names->keys[i].name,name->name,
- XkbKeyNameLength);
- name->used= True;
- }
- else {
- if (warningLevel>2) {
- WARN1("Several keys match pattern for %s\n",
- XkbKeyNameText(name->name,XkbMessage));
- ACTION2("Using <U%03d> for key %d\n",nUnknown,i);
- }
- sprintf(xkb->names->keys[i].name,"U%03d",nUnknown++);
- }
- break;
- }
- }
- if (xkb->names->keys[i].name[0]=='\0') {
- if (warningLevel>2) {
- WARN1("Key %d does not match any defaults\n",i);
- ACTION1("Using name <U%03d>\n",nUnknown);
- sprintf(xkb->names->keys[i].name,"U%03d",nUnknown++);
- }
- }
- }
+ nUnknown = 0;
+ for (i = xkb->min_key_code; i <= xkb->max_key_code; i++)
+ {
+ tmp = XkbKeyNumSyms(xkb, i);
+ if ((xkb->names->keys[i].name[0] == '\0') && (tmp > 0))
+ {
+ tmp = XkbKeyGroupsWidth(xkb, i);
+ syms = XkbKeySymsPtr(xkb, i);
+ for (name = dfltKeys; (name->name[0] != '\0'); name++)
+ {
+ Bool match = True;
+ if (((name->level1 != syms[0])
+ && (name->level1 != NoSymbol))
+ || ((name->level2 != NoSymbol) && (tmp < 2))
+ || ((name->level2 != syms[1])
+ && (name->level2 != NoSymbol)))
+ {
+ match = False;
+ }
+ if (match)
+ {
+ if (!name->used)
+ {
+ memcpy(xkb->names->keys[i].name, name->name,
+ XkbKeyNameLength);
+ name->used = True;
+ }
+ else
+ {
+ if (warningLevel > 2)
+ {
+ WARN1
+ ("Several keys match pattern for %s\n",
+ XkbKeyNameText(name->name, XkbMessage));
+ ACTION2("Using <U%03d> for key %d\n",
+ nUnknown, i);
+ }
+ snprintf(tmpname, sizeof(tmpname), "U%03d",
+ nUnknown++);
+ memcpy(xkb->names->keys[i].name, tmpname,
+ XkbKeyNameLength);
+ }
+ break;
+ }
+ }
+ if (xkb->names->keys[i].name[0] == '\0')
+ {
+ if (warningLevel > 2)
+ {
+ WARN1("Key %d does not match any defaults\n", i);
+ ACTION1("Using name <U%03d>\n", nUnknown);
+ snprintf(tmpname, sizeof(tmpname), "U%03d", nUnknown++);
+ memcpy(xkb->names->keys[i].name, tmpname,
+ XkbKeyNameLength);
+ }
+ }
+ }
}
return Success;
}
+/**
+ * Find the key with the given name and return its keycode in kc_rtrn.
+ *
+ * @param name The 4-letter name of the key as a long.
+ * @param kc_rtrn Set to the keycode if the key was found, otherwise 0.
+ * @param use_aliases True if the key aliases should be searched too.
+ * @param create If True and the key is not found, it is added to the
+ * xkb->names at the first free keycode.
+ * @param start_from Keycode to start searching from.
+ *
+ * @return True if found, False otherwise.
+ */
Bool
-FindNamedKey( XkbDescPtr xkb,
- unsigned long name,
- unsigned int * kc_rtrn,
- Bool use_aliases,
- Bool create,
- int start_from)
+FindNamedKey(XkbDescPtr xkb,
+ unsigned long name,
+ unsigned int *kc_rtrn,
+ Bool use_aliases, Bool create, int start_from)
{
-register unsigned n;
+ register unsigned n;
- if (start_from<xkb->min_key_code) {
- start_from= xkb->min_key_code;
+ if (start_from < xkb->min_key_code)
+ {
+ start_from = xkb->min_key_code;
}
- else if (start_from>xkb->max_key_code) {
- return False;
+ else if (start_from > xkb->max_key_code)
+ {
+ return False;
}
- *kc_rtrn= 0; /* some callers rely on this */
- if (xkb&&xkb->names&&xkb->names->keys) {
- for (n=start_from;n<=xkb->max_key_code;n++) {
- unsigned long tmp;
- tmp= KeyNameToLong(xkb->names->keys[n].name);
- if (tmp==name) {
- *kc_rtrn= n;
- return True;
- }
- }
- if (use_aliases) {
- unsigned long new_name;
- if (FindKeyNameForAlias(xkb,name,&new_name))
- return FindNamedKey(xkb,new_name,kc_rtrn,False,create,0);
- }
+ *kc_rtrn = 0; /* some callers rely on this */
+ if (xkb && xkb->names && xkb->names->keys)
+ {
+ for (n = start_from; n <= xkb->max_key_code; n++)
+ {
+ unsigned long tmp;
+ tmp = KeyNameToLong(xkb->names->keys[n].name);
+ if (tmp == name)
+ {
+ *kc_rtrn = n;
+ return True;
+ }
+ }
+ if (use_aliases)
+ {
+ unsigned long new_name;
+ if (FindKeyNameForAlias(xkb, name, &new_name))
+ return FindNamedKey(xkb, new_name, kc_rtrn, False, create, 0);
+ }
}
- if (create) {
- if ((!xkb->names)||(!xkb->names->keys)) {
- if (xkb->min_key_code<XkbMinLegalKeyCode) {
- xkb->min_key_code= XkbMinLegalKeyCode;
- xkb->max_key_code= XkbMaxLegalKeyCode;
- }
- if (XkbAllocNames(xkb,XkbKeyNamesMask,0,0)!=Success) {
- if (warningLevel>0) {
- WARN("Couldn't allocate key names in FindNamedKey\n");
- ACTION1("Key \"%s\" not automatically created\n",
- longText(name,XkbMessage));
- }
- return False;
- }
- }
- for (n=xkb->min_key_code;n<=xkb->max_key_code;n++) {
- if (xkb->names->keys[n].name[0]=='\0') {
- char buf[XkbKeyNameLength+1];
- LongToKeyName(name,buf);
- memcpy(xkb->names->keys[n].name,buf,XkbKeyNameLength);
- *kc_rtrn= n;
- return True;
- }
- }
+ if (create)
+ {
+ if ((!xkb->names) || (!xkb->names->keys))
+ {
+ if (xkb->min_key_code < XkbMinLegalKeyCode)
+ {
+ xkb->min_key_code = XkbMinLegalKeyCode;
+ xkb->max_key_code = XkbMaxLegalKeyCode;
+ }
+ if (XkbAllocNames(xkb, XkbKeyNamesMask, 0, 0) != Success)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Couldn't allocate key names in FindNamedKey\n");
+ ACTION1("Key \"%s\" not automatically created\n",
+ longText(name, XkbMessage));
+ }
+ return False;
+ }
+ }
+ /* Find first unused keycode and store our key here */
+ for (n = xkb->min_key_code; n <= xkb->max_key_code; n++)
+ {
+ if (xkb->names->keys[n].name[0] == '\0')
+ {
+ char buf[XkbKeyNameLength + 1];
+ LongToKeyName(name, buf);
+ memcpy(xkb->names->keys[n].name, buf, XkbKeyNameLength);
+ *kc_rtrn = n;
+ return True;
+ }
+ }
}
return False;
}
Bool
-FindKeyNameForAlias(XkbDescPtr xkb,unsigned long lname,unsigned long *real_name)
+FindKeyNameForAlias(XkbDescPtr xkb, unsigned long lname,
+ unsigned long *real_name)
{
-register int i;
-char name[XkbKeyNameLength+1];
-
- if (xkb&&xkb->geom&&xkb->geom->key_aliases) {
- XkbKeyAliasPtr a;
- a= xkb->geom->key_aliases;
- LongToKeyName(lname,name);
- name[XkbKeyNameLength]= '\0';
- for (i=0;i<xkb->geom->num_key_aliases;i++,a++) {
- if (strncmp(name,a->alias,XkbKeyNameLength)==0) {
- *real_name= KeyNameToLong(a->real);
- return True;
- }
- }
+ register int i;
+ char name[XkbKeyNameLength + 1];
+
+ if (xkb && xkb->geom && xkb->geom->key_aliases)
+ {
+ XkbKeyAliasPtr a;
+ a = xkb->geom->key_aliases;
+ LongToKeyName(lname, name);
+ name[XkbKeyNameLength] = '\0';
+ for (i = 0; i < xkb->geom->num_key_aliases; i++, a++)
+ {
+ if (strncmp(name, a->alias, XkbKeyNameLength) == 0)
+ {
+ *real_name = KeyNameToLong(a->real);
+ return True;
+ }
+ }
}
- if (xkb&&xkb->names&&xkb->names->key_aliases) {
- XkbKeyAliasPtr a;
- a= xkb->names->key_aliases;
- LongToKeyName(lname,name);
- name[XkbKeyNameLength]= '\0';
- for (i=0;i<xkb->names->num_key_aliases;i++,a++) {
- if (strncmp(name,a->alias,XkbKeyNameLength)==0) {
- *real_name= KeyNameToLong(a->real);
- return True;
- }
- }
+ if (xkb && xkb->names && xkb->names->key_aliases)
+ {
+ XkbKeyAliasPtr a;
+ a = xkb->names->key_aliases;
+ LongToKeyName(lname, name);
+ name[XkbKeyNameLength] = '\0';
+ for (i = 0; i < xkb->names->num_key_aliases; i++, a++)
+ {
+ if (strncmp(name, a->alias, XkbKeyNameLength) == 0)
+ {
+ *real_name = KeyNameToLong(a->real);
+ return True;
+ }
+ }
}
return False;
}
diff --git a/app/xkbcomp/misc.h b/app/xkbcomp/misc.h
index fd16db482..4fa4b6dde 100644
--- a/app/xkbcomp/misc.h
+++ b/app/xkbcomp/misc.h
@@ -1,4 +1,3 @@
-/* $Xorg: misc.h,v 1.3 2000/08/17 19:54:33 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,103 +23,89 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
#ifndef MISC_H
#define MISC_H 1
-typedef struct _CommonInfo {
- unsigned short defined;
- unsigned char fileID;
- unsigned char merge;
- struct _CommonInfo * next;
+typedef struct _CommonInfo
+{
+ unsigned short defined;
+ unsigned char fileID;
+ unsigned char merge;
+ struct _CommonInfo *next;
} CommonInfo;
-extern Bool UseNewField(
- unsigned /* field */,
- CommonInfo * /* oldDefs */,
- CommonInfo * /* newDefs */,
- unsigned * /* pCollide */
-);
-
-extern Bool MergeNewField(
- unsigned /* field */,
- CommonInfo * /* oldDefs */,
- CommonInfo * /* newDefs */,
- unsigned * /* pCollide */
-);
-
-extern XPointer ClearCommonInfo(
- CommonInfo * /* cmn */
-);
-
-extern XPointer AddCommonInfo(
- CommonInfo * /* old */,
- CommonInfo * /* new */
-);
-
-extern int ReportNotArray(
- const char * /* type */,
- const char * /* field */,
- const char * /* name */
-);
-
-extern int ReportShouldBeArray(
- const char * /* type */,
- const char * /* field */,
- char * /* name */
-);
-
-extern int ReportBadType(
- const char * /* type */,
- const char * /* field */,
- const char * /* name */,
- const char * /* wanted */
-);
-
-extern int ReportBadIndexType(
- char * /* type */,
- char * /* field */,
- char * /* name */,
- char * /* wanted */
-);
-
-extern int ReportBadField(
- const char * /* type */,
- const char * /* field */,
- const char * /* name */
-);
-
-extern int ReportMultipleDefs(
- char * /* type */,
- char * /* field */,
- char * /* which */
-);
-
-extern Bool ProcessIncludeFile(
- IncludeStmt * /* stmt */,
- unsigned /* file_type */,
- XkbFile ** /* file_rtrn */,
- unsigned * /* merge_rtrn */
-);
-
-extern Status ComputeKbdDefaults(
- XkbDescPtr /* xkb */
-);
-
-extern Bool FindNamedKey(
- XkbDescPtr /* xkb */,
- unsigned long /* name */,
- unsigned int * /* kc_rtrn */,
- Bool /* use_aliases */,
- Bool /* create */,
- int /* start_from */
-);
-
-extern Bool FindKeyNameForAlias(
- XkbDescPtr /* xkb */,
- unsigned long /* lname */,
- unsigned long * /* real_name */
-);
+extern Bool UseNewField(unsigned /* field */ ,
+ CommonInfo * /* oldDefs */ ,
+ CommonInfo * /* newDefs */ ,
+ unsigned * /* pCollide */
+ );
+
+extern Bool MergeNewField(unsigned /* field */ ,
+ CommonInfo * /* oldDefs */ ,
+ CommonInfo * /* newDefs */ ,
+ unsigned * /* pCollide */
+ );
+
+extern XPointer ClearCommonInfo(CommonInfo * /* cmn */
+ );
+
+extern XPointer AddCommonInfo(CommonInfo * /* old */ ,
+ CommonInfo * /* new */
+ );
+
+extern int ReportNotArray(const char * /* type */ ,
+ const char * /* field */ ,
+ const char * /* name */
+ );
+
+extern int ReportShouldBeArray(const char * /* type */ ,
+ const char * /* field */ ,
+ char * /* name */
+ );
+
+extern int ReportBadType(const char * /* type */ ,
+ const char * /* field */ ,
+ const char * /* name */ ,
+ const char * /* wanted */
+ );
+
+extern int ReportBadIndexType(char * /* type */ ,
+ char * /* field */ ,
+ char * /* name */ ,
+ char * /* wanted */
+ );
+
+extern int ReportBadField(const char * /* type */ ,
+ const char * /* field */ ,
+ const char * /* name */
+ );
+
+extern int ReportMultipleDefs(char * /* type */ ,
+ char * /* field */ ,
+ char * /* which */
+ );
+
+extern Bool ProcessIncludeFile(IncludeStmt * /* stmt */ ,
+ unsigned /* file_type */ ,
+ XkbFile ** /* file_rtrn */ ,
+ unsigned * /* merge_rtrn */
+ );
+
+extern Status ComputeKbdDefaults(XkbDescPtr /* xkb */
+ );
+
+extern Bool FindNamedKey(XkbDescPtr /* xkb */ ,
+ unsigned long /* name */ ,
+ unsigned int * /* kc_rtrn */ ,
+ Bool /* use_aliases */ ,
+ Bool /* create */ ,
+ int /* start_from */
+ );
+
+extern Bool FindKeyNameForAlias(XkbDescPtr /* xkb */ ,
+ unsigned long /* lname */ ,
+ unsigned long * /* real_name */
+ );
#endif /* MISC_H */
diff --git a/app/xkbcomp/parseutils.c b/app/xkbcomp/parseutils.c
index bae18f902..4aa859dbe 100644
--- a/app/xkbcomp/parseutils.c
+++ b/app/xkbcomp/parseutils.c
@@ -1,4 +1,3 @@
-/* $Xorg: parseutils.c,v 1.3 2000/08/17 19:54:33 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,725 +23,822 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
-#define DEBUG_VAR_NOT_LOCAL
#define DEBUG_VAR parseDebug
#include "parseutils.h"
#include "xkbpath.h"
#include <X11/keysym.h>
#include <X11/extensions/XKBgeom.h>
#include <X11/Xalloca.h>
+#include <limits.h>
+#include <stdlib.h>
-XkbFile *rtrnValue;
+XkbFile *rtrnValue;
ParseCommon *
-AppendStmt(ParseCommon *to,ParseCommon *append)
+AppendStmt(ParseCommon * to, ParseCommon * append)
{
-ParseCommon *start= to;
+ ParseCommon *start = to;
- if (append==NULL)
- return to;
- while ((to!=NULL) && (to->next!=NULL)) {
- to= to->next;
+ if (append == NULL)
+ return to;
+ while ((to != NULL) && (to->next != NULL))
+ {
+ to = to->next;
}
- if (to) {
- to->next= append;
- return start;
+ if (to)
+ {
+ to->next = append;
+ return start;
}
return append;
}
ExprDef *
-ExprCreate(unsigned op,unsigned type)
-{
-ExprDef *expr;
- expr= uTypedAlloc(ExprDef);
- if (expr) {
- expr->common.stmtType= StmtExpr;
- expr->common.next= NULL;
- expr->op= op;
- expr->type= type;
- }
- else {
- FATAL("Couldn't allocate expression in parser\n");
- /* NOTREACHED */
+ExprCreate(unsigned op, unsigned type)
+{
+ ExprDef *expr;
+ expr = uTypedAlloc(ExprDef);
+ if (expr)
+ {
+ expr->common.stmtType = StmtExpr;
+ expr->common.next = NULL;
+ expr->op = op;
+ expr->type = type;
+ }
+ else
+ {
+ FATAL("Couldn't allocate expression in parser\n");
+ /* NOTREACHED */
}
return expr;
}
ExprDef *
-ExprCreateUnary(unsigned op,unsigned type,ExprDef *child)
-{
-ExprDef *expr;
- expr= uTypedAlloc(ExprDef);
- if (expr) {
- expr->common.stmtType= StmtExpr;
- expr->common.next= NULL;
- expr->op= op;
- expr->type= type;
- expr->value.child= child;
- }
- else {
- FATAL("Couldn't allocate expression in parser\n");
- /* NOTREACHED */
+ExprCreateUnary(unsigned op, unsigned type, ExprDef * child)
+{
+ ExprDef *expr;
+ expr = uTypedAlloc(ExprDef);
+ if (expr)
+ {
+ expr->common.stmtType = StmtExpr;
+ expr->common.next = NULL;
+ expr->op = op;
+ expr->type = type;
+ expr->value.child = child;
+ }
+ else
+ {
+ FATAL("Couldn't allocate expression in parser\n");
+ /* NOTREACHED */
}
return expr;
}
ExprDef *
-ExprCreateBinary(unsigned op,ExprDef *left,ExprDef *right)
-{
-ExprDef *expr;
- expr= uTypedAlloc(ExprDef);
- if (expr) {
- expr->common.stmtType= StmtExpr;
- expr->common.next= NULL;
- expr->op= op;
- if ((op==OpAssign)||(left->type==TypeUnknown))
- expr->type= right->type;
- else if ((left->type==right->type)||(right->type==TypeUnknown))
- expr->type= left->type;
- else expr->type= TypeUnknown;
- expr->value.binary.left= left;
- expr->value.binary.right= right;
- }
- else {
- FATAL("Couldn't allocate expression in parser\n");
- /* NOTREACHED */
+ExprCreateBinary(unsigned op, ExprDef * left, ExprDef * right)
+{
+ ExprDef *expr;
+ expr = uTypedAlloc(ExprDef);
+ if (expr)
+ {
+ expr->common.stmtType = StmtExpr;
+ expr->common.next = NULL;
+ expr->op = op;
+ if ((op == OpAssign) || (left->type == TypeUnknown))
+ expr->type = right->type;
+ else if ((left->type == right->type) || (right->type == TypeUnknown))
+ expr->type = left->type;
+ else
+ expr->type = TypeUnknown;
+ expr->value.binary.left = left;
+ expr->value.binary.right = right;
+ }
+ else
+ {
+ FATAL("Couldn't allocate expression in parser\n");
+ /* NOTREACHED */
}
return expr;
}
KeycodeDef *
-KeycodeCreate(char *name,ExprDef *value)
+KeycodeCreate(char *name, ExprDef * value)
{
-KeycodeDef *def;
+ KeycodeDef *def;
- def= uTypedAlloc(KeycodeDef);
- if (def) {
- def->common.stmtType= StmtKeycodeDef;
- def->common.next= NULL;
- strncpy(def->name,name,XkbKeyNameLength);
- def->name[XkbKeyNameLength]= '\0';
- def->value= value;
+ def = uTypedAlloc(KeycodeDef);
+ if (def)
+ {
+ def->common.stmtType = StmtKeycodeDef;
+ def->common.next = NULL;
+ strncpy(def->name, name, XkbKeyNameLength);
+ def->name[XkbKeyNameLength] = '\0';
+ def->value = value;
}
- else {
- FATAL("Couldn't allocate key name definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate key name definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
KeyAliasDef *
-KeyAliasCreate(char *alias,char *real)
+KeyAliasCreate(char *alias, char *real)
{
-KeyAliasDef *def;
+ KeyAliasDef *def;
- def= uTypedAlloc(KeyAliasDef);
- if (def) {
- def->common.stmtType= StmtKeyAliasDef;
- def->common.next= NULL;
- strncpy(def->alias,alias,XkbKeyNameLength);
- def->alias[XkbKeyNameLength]= '\0';
- strncpy(def->real,real,XkbKeyNameLength);
- def->real[XkbKeyNameLength]= '\0';
+ def = uTypedAlloc(KeyAliasDef);
+ if (def)
+ {
+ def->common.stmtType = StmtKeyAliasDef;
+ def->common.next = NULL;
+ strncpy(def->alias, alias, XkbKeyNameLength);
+ def->alias[XkbKeyNameLength] = '\0';
+ strncpy(def->real, real, XkbKeyNameLength);
+ def->real[XkbKeyNameLength] = '\0';
}
- else {
- FATAL("Couldn't allocate key alias definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate key alias definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
VModDef *
-VModCreate(Atom name,ExprDef *value)
-{
-VModDef *def;
- def= uTypedAlloc(VModDef);
- if (def) {
- def->common.stmtType= StmtVModDef;
- def->common.next= NULL;
- def->name= name;
- def->value= value;
- }
- else {
- FATAL("Couldn't allocate variable definition in parser\n");
- /* NOTREACHED */
+VModCreate(Atom name, ExprDef * value)
+{
+ VModDef *def;
+ def = uTypedAlloc(VModDef);
+ if (def)
+ {
+ def->common.stmtType = StmtVModDef;
+ def->common.next = NULL;
+ def->name = name;
+ def->value = value;
+ }
+ else
+ {
+ FATAL("Couldn't allocate variable definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
VarDef *
-VarCreate(ExprDef *name,ExprDef *value)
-{
-VarDef *def;
- def= uTypedAlloc(VarDef);
- if (def) {
- def->common.stmtType= StmtVarDef;
- def->common.next= NULL;
- def->name= name;
- def->value= value;
- }
- else {
- FATAL("Couldn't allocate variable definition in parser\n");
- /* NOTREACHED */
+VarCreate(ExprDef * name, ExprDef * value)
+{
+ VarDef *def;
+ def = uTypedAlloc(VarDef);
+ if (def)
+ {
+ def->common.stmtType = StmtVarDef;
+ def->common.next = NULL;
+ def->name = name;
+ def->value = value;
+ }
+ else
+ {
+ FATAL("Couldn't allocate variable definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
VarDef *
-BoolVarCreate(Atom nameToken,unsigned set)
+BoolVarCreate(Atom nameToken, unsigned set)
{
-ExprDef *name,*value;
+ ExprDef *name, *value;
- name= ExprCreate(ExprIdent,TypeUnknown);
- name->value.str= nameToken;
- value= ExprCreate(ExprValue,TypeBoolean);
- value->value.uval= set;
- return VarCreate(name,value);
+ name = ExprCreate(ExprIdent, TypeUnknown);
+ name->value.str = nameToken;
+ value = ExprCreate(ExprValue, TypeBoolean);
+ value->value.uval = set;
+ return VarCreate(name, value);
}
InterpDef *
-InterpCreate(KeySym sym,ExprDef *match)
+InterpCreate(KeySym sym, ExprDef * match)
{
-InterpDef *def;
+ InterpDef *def;
- def= uTypedAlloc(InterpDef);
- if (def) {
- def->common.stmtType= StmtInterpDef;
- def->common.next= NULL;
- def->sym= sym;
- def->match= match;
+ def = uTypedAlloc(InterpDef);
+ if (def)
+ {
+ def->common.stmtType = StmtInterpDef;
+ def->common.next = NULL;
+ def->sym = sym;
+ def->match = match;
}
- else {
- FATAL("Couldn't allocate interp definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate interp definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
KeyTypeDef *
-KeyTypeCreate(Atom name,VarDef *body)
+KeyTypeCreate(Atom name, VarDef * body)
{
-KeyTypeDef *def;
+ KeyTypeDef *def;
- def= uTypedAlloc(KeyTypeDef);
- if (def) {
- def->common.stmtType= StmtKeyTypeDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- def->name= name;
- def->body= body;
+ def = uTypedAlloc(KeyTypeDef);
+ if (def)
+ {
+ def->common.stmtType = StmtKeyTypeDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ def->name = name;
+ def->body = body;
}
- else {
- FATAL("Couldn't allocate key type definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate key type definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
SymbolsDef *
-SymbolsCreate(char *keyName,ExprDef *symbols)
+SymbolsCreate(char *keyName, ExprDef * symbols)
{
-SymbolsDef *def;
+ SymbolsDef *def;
- def= uTypedAlloc(SymbolsDef);
- if (def) {
- def->common.stmtType= StmtSymbolsDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- bzero(def->keyName,5);
- strncpy(def->keyName,keyName,4);
- def->symbols= symbols;
+ def = uTypedAlloc(SymbolsDef);
+ if (def)
+ {
+ def->common.stmtType = StmtSymbolsDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ bzero(def->keyName, 5);
+ strncpy(def->keyName, keyName, 4);
+ def->symbols = symbols;
}
- else {
- FATAL("Couldn't allocate symbols definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate symbols definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
GroupCompatDef *
-GroupCompatCreate(int group,ExprDef *val)
+GroupCompatCreate(int group, ExprDef * val)
{
-GroupCompatDef *def;
+ GroupCompatDef *def;
- def= uTypedAlloc(GroupCompatDef);
- if (def) {
- def->common.stmtType= StmtGroupCompatDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- def->group= group;
- def->def= val;
+ def = uTypedAlloc(GroupCompatDef);
+ if (def)
+ {
+ def->common.stmtType = StmtGroupCompatDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ def->group = group;
+ def->def = val;
}
- else {
- FATAL("Couldn't allocate group compat definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate group compat definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
ModMapDef *
-ModMapCreate(Atom modifier,ExprDef *keys)
+ModMapCreate(Atom modifier, ExprDef * keys)
{
-ModMapDef *def;
+ ModMapDef *def;
- def= uTypedAlloc(ModMapDef);
- if (def) {
- def->common.stmtType= StmtModMapDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- def->modifier= modifier;
- def->keys= keys;
+ def = uTypedAlloc(ModMapDef);
+ if (def)
+ {
+ def->common.stmtType = StmtModMapDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ def->modifier = modifier;
+ def->keys = keys;
}
- else {
- FATAL("Couldn't allocate mod mask definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate mod mask definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
IndicatorMapDef *
-IndicatorMapCreate(Atom name,VarDef *body)
+IndicatorMapCreate(Atom name, VarDef * body)
{
-IndicatorMapDef *def;
+ IndicatorMapDef *def;
- def= uTypedAlloc(IndicatorMapDef);
- if (def) {
- def->common.stmtType= StmtIndicatorMapDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- def->name= name;
- def->body= body;
+ def = uTypedAlloc(IndicatorMapDef);
+ if (def)
+ {
+ def->common.stmtType = StmtIndicatorMapDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ def->name = name;
+ def->body = body;
}
- else {
- FATAL("Couldn't allocate indicator map definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate indicator map definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
IndicatorNameDef *
-IndicatorNameCreate(int ndx,ExprDef *name,Bool virtual)
+IndicatorNameCreate(int ndx, ExprDef * name, Bool virtual)
{
-IndicatorNameDef *def;
+ IndicatorNameDef *def;
- def= uTypedAlloc(IndicatorNameDef);
- if (def) {
- def->common.stmtType= StmtIndicatorNameDef;
- def->common.next= NULL;
- def->merge= MergeDefault;
- def->ndx= ndx;
- def->name= name;
- def->virtual= virtual;
+ def = uTypedAlloc(IndicatorNameDef);
+ if (def)
+ {
+ def->common.stmtType = StmtIndicatorNameDef;
+ def->common.next = NULL;
+ def->merge = MergeDefault;
+ def->ndx = ndx;
+ def->name = name;
+ def->virtual = virtual;
}
- else {
- FATAL("Couldn't allocate indicator index definition in parser\n");
- /* NOTREACHED */
+ else
+ {
+ FATAL("Couldn't allocate indicator index definition in parser\n");
+ /* NOTREACHED */
}
return def;
}
ExprDef *
-ActionCreate(Atom name,ExprDef *args)
+ActionCreate(Atom name, ExprDef * args)
{
-ExprDef *act;
+ ExprDef *act;
- act= uTypedAlloc(ExprDef);
- if (act) {
- act->common.stmtType= StmtExpr;
- act->common.next= NULL;
- act->op= ExprActionDecl;
- act->value.action.name= name;
- act->value.action.args= args;
- return act;
+ act = uTypedAlloc(ExprDef);
+ if (act)
+ {
+ act->common.stmtType = StmtExpr;
+ act->common.next = NULL;
+ act->op = ExprActionDecl;
+ act->value.action.name = name;
+ act->value.action.args = args;
+ return act;
}
FATAL("Couldn't allocate ActionDef in parser\n");
return NULL;
}
ExprDef *
-CreateKeysymList(KeySym sym)
-{
-ExprDef *def;
-
- def= ExprCreate(ExprKeysymList,TypeSymbols);
- if (def) {
- def->value.list.nSyms= 1;
- def->value.list.szSyms= 2;
- def->value.list.syms= uTypedCalloc(2,KeySym);
- if (def->value.list.syms!=NULL) {
- def->value.list.syms[0]= sym;
- return def;
- }
+CreateKeysymList(char *sym)
+{
+ ExprDef *def;
+
+ def = ExprCreate(ExprKeysymList, TypeSymbols);
+ if (def)
+ {
+ def->value.list.nSyms = 1;
+ def->value.list.szSyms = 4;
+ def->value.list.syms = uTypedCalloc(4, char *);
+ if (def->value.list.syms != NULL)
+ {
+ def->value.list.syms[0] = sym;
+ return def;
+ }
}
FATAL("Couldn't allocate expression for keysym list in parser\n");
return NULL;
}
ShapeDef *
-ShapeDeclCreate(Atom name,OutlineDef *outlines)
-{
-ShapeDef * shape;
-OutlineDef * ol;
-
- shape= uTypedAlloc(ShapeDef);
- if (shape!=NULL) {
- bzero(shape,sizeof(ShapeDef));
- shape->common.stmtType= StmtShapeDef;
- shape->common.next= NULL;
- shape->merge= MergeDefault;
- shape->name= name;
- shape->nOutlines= 0;
- shape->outlines= outlines;
- for (ol=outlines;ol!=NULL;ol= (OutlineDef *)ol->common.next) {
- if (ol->nPoints>0)
- shape->nOutlines++;
- }
+ShapeDeclCreate(Atom name, OutlineDef * outlines)
+{
+ ShapeDef *shape;
+ OutlineDef *ol;
+
+ shape = uTypedAlloc(ShapeDef);
+ if (shape != NULL)
+ {
+ bzero(shape, sizeof(ShapeDef));
+ shape->common.stmtType = StmtShapeDef;
+ shape->common.next = NULL;
+ shape->merge = MergeDefault;
+ shape->name = name;
+ shape->nOutlines = 0;
+ shape->outlines = outlines;
+ for (ol = outlines; ol != NULL; ol = (OutlineDef *) ol->common.next)
+ {
+ if (ol->nPoints > 0)
+ shape->nOutlines++;
+ }
}
return shape;
}
OutlineDef *
-OutlineCreate(Atom field,ExprDef *points)
-{
-OutlineDef * outline;
-ExprDef * pt;
-
- outline= uTypedAlloc(OutlineDef);
- if (outline!=NULL) {
- bzero(outline,sizeof(OutlineDef));
- outline->common.stmtType= StmtOutlineDef;
- outline->common.next= NULL;
- outline->field= field;
- outline->nPoints= 0;
- if (points->op==ExprCoord) {
- for (pt=points;pt!=NULL;pt= (ExprDef *)pt->common.next) {
- outline->nPoints++;
- }
- }
- outline->points= points;
+OutlineCreate(Atom field, ExprDef * points)
+{
+ OutlineDef *outline;
+ ExprDef *pt;
+
+ outline = uTypedAlloc(OutlineDef);
+ if (outline != NULL)
+ {
+ bzero(outline, sizeof(OutlineDef));
+ outline->common.stmtType = StmtOutlineDef;
+ outline->common.next = NULL;
+ outline->field = field;
+ outline->nPoints = 0;
+ if (points->op == ExprCoord)
+ {
+ for (pt = points; pt != NULL; pt = (ExprDef *) pt->common.next)
+ {
+ outline->nPoints++;
+ }
+ }
+ outline->points = points;
}
return outline;
}
KeyDef *
-KeyDeclCreate(char *name,ExprDef *expr)
+KeyDeclCreate(char *name, ExprDef * expr)
{
-KeyDef * key;
+ KeyDef *key;
- key= uTypedAlloc(KeyDef);
- if (key!=NULL) {
- bzero(key,sizeof(KeyDef));
- key->common.stmtType= StmtKeyDef;
- key->common.next= NULL;
- if (name) key->name= name;
- else key->expr= expr;
+ key = uTypedAlloc(KeyDef);
+ if (key != NULL)
+ {
+ bzero(key, sizeof(KeyDef));
+ key->common.stmtType = StmtKeyDef;
+ key->common.next = NULL;
+ if (name)
+ key->name = name;
+ else
+ key->expr = expr;
}
return key;
}
KeyDef *
-KeyDeclMerge(KeyDef *into,KeyDef *from)
+KeyDeclMerge(KeyDef * into, KeyDef * from)
{
- into->expr= (ExprDef *)AppendStmt(&into->expr->common,&from->expr->common);
- from->expr= NULL;
+ into->expr =
+ (ExprDef *) AppendStmt(&into->expr->common, &from->expr->common);
+ from->expr = NULL;
uFree(from);
return into;
}
RowDef *
-RowDeclCreate(KeyDef * keys)
-{
-RowDef * row;
-KeyDef * key;
-
- row= uTypedAlloc(RowDef);
- if (row!=NULL) {
- bzero(row,sizeof(RowDef));
- row->common.stmtType= StmtRowDef;
- row->common.next= NULL;
- row->nKeys= 0;
- row->keys= keys;
- for (key=keys;key!=NULL;key=(KeyDef *)key->common.next) {
- if (key->common.stmtType==StmtKeyDef)
- row->nKeys++;
- }
+RowDeclCreate(KeyDef * keys)
+{
+ RowDef *row;
+ KeyDef *key;
+
+ row = uTypedAlloc(RowDef);
+ if (row != NULL)
+ {
+ bzero(row, sizeof(RowDef));
+ row->common.stmtType = StmtRowDef;
+ row->common.next = NULL;
+ row->nKeys = 0;
+ row->keys = keys;
+ for (key = keys; key != NULL; key = (KeyDef *) key->common.next)
+ {
+ if (key->common.stmtType == StmtKeyDef)
+ row->nKeys++;
+ }
}
return row;
}
SectionDef *
-SectionDeclCreate(Atom name,RowDef *rows)
-{
-SectionDef * section;
-RowDef * row;
-
- section= uTypedAlloc(SectionDef);
- if (section!=NULL) {
- bzero(section,sizeof(SectionDef));
- section->common.stmtType= StmtSectionDef;
- section->common.next= NULL;
- section->name= name;
- section->nRows= 0;
- section->rows= rows;
- for (row=rows;row!=NULL;row=(RowDef *)row->common.next) {
- if (row->common.stmtType==StmtRowDef)
- section->nRows++;
- }
+SectionDeclCreate(Atom name, RowDef * rows)
+{
+ SectionDef *section;
+ RowDef *row;
+
+ section = uTypedAlloc(SectionDef);
+ if (section != NULL)
+ {
+ bzero(section, sizeof(SectionDef));
+ section->common.stmtType = StmtSectionDef;
+ section->common.next = NULL;
+ section->name = name;
+ section->nRows = 0;
+ section->rows = rows;
+ for (row = rows; row != NULL; row = (RowDef *) row->common.next)
+ {
+ if (row->common.stmtType == StmtRowDef)
+ section->nRows++;
+ }
}
return section;
}
OverlayKeyDef *
-OverlayKeyCreate(char * under,char *over)
-{
-OverlayKeyDef * key;
-
- key= uTypedAlloc(OverlayKeyDef);
- if (key!=NULL) {
- bzero(key,sizeof(OverlayKeyDef));
- key->common.stmtType= StmtOverlayKeyDef;
- strncpy(key->over,over,XkbKeyNameLength);
- strncpy(key->under,under,XkbKeyNameLength);
- if (over) uFree(over);
- if (under) uFree(under);
+OverlayKeyCreate(char *under, char *over)
+{
+ OverlayKeyDef *key;
+
+ key = uTypedAlloc(OverlayKeyDef);
+ if (key != NULL)
+ {
+ bzero(key, sizeof(OverlayKeyDef));
+ key->common.stmtType = StmtOverlayKeyDef;
+ strncpy(key->over, over, XkbKeyNameLength);
+ strncpy(key->under, under, XkbKeyNameLength);
+ if (over)
+ uFree(over);
+ if (under)
+ uFree(under);
}
return key;
}
OverlayDef *
-OverlayDeclCreate(Atom name,OverlayKeyDef *keys)
-{
-OverlayDef * ol;
-OverlayKeyDef * key;
-
- ol= uTypedAlloc(OverlayDef);
- if (ol!=NULL) {
- bzero(ol,sizeof(OverlayDef));
- ol->common.stmtType= StmtOverlayDef;
- ol->name= name;
- ol->keys= keys;
- for (key=keys;key!=NULL;key=(OverlayKeyDef *)key->common.next) {
- ol->nKeys++;
- }
+OverlayDeclCreate(Atom name, OverlayKeyDef * keys)
+{
+ OverlayDef *ol;
+ OverlayKeyDef *key;
+
+ ol = uTypedAlloc(OverlayDef);
+ if (ol != NULL)
+ {
+ bzero(ol, sizeof(OverlayDef));
+ ol->common.stmtType = StmtOverlayDef;
+ ol->name = name;
+ ol->keys = keys;
+ for (key = keys; key != NULL;
+ key = (OverlayKeyDef *) key->common.next)
+ {
+ ol->nKeys++;
+ }
}
return ol;
}
DoodadDef *
-DoodadCreate(unsigned type,Atom name,VarDef *body)
+DoodadCreate(unsigned type, Atom name, VarDef * body)
{
-DoodadDef * doodad;
+ DoodadDef *doodad;
- doodad= uTypedAlloc(DoodadDef);
- if (doodad!=NULL) {
- bzero(doodad,sizeof(DoodadDef));
- doodad->common.stmtType= StmtDoodadDef;
- doodad->common.next= NULL;
- doodad->type= type;
- doodad->name= name;
- doodad->body= body;
+ doodad = uTypedAlloc(DoodadDef);
+ if (doodad != NULL)
+ {
+ bzero(doodad, sizeof(DoodadDef));
+ doodad->common.stmtType = StmtDoodadDef;
+ doodad->common.next = NULL;
+ doodad->type = type;
+ doodad->name = name;
+ doodad->body = body;
}
return doodad;
}
ExprDef *
-AppendKeysymList(ExprDef *list,KeySym sym)
-{
- if (list->value.list.nSyms>=list->value.list.szSyms) {
- list->value.list.szSyms*=2;
- list->value.list.syms= uTypedRecalloc(list->value.list.syms,
- list->value.list.nSyms,
- list->value.list.szSyms,
- KeySym);
- if (list->value.list.syms==NULL) {
- FATAL("Couldn't resize list of symbols for append\n");
- return NULL;
- }
- }
- list->value.list.syms[list->value.list.nSyms++]= sym;
+AppendKeysymList(ExprDef * list, char *sym)
+{
+ if (list->value.list.nSyms >= list->value.list.szSyms)
+ {
+ list->value.list.szSyms *= 2;
+ list->value.list.syms = uTypedRecalloc(list->value.list.syms,
+ list->value.list.nSyms,
+ list->value.list.szSyms,
+ char *);
+ if (list->value.list.syms == NULL)
+ {
+ FATAL("Couldn't resize list of symbols for append\n");
+ return NULL;
+ }
+ }
+ list->value.list.syms[list->value.list.nSyms++] = sym;
return list;
}
int
-LookupKeysym(char *str,KeySym *sym_rtrn)
-{
-KeySym sym;
-
- if ((!str)||(uStrCaseCmp(str,"any")==0)||(uStrCaseCmp(str,"nosymbol")==0)) {
- *sym_rtrn= NoSymbol;
- return 1;
- }
- else if ((uStrCaseCmp(str,"none")==0)||(uStrCaseCmp(str,"voidsymbol")==0)) {
- *sym_rtrn= XK_VoidSymbol;
- return 1;
- }
- sym= XStringToKeysym(str);
- if (sym!=NoSymbol) {
- *sym_rtrn= sym;
- return 1;
+LookupKeysym(char *str, KeySym * sym_rtrn)
+{
+ KeySym sym;
+ char *tmp;
+
+ if ((!str) || (uStrCaseCmp(str, "any") == 0)
+ || (uStrCaseCmp(str, "nosymbol") == 0))
+ {
+ *sym_rtrn = NoSymbol;
+ return 1;
+ }
+ else if ((uStrCaseCmp(str, "none") == 0)
+ || (uStrCaseCmp(str, "voidsymbol") == 0))
+ {
+ *sym_rtrn = XK_VoidSymbol;
+ return 1;
+ }
+ sym = XStringToKeysym(str);
+ if (sym != NoSymbol)
+ {
+ *sym_rtrn = sym;
+ return 1;
+ }
+ if (strlen(str) > 2 && str[0] == '0' && str[1] == 'x') {
+ sym = strtoul(str, &tmp, 16);
+ if (sym != ULONG_MAX && (!tmp || *tmp == '\0')) {
+ *sym_rtrn = sym;
+ return 1;
+ }
}
return 0;
}
IncludeStmt *
-IncludeCreate(char *str,unsigned merge)
-{
-IncludeStmt * incl,*first;
-char * file,*map,*stmt,*tmp, *extra_data;
-char nextop;
-Bool haveSelf;
-
- haveSelf= False;
- incl= first= NULL;
- file= map= NULL;
- tmp= str;
- stmt= uStringDup(str);
- while ((tmp)&&(*tmp)) {
- if (XkbParseIncludeMap(&tmp,&file,&map,&nextop,&extra_data)) {
- if ((file==NULL)&&(map==NULL)) {
- if (haveSelf)
- goto BAIL;
- haveSelf= True;
- }
- if (first==NULL)
- first= incl= uTypedAlloc(IncludeStmt);
- else {
- incl->next= uTypedAlloc(IncludeStmt);
- incl= incl->next;
- }
- if (incl) {
- incl->common.stmtType= StmtInclude;
- incl->common.next= NULL;
- incl->merge= merge;
- incl->stmt= NULL;
- incl->file= file;
- incl->map= map;
- incl->modifier= extra_data;
- incl->path= NULL;
- incl->next= NULL;
- }
- else {
- WSGO("Allocation failure in IncludeCreate\n");
- ACTION("Using only part of the include\n");
- break;
- }
- if (nextop=='|') merge= MergeAugment;
- else merge= MergeOverride;
- }
- else {
- goto BAIL;
- }
- }
- if (first) first->stmt= stmt;
- else if (stmt) uFree(stmt);
+IncludeCreate(char *str, unsigned merge)
+{
+ IncludeStmt *incl, *first;
+ char *file, *map, *stmt, *tmp, *extra_data;
+ char nextop;
+ Bool haveSelf;
+
+ haveSelf = False;
+ incl = first = NULL;
+ file = map = NULL;
+ tmp = str;
+ stmt = uStringDup(str);
+ while ((tmp) && (*tmp))
+ {
+ if (XkbParseIncludeMap(&tmp, &file, &map, &nextop, &extra_data))
+ {
+ if ((file == NULL) && (map == NULL))
+ {
+ if (haveSelf)
+ goto BAIL;
+ haveSelf = True;
+ }
+ if (first == NULL)
+ first = incl = uTypedAlloc(IncludeStmt);
+ else
+ {
+ incl->next = uTypedAlloc(IncludeStmt);
+ incl = incl->next;
+ }
+ if (incl)
+ {
+ incl->common.stmtType = StmtInclude;
+ incl->common.next = NULL;
+ incl->merge = merge;
+ incl->stmt = NULL;
+ incl->file = file;
+ incl->map = map;
+ incl->modifier = extra_data;
+ incl->path = NULL;
+ incl->next = NULL;
+ }
+ else
+ {
+ WSGO("Allocation failure in IncludeCreate\n");
+ ACTION("Using only part of the include\n");
+ break;
+ }
+ if (nextop == '|')
+ merge = MergeAugment;
+ else
+ merge = MergeOverride;
+ }
+ else
+ {
+ goto BAIL;
+ }
+ }
+ if (first)
+ first->stmt = stmt;
+ else if (stmt)
+ uFree(stmt);
return first;
-BAIL:
- ERROR1("Illegal include statement \"%s\"\n",stmt);
+ BAIL:
+ ERROR1("Illegal include statement \"%s\"\n", stmt);
ACTION("Ignored\n");
- while (first) {
- incl= first->next;
- if (first->file) uFree(first->file);
- if (first->map) uFree(first->map);
- if (first->modifier) uFree(first->modifier);
- if (first->path) uFree(first->path);
- first->file= first->map= first->path= NULL;
- uFree(first);
- first= incl;
+ while (first)
+ {
+ incl = first->next;
+ if (first->file)
+ uFree(first->file);
+ if (first->map)
+ uFree(first->map);
+ if (first->modifier)
+ uFree(first->modifier);
+ if (first->path)
+ uFree(first->path);
+ first->file = first->map = first->path = NULL;
+ uFree(first);
+ first = incl;
}
if (stmt)
- uFree(stmt);
+ uFree(stmt);
return NULL;
}
#ifdef DEBUG
void
-PrintStmtAddrs(ParseCommon *stmt)
+PrintStmtAddrs(ParseCommon * stmt)
{
- fprintf(stderr,"0x%x",stmt);
- if (stmt) {
- do {
- fprintf(stderr,"->0x%x",stmt->next);
- stmt= stmt->next;
- } while (stmt);
+ fprintf(stderr, "0x%x", stmt);
+ if (stmt)
+ {
+ do
+ {
+ fprintf(stderr, "->0x%x", stmt->next);
+ stmt = stmt->next;
+ }
+ while (stmt);
}
- fprintf(stderr,"\n");
+ fprintf(stderr, "\n");
}
#endif
static void
-CheckDefaultMap(XkbFile *maps)
-{
-XkbFile * dflt,*tmp;
-
- dflt= NULL;
- for (tmp=maps,dflt=NULL;tmp!=NULL;tmp=(XkbFile *)tmp->common.next) {
- if (tmp->flags&XkbLC_Default) {
- if (dflt==NULL)
- dflt= tmp;
- else {
- if (warningLevel>2) {
- WARN1("Multiple default components in %s\n",
- (scanFile?scanFile:"(unknown)"));
- ACTION2("Using %s, ignoring %s\n",
- (dflt->name?dflt->name:"(first)"),
- (tmp->name?tmp->name:"(subsequent)"));
- }
- tmp->flags&= (~XkbLC_Default);
- }
- }
+CheckDefaultMap(XkbFile * maps)
+{
+ XkbFile *dflt, *tmp;
+
+ dflt = NULL;
+ for (tmp = maps, dflt = NULL; tmp != NULL;
+ tmp = (XkbFile *) tmp->common.next)
+ {
+ if (tmp->flags & XkbLC_Default)
+ {
+ if (dflt == NULL)
+ dflt = tmp;
+ else
+ {
+ if (warningLevel > 2)
+ {
+ WARN1("Multiple default components in %s\n",
+ (scanFile ? scanFile : "(unknown)"));
+ ACTION2("Using %s, ignoring %s\n",
+ (dflt->name ? dflt->name : "(first)"),
+ (tmp->name ? tmp->name : "(subsequent)"));
+ }
+ tmp->flags &= (~XkbLC_Default);
+ }
+ }
}
return;
}
int
-XKBParseFile(FILE *file,XkbFile **pRtrn)
-{
- if (file) {
- yyin= file;
- rtrnValue= NULL;
- if (yyparse()==0) {
- *pRtrn= rtrnValue;
- CheckDefaultMap(rtrnValue);
- rtrnValue= NULL;
- return 1;
- }
- *pRtrn= NULL;
- return 0;
- }
- *pRtrn= NULL;
+XKBParseFile(FILE * file, XkbFile ** pRtrn)
+{
+ if (file)
+ {
+ yyin = file;
+ rtrnValue = NULL;
+ if (yyparse() == 0)
+ {
+ *pRtrn = rtrnValue;
+ CheckDefaultMap(rtrnValue);
+ rtrnValue = NULL;
+ return 1;
+ }
+ *pRtrn = NULL;
+ return 0;
+ }
+ *pRtrn = NULL;
return 1;
}
XkbFile *
-CreateXKBFile(int type,char *name,ParseCommon *defs,unsigned flags)
-{
-XkbFile * file;
-static int fileID;
-
- file= uTypedAlloc(XkbFile);
- if (file) {
- XkbEnsureSafeMapName(name);
- bzero(file,sizeof(XkbFile));
- file->type= type;
- file->topName= uStringDup(name);
- file->name= name;
- file->defs= defs;
- file->id= fileID++;
- file->compiled= False;
- file->flags= flags;
+CreateXKBFile(int type, char *name, ParseCommon * defs, unsigned flags)
+{
+ XkbFile *file;
+ static int fileID;
+
+ file = uTypedAlloc(XkbFile);
+ if (file)
+ {
+ XkbEnsureSafeMapName(name);
+ bzero(file, sizeof(XkbFile));
+ file->type = type;
+ file->topName = uStringDup(name);
+ file->name = name;
+ file->defs = defs;
+ file->id = fileID++;
+ file->compiled = False;
+ file->flags = flags;
}
return file;
}
-unsigned
-StmtSetMerge(ParseCommon *stmt,unsigned merge)
+unsigned
+StmtSetMerge(ParseCommon * stmt, unsigned merge)
{
- if ((merge==MergeAltForm) && (stmt->stmtType!=StmtKeycodeDef)) {
- yyerror("illegal use of 'alternate' merge mode");
- merge= MergeDefault;
+ if ((merge == MergeAltForm) && (stmt->stmtType != StmtKeycodeDef))
+ {
+ yyerror("illegal use of 'alternate' merge mode");
+ merge = MergeDefault;
}
return merge;
}
diff --git a/app/xkbcomp/parseutils.h b/app/xkbcomp/parseutils.h
index a431fac74..0d06ce92f 100644
--- a/app/xkbcomp/parseutils.h
+++ b/app/xkbcomp/parseutils.h
@@ -1,4 +1,3 @@
-/* $Xorg: parseutils.h,v 1.3 2000/08/17 19:54:33 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
#ifndef XKBPARSE_H
#define XKBPARSE_H 1
@@ -35,11 +33,11 @@
#include "xkbcomp.h"
-extern char *scanStr;
-extern int scanInt;
-extern int lineNum;
+extern char scanBuf[1024];
+extern int scanInt;
+extern int lineNum;
-extern XkbFile *rtrnValue;
+extern XkbFile *rtrnValue;
#ifdef DEBUG
#define d(str) fprintf(stderr,"%s\n",str);
@@ -52,196 +50,158 @@ extern XkbFile *rtrnValue;
#endif
-extern ParseCommon *AppendStmt(
- ParseCommon * /* to */,
- ParseCommon * /* append */
-);
-
-extern ExprDef *ExprCreate(
- unsigned /* op */,
- unsigned /* type */
-);
-
-extern ExprDef *ExprCreateUnary(
- unsigned /* op */,
- unsigned /* type */,
- ExprDef * /* child */
-);
-
-extern ExprDef *ExprCreateBinary(
- unsigned /* op */,
- ExprDef * /* left */,
- ExprDef * /* right */
-);
-
-extern KeycodeDef *KeycodeCreate(
- char * /* name */,
- ExprDef * /* value */
-);
-
-extern KeyAliasDef *KeyAliasCreate(
- char * /* alias */,
- char * /* real */
-);
-
-extern VModDef *VModCreate(
- Atom /* name */,
- ExprDef * /* value */
-);
-
-extern VarDef *VarCreate(
- ExprDef * /* name */,
- ExprDef * /* value */
-);
-
-extern VarDef *BoolVarCreate(
- Atom /* nameToken */,
- unsigned /* set */
-);
-
-extern InterpDef *InterpCreate(
- KeySym /* sym */,
- ExprDef * /* match */
-);
-
-extern KeyTypeDef *KeyTypeCreate(
- Atom /* name */,
- VarDef * /* body */
-);
-
-extern SymbolsDef *SymbolsCreate(
- char * /* keyName */,
- ExprDef * /* symbols */
-);
-
-extern GroupCompatDef *GroupCompatCreate(
- int /* group */,
- ExprDef * /* def */
-);
-
-extern ModMapDef *ModMapCreate(
- Atom /* modifier */,
- ExprDef * /* keys */
-);
-
-extern IndicatorMapDef *IndicatorMapCreate(
- Atom /* name */,
- VarDef * /* body */
-);
-
-extern IndicatorNameDef *IndicatorNameCreate(
- int /* ndx */,
- ExprDef * /* name */,
- Bool /* virtual */
-);
-
-extern ExprDef *ActionCreate(
- Atom /* name */,
- ExprDef * /* args */
-);
-
-extern ExprDef *CreateKeysymList(
- KeySym /* sym */
-);
-
-extern ShapeDef *ShapeDeclCreate(
- Atom /* name */,
- OutlineDef * /* outlines */
-);
-
-extern OutlineDef *OutlineCreate(
- Atom /* field */,
- ExprDef * /* points */
-);
-
-extern KeyDef *KeyDeclCreate(
- char * /* name */,
- ExprDef * /* expr */
-);
-
-extern KeyDef *KeyDeclMerge(
- KeyDef * /* into */,
- KeyDef * /* from */
-);
-
-extern RowDef *RowDeclCreate(
- KeyDef * /* keys */
-);
-
-extern SectionDef *SectionDeclCreate(
- Atom /* name */,
- RowDef * /* rows */
-);
-
-extern OverlayKeyDef *OverlayKeyCreate(
- char * /* under */,
- char * /* over */
-);
-
-extern OverlayDef *OverlayDeclCreate(
- Atom /* name */,
- OverlayKeyDef * /* rows */
-);
-
-extern DoodadDef *DoodadCreate(
- unsigned /* type */,
- Atom /* name */,
- VarDef * /* body */
-);
-
-extern ExprDef *AppendKeysymList(
- ExprDef * /* list */,
- KeySym /* sym */
-);
-
-extern int LookupKeysym(
- char * /* str */,
- KeySym * /* sym_rtrn */
-);
-
-extern IncludeStmt *IncludeCreate(
- char * /* str */,
- unsigned /* merge */
-);
-
-extern unsigned StmtSetMerge(
- ParseCommon * /* stmt */,
- unsigned /* merge */
-);
+extern ParseCommon *AppendStmt(ParseCommon * /* to */ ,
+ ParseCommon * /* append */
+ );
+
+extern ExprDef *ExprCreate(unsigned /* op */ ,
+ unsigned /* type */
+ );
+
+extern ExprDef *ExprCreateUnary(unsigned /* op */ ,
+ unsigned /* type */ ,
+ ExprDef * /* child */
+ );
+
+extern ExprDef *ExprCreateBinary(unsigned /* op */ ,
+ ExprDef * /* left */ ,
+ ExprDef * /* right */
+ );
+
+extern KeycodeDef *KeycodeCreate(char * /* name */ ,
+ ExprDef * /* value */
+ );
+
+extern KeyAliasDef *KeyAliasCreate(char * /* alias */ ,
+ char * /* real */
+ );
+
+extern VModDef *VModCreate(Atom /* name */ ,
+ ExprDef * /* value */
+ );
+
+extern VarDef *VarCreate(ExprDef * /* name */ ,
+ ExprDef * /* value */
+ );
+
+extern VarDef *BoolVarCreate(Atom /* nameToken */ ,
+ unsigned /* set */
+ );
+
+extern InterpDef *InterpCreate(KeySym /* sym */ ,
+ ExprDef * /* match */
+ );
+
+extern KeyTypeDef *KeyTypeCreate(Atom /* name */ ,
+ VarDef * /* body */
+ );
+
+extern SymbolsDef *SymbolsCreate(char * /* keyName */ ,
+ ExprDef * /* symbols */
+ );
+
+extern GroupCompatDef *GroupCompatCreate(int /* group */ ,
+ ExprDef * /* def */
+ );
+
+extern ModMapDef *ModMapCreate(Atom /* modifier */ ,
+ ExprDef * /* keys */
+ );
+
+extern IndicatorMapDef *IndicatorMapCreate(Atom /* name */ ,
+ VarDef * /* body */
+ );
+
+extern IndicatorNameDef *IndicatorNameCreate(int /* ndx */ ,
+ ExprDef * /* name */ ,
+ Bool /* virtual */
+ );
+
+extern ExprDef *ActionCreate(Atom /* name */ ,
+ ExprDef * /* args */
+ );
+
+extern ExprDef *CreateKeysymList(char * /* sym */
+ );
+
+extern ShapeDef *ShapeDeclCreate(Atom /* name */ ,
+ OutlineDef * /* outlines */
+ );
+
+extern OutlineDef *OutlineCreate(Atom /* field */ ,
+ ExprDef * /* points */
+ );
+
+extern KeyDef *KeyDeclCreate(char * /* name */ ,
+ ExprDef * /* expr */
+ );
+
+extern KeyDef *KeyDeclMerge(KeyDef * /* into */ ,
+ KeyDef * /* from */
+ );
+
+extern RowDef *RowDeclCreate(KeyDef * /* keys */
+ );
+
+extern SectionDef *SectionDeclCreate(Atom /* name */ ,
+ RowDef * /* rows */
+ );
+
+extern OverlayKeyDef *OverlayKeyCreate(char * /* under */ ,
+ char * /* over */
+ );
+
+extern OverlayDef *OverlayDeclCreate(Atom /* name */ ,
+ OverlayKeyDef * /* rows */
+ );
+
+extern DoodadDef *DoodadCreate(unsigned /* type */ ,
+ Atom /* name */ ,
+ VarDef * /* body */
+ );
+
+extern ExprDef *AppendKeysymList(ExprDef * /* list */ ,
+ char * /* sym */
+ );
+
+extern int LookupKeysym(char * /* str */ ,
+ KeySym * /* sym_rtrn */
+ );
+
+extern IncludeStmt *IncludeCreate(char * /* str */ ,
+ unsigned /* merge */
+ );
+
+extern unsigned StmtSetMerge(ParseCommon * /* stmt */ ,
+ unsigned /* merge */
+ );
#ifdef DEBUG
-extern void PrintStmtAddrs(
- ParseCommon * /* stmt */
-);
+extern void PrintStmtAddrs(ParseCommon * /* stmt */
+ );
#endif
-extern int XKBParseFile(
- FILE * /* file */,
- XkbFile ** /* pRtrn */
-);
+extern int XKBParseFile(FILE * /* file */ ,
+ XkbFile ** /* pRtrn */
+ );
-extern XkbFile *CreateXKBFile(
- int /* type */,
- char * /* name */,
- ParseCommon * /* defs */,
- unsigned /* flags */
-);
+extern XkbFile *CreateXKBFile(int /* type */ ,
+ char * /* name */ ,
+ ParseCommon * /* defs */ ,
+ unsigned /* flags */
+ );
-extern void yyerror(
- const char * /* s */
-);
+extern void yyerror(const char * /* s */
+ );
-extern int yywrap(
- void
-);
+extern int yywrap(void);
extern int yylex(void);
extern int yyparse(void);
-extern int setScanState(
- char * /* file */,
- int /* line */
-);
+extern int setScanState(char * /* file */ ,
+ int /* line */
+ );
extern FILE *yyin;
diff --git a/app/xkbcomp/symbols.c b/app/xkbcomp/symbols.c
index ffc26b2fd..cac69e3d9 100644
--- a/app/xkbcomp/symbols.c
+++ b/app/xkbcomp/symbols.c
@@ -1,4 +1,3 @@
-/* $Xorg: symbols.c,v 1.3 2000/08/17 19:54:33 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,11 +23,11 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/symbols.c,v 3.15 2003/04/19 12:25:31 pascal Exp $ */
#include "xkbcomp.h"
#include "tokens.h"
#include "expr.h"
+#include "parseutils.h"
#include <X11/keysym.h>
#include <X11/Xutil.h>
@@ -41,9 +40,9 @@
#include "misc.h"
#include "alias.h"
-extern Atom tok_ONE_LEVEL;
-extern Atom tok_TWO_LEVEL;
-extern Atom tok_KEYPAD;
+extern Atom tok_ONE_LEVEL;
+extern Atom tok_TWO_LEVEL;
+extern Atom tok_KEYPAD;
/***====================================================================***/
@@ -60,688 +59,817 @@ extern Atom tok_KEYPAD;
#define _Key_GroupInfo (1<<6)
#define _Key_VModMap (1<<7)
-typedef struct _KeyInfo {
- CommonInfo defs;
- unsigned long name;
- unsigned char groupInfo;
- unsigned char typesDefined;
- unsigned char symsDefined;
- unsigned char actsDefined;
- short numLevels[XkbNumKbdGroups];
- KeySym * syms[XkbNumKbdGroups];
- XkbAction * acts[XkbNumKbdGroups];
- Atom types[XkbNumKbdGroups];
- unsigned repeat;
- XkbBehavior behavior;
- unsigned short vmodmap;
- unsigned long nameForOverlayKey;
- unsigned long allowNone;
- Atom dfltType;
+typedef struct _KeyInfo
+{
+ CommonInfo defs;
+ unsigned long name; /* the 4 chars of the key name, as long */
+ unsigned char groupInfo;
+ unsigned char typesDefined;
+ unsigned char symsDefined;
+ unsigned char actsDefined;
+ short numLevels[XkbNumKbdGroups];
+ KeySym *syms[XkbNumKbdGroups];
+ XkbAction *acts[XkbNumKbdGroups];
+ Atom types[XkbNumKbdGroups];
+ unsigned repeat;
+ XkbBehavior behavior;
+ unsigned short vmodmap;
+ unsigned long nameForOverlayKey;
+ unsigned long allowNone;
+ Atom dfltType;
} KeyInfo;
+/**
+ * Init the given key info to sane values.
+ */
static void
-InitKeyInfo(KeyInfo *info)
+InitKeyInfo(KeyInfo * info)
{
-register int i;
-static char dflt[4]= "*";
-
- info->defs.defined= 0;
- info->defs.fileID= 0;
- info->defs.merge= MergeOverride;
- info->defs.next= NULL;
- info->name= KeyNameToLong(dflt);
- info->groupInfo= 0;
- info->typesDefined= info->symsDefined= info->actsDefined= 0;
- for (i=0;i<XkbNumKbdGroups;i++) {
- info->numLevels[i]= 0;
- info->types[i]= None;
- info->syms[i]= NULL;
- info->acts[i]= NULL;
- }
- info->dfltType= None;
- info->behavior.type= XkbKB_Default;
- info->behavior.data= 0;
- info->vmodmap= 0;
- info->nameForOverlayKey= 0;
- info->repeat= RepeatUndefined;
- info->allowNone= 0;
+ register int i;
+ static char dflt[4] = "*";
+
+ info->defs.defined = 0;
+ info->defs.fileID = 0;
+ info->defs.merge = MergeOverride;
+ info->defs.next = NULL;
+ info->name = KeyNameToLong(dflt);
+ info->groupInfo = 0;
+ info->typesDefined = info->symsDefined = info->actsDefined = 0;
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ info->numLevels[i] = 0;
+ info->types[i] = None;
+ info->syms[i] = NULL;
+ info->acts[i] = NULL;
+ }
+ info->dfltType = None;
+ info->behavior.type = XkbKB_Default;
+ info->behavior.data = 0;
+ info->vmodmap = 0;
+ info->nameForOverlayKey = 0;
+ info->repeat = RepeatUndefined;
+ info->allowNone = 0;
return;
}
+/**
+ * Free memory associated with this key info and reset to sane values.
+ */
static void
-FreeKeyInfo(KeyInfo *info)
+FreeKeyInfo(KeyInfo * info)
{
-register int i;
-
- info->defs.defined= 0;
- info->defs.fileID= 0;
- info->defs.merge= MergeOverride;
- info->defs.next= NULL;
- info->groupInfo= 0;
- info->typesDefined= info->symsDefined= info->actsDefined= 0;
- for (i=0;i<XkbNumKbdGroups;i++) {
- info->numLevels[i]= 0;
- info->types[i]= None;
- if (info->syms[i]!=NULL)
- uFree(info->syms[i]);
- info->syms[i]= NULL;
- if (info->acts[i]!=NULL)
- uFree(info->acts[i]);
- info->acts[i]= NULL;
- }
- info->dfltType= None;
- info->behavior.type= XkbKB_Default;
- info->behavior.data= 0;
- info->vmodmap= 0;
- info->nameForOverlayKey= 0;
- info->repeat= RepeatUndefined;
+ register int i;
+
+ info->defs.defined = 0;
+ info->defs.fileID = 0;
+ info->defs.merge = MergeOverride;
+ info->defs.next = NULL;
+ info->groupInfo = 0;
+ info->typesDefined = info->symsDefined = info->actsDefined = 0;
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ info->numLevels[i] = 0;
+ info->types[i] = None;
+ if (info->syms[i] != NULL)
+ uFree(info->syms[i]);
+ info->syms[i] = NULL;
+ if (info->acts[i] != NULL)
+ uFree(info->acts[i]);
+ info->acts[i] = NULL;
+ }
+ info->dfltType = None;
+ info->behavior.type = XkbKB_Default;
+ info->behavior.data = 0;
+ info->vmodmap = 0;
+ info->nameForOverlayKey = 0;
+ info->repeat = RepeatUndefined;
+ info->allowNone = 0;
return;
}
+/**
+ * Copy old into new, optionally reset old to 0.
+ * If old is reset, new simply re-uses old's memory. Otherwise, the memory is
+ * newly allocated and new points to the new memory areas.
+ */
static Bool
-CopyKeyInfo(KeyInfo *old,KeyInfo *new,Bool clearOld)
+CopyKeyInfo(KeyInfo * old, KeyInfo * new, Bool clearOld)
{
-register int i;
-
- *new= *old;
- new->defs.next= NULL;
- if (clearOld) {
- for (i=0;i<XkbNumKbdGroups;i++) {
- old->numLevels[i]= 0;
- old->syms[i]= NULL;
- old->acts[i]= NULL;
- }
- }
- else {
- int width;
- for (i=0;i<XkbNumKbdGroups;i++) {
- width= new->numLevels[i];
- if (old->syms[i]!=NULL) {
- new->syms[i]= uTypedCalloc(width,KeySym);
- if (!new->syms[i]) {
- new->syms[i]= NULL;
- new->numLevels[i]= 0;
- return False;
- }
- memcpy((char *)new->syms[i],(char *)old->syms[i],
- width*sizeof(KeySym));
- }
- if (old->acts[i]!=NULL) {
- new->acts[i]= uTypedCalloc(width,XkbAction);
- if (!new->acts[i]) {
- new->acts[i]= NULL;
- return False;
- }
- memcpy((char *)new->acts[i],(char *)old->acts[i],
- width*sizeof(XkbAction));
- }
- }
+ register int i;
+
+ *new = *old;
+ new->defs.next = NULL;
+ if (clearOld)
+ {
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ old->numLevels[i] = 0;
+ old->syms[i] = NULL;
+ old->acts[i] = NULL;
+ }
+ }
+ else
+ {
+ int width;
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ width = new->numLevels[i];
+ if (old->syms[i] != NULL)
+ {
+ new->syms[i] = uTypedCalloc(width, KeySym);
+ if (!new->syms[i])
+ {
+ new->syms[i] = NULL;
+ new->numLevels[i] = 0;
+ return False;
+ }
+ memcpy((char *) new->syms[i], (char *) old->syms[i],
+ width * sizeof(KeySym));
+ }
+ if (old->acts[i] != NULL)
+ {
+ new->acts[i] = uTypedCalloc(width, XkbAction);
+ if (!new->acts[i])
+ {
+ new->acts[i] = NULL;
+ return False;
+ }
+ memcpy((char *) new->acts[i], (char *) old->acts[i],
+ width * sizeof(XkbAction));
+ }
+ }
}
return True;
}
/***====================================================================***/
-typedef struct _ModMapEntry {
- CommonInfo defs;
- Bool haveSymbol;
- int modifier;
- union {
- unsigned long keyName;
- KeySym keySym;
+typedef struct _ModMapEntry
+{
+ CommonInfo defs;
+ Bool haveSymbol;
+ int modifier;
+ union
+ {
+ unsigned long keyName;
+ KeySym keySym;
} u;
} ModMapEntry;
#define SYMBOLS_INIT_SIZE 110
#define SYMBOLS_CHUNK 20
-typedef struct _SymbolsInfo {
- char * name;
- int errorCount;
- unsigned fileID;
- unsigned merge;
- unsigned explicit_group;
- unsigned groupInfo;
- unsigned szKeys;
- unsigned nKeys;
- KeyInfo * keys;
- KeyInfo dflt;
- VModInfo vmods;
- ActionInfo * action;
- Atom groupNames[XkbNumKbdGroups];
-
- ModMapEntry * modMap;
- AliasInfo * aliases;
+typedef struct _SymbolsInfo
+{
+ char *name; /* e.g. pc+us+inet(evdev) */
+ int errorCount;
+ unsigned fileID;
+ unsigned merge;
+ unsigned explicit_group;
+ unsigned groupInfo;
+ unsigned szKeys;
+ unsigned nKeys;
+ KeyInfo *keys;
+ KeyInfo dflt;
+ VModInfo vmods;
+ ActionInfo *action;
+ Atom groupNames[XkbNumKbdGroups];
+
+ ModMapEntry *modMap;
+ AliasInfo *aliases;
} SymbolsInfo;
static void
-InitSymbolsInfo(SymbolsInfo *info,XkbDescPtr xkb)
+InitSymbolsInfo(SymbolsInfo * info, XkbDescPtr xkb)
{
-register int i;
-
- tok_ONE_LEVEL= XkbInternAtom(NULL,"ONE_LEVEL",False);
- tok_TWO_LEVEL= XkbInternAtom(NULL,"TWO_LEVEL",False);
- tok_KEYPAD= XkbInternAtom(NULL,"KEYPAD",False);
- info->name= NULL;
- info->explicit_group= 0;
- info->errorCount= 0;
- info->fileID= 0;
- info->merge= MergeOverride;
- info->groupInfo= 0;
- info->szKeys= SYMBOLS_INIT_SIZE;
- info->nKeys= 0;
- info->keys= uTypedCalloc(SYMBOLS_INIT_SIZE,KeyInfo);
- info->modMap= NULL;
- for (i=0;i<XkbNumKbdGroups;i++)
- info->groupNames[i]= None;
+ register int i;
+
+ tok_ONE_LEVEL = XkbInternAtom(NULL, "ONE_LEVEL", False);
+ tok_TWO_LEVEL = XkbInternAtom(NULL, "TWO_LEVEL", False);
+ tok_KEYPAD = XkbInternAtom(NULL, "KEYPAD", False);
+ info->name = NULL;
+ info->explicit_group = 0;
+ info->errorCount = 0;
+ info->fileID = 0;
+ info->merge = MergeOverride;
+ info->groupInfo = 0;
+ info->szKeys = SYMBOLS_INIT_SIZE;
+ info->nKeys = 0;
+ info->keys = uTypedCalloc(SYMBOLS_INIT_SIZE, KeyInfo);
+ info->modMap = NULL;
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ info->groupNames[i] = None;
InitKeyInfo(&info->dflt);
- InitVModInfo(&info->vmods,xkb);
- info->action= NULL;
- info->aliases= NULL;
+ InitVModInfo(&info->vmods, xkb);
+ info->action = NULL;
+ info->aliases = NULL;
return;
}
static void
-FreeSymbolsInfo(SymbolsInfo *info)
+FreeSymbolsInfo(SymbolsInfo * info)
{
-register int i;
+ register int i;
if (info->name)
- uFree(info->name);
- info->name= NULL;
- if (info->keys) {
- for (i=0;i<info->nKeys;i++) {
- FreeKeyInfo(&info->keys[i]);
- }
- uFree(info->keys);
- info->keys= NULL;
- }
- if (info->modMap) {
- ClearCommonInfo(&info->modMap->defs);
- info->modMap= NULL;
- }
- if (info->aliases) {
- ClearAliases(&info->aliases);
- info->aliases= NULL;
- }
- bzero((char *)info,sizeof(SymbolsInfo));
+ uFree(info->name);
+ info->name = NULL;
+ if (info->keys)
+ {
+ for (i = 0; i < info->nKeys; i++)
+ {
+ FreeKeyInfo(&info->keys[i]);
+ }
+ uFree(info->keys);
+ info->keys = NULL;
+ }
+ if (info->modMap)
+ {
+ ClearCommonInfo(&info->modMap->defs);
+ info->modMap = NULL;
+ }
+ if (info->aliases)
+ {
+ ClearAliases(&info->aliases);
+ info->aliases = NULL;
+ }
+ bzero((char *) info, sizeof(SymbolsInfo));
return;
}
static Bool
-ResizeKeyGroup( KeyInfo * key,
- unsigned group,
- unsigned atLeastSize,
- Bool forceActions)
+ResizeKeyGroup(KeyInfo * key,
+ unsigned group, unsigned atLeastSize, Bool forceActions)
{
-Bool tooSmall;
-unsigned newWidth;
-
- tooSmall= (key->numLevels[group]<atLeastSize);
- if (tooSmall) newWidth= atLeastSize;
- else newWidth= key->numLevels[group];
-
- if ((key->syms[group]==NULL)||tooSmall) {
- key->syms[group]= uTypedRecalloc(key->syms[group],
- key->numLevels[group],newWidth,
- KeySym);
- if (!key->syms[group])
- return False;
- }
- if (((forceActions)&&(tooSmall||(key->acts[group]==NULL)))||
- (tooSmall&&(key->acts[group]!=NULL))) {
- key->acts[group]= uTypedRecalloc(key->acts[group],
- key->numLevels[group],newWidth,
- XkbAction);
- if (!key->acts[group])
- return False;
- }
- key->numLevels[group]= newWidth;
+ Bool tooSmall;
+ unsigned newWidth;
+
+ tooSmall = (key->numLevels[group] < atLeastSize);
+ if (tooSmall)
+ newWidth = atLeastSize;
+ else
+ newWidth = key->numLevels[group];
+
+ if ((key->syms[group] == NULL) || tooSmall)
+ {
+ key->syms[group] = uTypedRecalloc(key->syms[group],
+ key->numLevels[group], newWidth,
+ KeySym);
+ if (!key->syms[group])
+ return False;
+ }
+ if (((forceActions) && (tooSmall || (key->acts[group] == NULL))) ||
+ (tooSmall && (key->acts[group] != NULL)))
+ {
+ key->acts[group] = uTypedRecalloc(key->acts[group],
+ key->numLevels[group], newWidth,
+ XkbAction);
+ if (!key->acts[group])
+ return False;
+ }
+ key->numLevels[group] = newWidth;
return True;
}
static Bool
-MergeKeyGroups( SymbolsInfo * info,
- KeyInfo * into,
- KeyInfo * from,
- unsigned group)
+MergeKeyGroups(SymbolsInfo * info,
+ KeyInfo * into, KeyInfo * from, unsigned group)
{
-KeySym * resultSyms;
-XkbAction * resultActs;
-int resultWidth;
-register int i;
-Bool report,clobber;
-
- clobber= (from->defs.merge!=MergeAugment);
- report= (warningLevel>9)||
- ((into->defs.fileID==from->defs.fileID)&&(warningLevel>0));
- if (into->numLevels[group]>=from->numLevels[group]) {
- resultSyms= into->syms[group];
- resultActs= into->acts[group];
- resultWidth= into->numLevels[group];
- }
- else {
- resultSyms= from->syms[group];
- resultActs= from->acts[group];
- resultWidth= from->numLevels[group];
- }
- if (resultSyms==NULL) {
- resultSyms= uTypedCalloc(resultWidth,KeySym);
- if (!resultSyms) {
- WSGO("Could not allocate symbols for group merge\n");
- ACTION2("Group %d of key %s not merged\n",group,
- longText(into->name,XkbMessage));
- return False;
- }
- }
- if ((resultActs==NULL)&&(into->acts[group]||from->acts[group])) {
- resultActs= uTypedCalloc(resultWidth,XkbAction);
- if (!resultActs) {
- WSGO("Could not allocate actions for group merge\n");
- ACTION2("Group %d of key %s not merged\n",group,
- longText(into->name,XkbMessage));
- return False;
- }
- }
- for (i=0;i<resultWidth;i++) {
- KeySym fromSym,toSym;
- if (from->syms[group] && (i<from->numLevels[group]))
- fromSym= from->syms[group][i];
- else fromSym= NoSymbol;
- if (into->syms[group] && (i<into->numLevels[group]))
- toSym= into->syms[group][i];
- else toSym= NoSymbol;
- if ((fromSym==NoSymbol)||(fromSym==toSym))
- resultSyms[i]= toSym;
- else if (toSym==NoSymbol)
- resultSyms[i]= fromSym;
- else {
- KeySym use,ignore;
- if (clobber) { use= fromSym; ignore= toSym; }
- else { use= toSym; ignore= fromSym; }
- if (report) {
- WARN3("Multiple symbols for level %d/group %d on key %s\n",
- i+1,group+1,longText(into->name,XkbMessage));
- ACTION2("Using %s, ignoring %s\n",XkbKeysymText(use,XkbMessage),
- XkbKeysymText(ignore,XkbMessage));
- }
- resultSyms[i]= use;
- }
- if (resultActs!=NULL) {
- XkbAction *fromAct,*toAct;
- fromAct= (from->acts[group]?&from->acts[group][i]:NULL);
- toAct= (into->acts[group]?&into->acts[group][i]:NULL);
- if (((fromAct==NULL)||(fromAct->type==XkbSA_NoAction))&&
- (toAct!=NULL)) {
- resultActs[i]= *toAct;
- }
- else if (((toAct==NULL)||(toAct->type==XkbSA_NoAction))&&
- (fromAct!=NULL)) {
- resultActs[i]= *fromAct;
- }
- else {
- XkbAction *use,*ignore;
- if (clobber) { use= fromAct; ignore= toAct; }
- else { use= toAct; ignore= fromAct; }
- if (report) {
- WARN3("Multiple actions for level %d/group %d on key %s\n",
- i+1,group+1,longText(into->name,XkbMessage));
- ACTION2("Using %s, ignoring %s\n",
- XkbActionTypeText(use->type,XkbMessage),
- XkbActionTypeText(ignore->type,XkbMessage));
- }
- resultActs[i]= *use;
- }
- }
- }
- if ((into->syms[group]!=NULL)&&(resultSyms!=into->syms[group]))
- uFree(into->syms[group]);
- if ((from->syms[group]!=NULL)&&(resultSyms!=from->syms[group]))
- uFree(from->syms[group]);
- if ((into->acts[group]!=NULL)&&(resultActs!=into->acts[group]))
- uFree(into->acts[group]);
- if ((from->acts[group]!=NULL)&&(resultActs!=from->acts[group]))
- uFree(from->acts[group]);
- into->numLevels[group]= resultWidth;
- into->syms[group]= resultSyms;
- from->syms[group]= NULL;
- into->acts[group]= resultActs;
- from->acts[group]= NULL;
- into->symsDefined|= (1<<group);
- from->symsDefined&= ~(1<<group);
- into->actsDefined|= (1<<group);
- from->actsDefined&= ~(1<<group);
+ KeySym *resultSyms;
+ XkbAction *resultActs;
+ int resultWidth;
+ register int i;
+ Bool report, clobber;
+
+ clobber = (from->defs.merge != MergeAugment);
+ report = (warningLevel > 9) ||
+ ((into->defs.fileID == from->defs.fileID) && (warningLevel > 0));
+ if (into->numLevels[group] >= from->numLevels[group])
+ {
+ resultSyms = into->syms[group];
+ resultActs = into->acts[group];
+ resultWidth = into->numLevels[group];
+ }
+ else
+ {
+ resultSyms = from->syms[group];
+ resultActs = from->acts[group];
+ resultWidth = from->numLevels[group];
+ }
+ if (resultSyms == NULL)
+ {
+ resultSyms = uTypedCalloc(resultWidth, KeySym);
+ if (!resultSyms)
+ {
+ WSGO("Could not allocate symbols for group merge\n");
+ ACTION2("Group %d of key %s not merged\n", group,
+ longText(into->name, XkbMessage));
+ return False;
+ }
+ }
+ if ((resultActs == NULL) && (into->acts[group] || from->acts[group]))
+ {
+ resultActs = uTypedCalloc(resultWidth, XkbAction);
+ if (!resultActs)
+ {
+ WSGO("Could not allocate actions for group merge\n");
+ ACTION2("Group %d of key %s not merged\n", group,
+ longText(into->name, XkbMessage));
+ return False;
+ }
+ }
+ for (i = 0; i < resultWidth; i++)
+ {
+ KeySym fromSym, toSym;
+ if (from->syms[group] && (i < from->numLevels[group]))
+ fromSym = from->syms[group][i];
+ else
+ fromSym = NoSymbol;
+ if (into->syms[group] && (i < into->numLevels[group]))
+ toSym = into->syms[group][i];
+ else
+ toSym = NoSymbol;
+ if ((fromSym == NoSymbol) || (fromSym == toSym))
+ resultSyms[i] = toSym;
+ else if (toSym == NoSymbol)
+ resultSyms[i] = fromSym;
+ else
+ {
+ KeySym use, ignore;
+ if (clobber)
+ {
+ use = fromSym;
+ ignore = toSym;
+ }
+ else
+ {
+ use = toSym;
+ ignore = fromSym;
+ }
+ if (report)
+ {
+ WARN3
+ ("Multiple symbols for level %d/group %d on key %s\n",
+ i + 1, group + 1, longText(into->name, XkbMessage));
+ ACTION2("Using %s, ignoring %s\n",
+ XkbKeysymText(use, XkbMessage),
+ XkbKeysymText(ignore, XkbMessage));
+ }
+ resultSyms[i] = use;
+ }
+ if (resultActs != NULL)
+ {
+ XkbAction *fromAct, *toAct;
+ fromAct = (from->acts[group] ? &from->acts[group][i] : NULL);
+ toAct = (into->acts[group] ? &into->acts[group][i] : NULL);
+ if (((fromAct == NULL) || (fromAct->type == XkbSA_NoAction))
+ && (toAct != NULL))
+ {
+ resultActs[i] = *toAct;
+ }
+ else if (((toAct == NULL) || (toAct->type == XkbSA_NoAction))
+ && (fromAct != NULL))
+ {
+ resultActs[i] = *fromAct;
+ }
+ else
+ {
+ XkbAction *use, *ignore;
+ if (clobber)
+ {
+ use = fromAct;
+ ignore = toAct;
+ }
+ else
+ {
+ use = toAct;
+ ignore = fromAct;
+ }
+ if (report)
+ {
+ WARN3
+ ("Multiple actions for level %d/group %d on key %s\n",
+ i + 1, group + 1, longText(into->name, XkbMessage));
+ ACTION2("Using %s, ignoring %s\n",
+ XkbActionTypeText(use->type, XkbMessage),
+ XkbActionTypeText(ignore->type, XkbMessage));
+ }
+ resultActs[i] = *use;
+ }
+ }
+ }
+ if ((into->syms[group] != NULL) && (resultSyms != into->syms[group]))
+ uFree(into->syms[group]);
+ if ((from->syms[group] != NULL) && (resultSyms != from->syms[group]))
+ uFree(from->syms[group]);
+ if ((into->acts[group] != NULL) && (resultActs != into->acts[group]))
+ uFree(into->acts[group]);
+ if ((from->acts[group] != NULL) && (resultActs != from->acts[group]))
+ uFree(from->acts[group]);
+ into->numLevels[group] = resultWidth;
+ into->syms[group] = resultSyms;
+ from->syms[group] = NULL;
+ into->acts[group] = resultActs;
+ from->acts[group] = NULL;
+ into->symsDefined |= (1 << group);
+ from->symsDefined &= ~(1 << group);
+ into->actsDefined |= (1 << group);
+ from->actsDefined &= ~(1 << group);
return True;
}
static Bool
-MergeKeys(SymbolsInfo *info,KeyInfo *into,KeyInfo *from)
+MergeKeys(SymbolsInfo * info, KeyInfo * into, KeyInfo * from)
{
-register int i;
-unsigned collide= 0;
-Bool report;
-
- if (from->defs.merge==MergeReplace) {
- for (i=0;i<XkbNumKbdGroups;i++) {
- if (into->numLevels[i]!=0) {
- if (into->syms[i])
- uFree(into->syms[i]);
- if (into->acts[i])
- uFree(into->acts[i]);
- }
- }
- *into= *from;
- bzero(from,sizeof(KeyInfo));
- return True;
- }
- report= ((warningLevel>9)||
- ((into->defs.fileID==from->defs.fileID)&&(warningLevel>0)));
- for (i=0;i<XkbNumKbdGroups;i++) {
- if (from->numLevels[i]>0) {
- if (into->numLevels[i]==0) {
- into->numLevels[i]= from->numLevels[i];
- into->syms[i]= from->syms[i];
- into->acts[i]= from->acts[i];
- into->symsDefined|= (1<<i);
- from->syms[i]= NULL;
- from->acts[i]= NULL;
- from->numLevels[i]= 0;
- from->symsDefined&= ~(1<<i);
- if (into->syms[i]) into->defs.defined|= _Key_Syms;
- if (into->acts[i]) into->defs.defined|= _Key_Acts;
- }
- else {
- if (report) {
- if (into->syms[i]) collide|= _Key_Syms;
- if (into->acts[i]) collide|= _Key_Acts;
- }
- MergeKeyGroups(info,into,from,(unsigned)i);
- }
- }
- if (from->types[i]!=None) {
- if ((into->types[i]!=None)&&(report)&&
- (into->types[i]!=from->types[i])) {
- Atom use,ignore;
- collide|= _Key_Types;
- if (from->defs.merge!=MergeAugment) {
- use= from->types[i];
- ignore= into->types[i];
- }
- else {
- use= into->types[i];
- ignore= from->types[i];
- }
- WARN2("Multiple definitions for group %d type of key %s\n",
- i,longText(into->name,XkbMessage));
- ACTION2("Using %s, ignoring %s\n",
- XkbAtomText(NULL,use,XkbMessage),
- XkbAtomText(NULL,ignore,XkbMessage));
- }
- if ((from->defs.merge!=MergeAugment)||(into->types[i]==None)) {
- into->types[i]= from->types[i];
- }
- }
- }
- if (UseNewField(_Key_Behavior,&into->defs,&from->defs,&collide)) {
- into->behavior= from->behavior;
- into->nameForOverlayKey= from->nameForOverlayKey;
- into->defs.defined|= _Key_Behavior;
- }
- if (UseNewField(_Key_VModMap,&into->defs,&from->defs,&collide)) {
- into->vmodmap= from->vmodmap;
- into->defs.defined|= _Key_VModMap;
- }
- if (UseNewField(_Key_Repeat,&into->defs,&from->defs,&collide)) {
- into->repeat= from->repeat;
- into->defs.defined|= _Key_Repeat;
- }
- if (UseNewField(_Key_Type_Dflt,&into->defs,&from->defs,&collide)) {
- into->dfltType= from->dfltType;
- into->defs.defined|= _Key_Type_Dflt;
- }
- if (UseNewField(_Key_GroupInfo,&into->defs,&from->defs,&collide)) {
- into->groupInfo= from->groupInfo;
- into->defs.defined|= _Key_GroupInfo;
- }
- if ( collide ) {
- WARN1("Symbol map for key %s redefined\n",
- longText(into->name,XkbMessage));
- ACTION1("Using %s definition for conflicting fields\n",
- (from->defs.merge==MergeAugment?"first":"last"));
+ register int i;
+ unsigned collide = 0;
+ Bool report;
+
+ if (from->defs.merge == MergeReplace)
+ {
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ if (into->numLevels[i] != 0)
+ {
+ if (into->syms[i])
+ uFree(into->syms[i]);
+ if (into->acts[i])
+ uFree(into->acts[i]);
+ }
+ }
+ *into = *from;
+ bzero(from, sizeof(KeyInfo));
+ return True;
+ }
+ report = ((warningLevel > 9) ||
+ ((into->defs.fileID == from->defs.fileID)
+ && (warningLevel > 0)));
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ if (from->numLevels[i] > 0)
+ {
+ if (into->numLevels[i] == 0)
+ {
+ into->numLevels[i] = from->numLevels[i];
+ into->syms[i] = from->syms[i];
+ into->acts[i] = from->acts[i];
+ into->symsDefined |= (1 << i);
+ from->syms[i] = NULL;
+ from->acts[i] = NULL;
+ from->numLevels[i] = 0;
+ from->symsDefined &= ~(1 << i);
+ if (into->syms[i])
+ into->defs.defined |= _Key_Syms;
+ if (into->acts[i])
+ into->defs.defined |= _Key_Acts;
+ }
+ else
+ {
+ if (report)
+ {
+ if (into->syms[i])
+ collide |= _Key_Syms;
+ if (into->acts[i])
+ collide |= _Key_Acts;
+ }
+ MergeKeyGroups(info, into, from, (unsigned) i);
+ }
+ }
+ if (from->types[i] != None)
+ {
+ if ((into->types[i] != None) && (report) &&
+ (into->types[i] != from->types[i]))
+ {
+ Atom use, ignore;
+ collide |= _Key_Types;
+ if (from->defs.merge != MergeAugment)
+ {
+ use = from->types[i];
+ ignore = into->types[i];
+ }
+ else
+ {
+ use = into->types[i];
+ ignore = from->types[i];
+ }
+ WARN2
+ ("Multiple definitions for group %d type of key %s\n",
+ i, longText(into->name, XkbMessage));
+ ACTION2("Using %s, ignoring %s\n",
+ XkbAtomText(NULL, use, XkbMessage),
+ XkbAtomText(NULL, ignore, XkbMessage));
+ }
+ if ((from->defs.merge != MergeAugment)
+ || (into->types[i] == None))
+ {
+ into->types[i] = from->types[i];
+ }
+ }
+ }
+ if (UseNewField(_Key_Behavior, &into->defs, &from->defs, &collide))
+ {
+ into->behavior = from->behavior;
+ into->nameForOverlayKey = from->nameForOverlayKey;
+ into->defs.defined |= _Key_Behavior;
+ }
+ if (UseNewField(_Key_VModMap, &into->defs, &from->defs, &collide))
+ {
+ into->vmodmap = from->vmodmap;
+ into->defs.defined |= _Key_VModMap;
+ }
+ if (UseNewField(_Key_Repeat, &into->defs, &from->defs, &collide))
+ {
+ into->repeat = from->repeat;
+ into->defs.defined |= _Key_Repeat;
+ }
+ if (UseNewField(_Key_Type_Dflt, &into->defs, &from->defs, &collide))
+ {
+ into->dfltType = from->dfltType;
+ into->defs.defined |= _Key_Type_Dflt;
+ }
+ if (UseNewField(_Key_GroupInfo, &into->defs, &from->defs, &collide))
+ {
+ into->groupInfo = from->groupInfo;
+ into->defs.defined |= _Key_GroupInfo;
+ }
+ if (collide)
+ {
+ WARN1("Symbol map for key %s redefined\n",
+ longText(into->name, XkbMessage));
+ ACTION1("Using %s definition for conflicting fields\n",
+ (from->defs.merge == MergeAugment ? "first" : "last"));
}
return True;
}
static Bool
-AddKeySymbols(SymbolsInfo *info,KeyInfo *key,XkbDescPtr xkb)
+AddKeySymbols(SymbolsInfo * info, KeyInfo * key, XkbDescPtr xkb)
{
-register int i;
-unsigned long real_name;
-
- for (i=0;i<info->nKeys;i++) {
- if (info->keys[i].name==key->name)
- return MergeKeys(info,&info->keys[i],key);
- }
- if(FindKeyNameForAlias(xkb, key->name, &real_name)) {
- for (i=0;i<info->nKeys;i++) {
- if (info->keys[i].name==real_name)
- return MergeKeys(info,&info->keys[i],key);
+ register int i;
+ unsigned long real_name;
+
+ for (i = 0; i < info->nKeys; i++)
+ {
+ if (info->keys[i].name == key->name)
+ return MergeKeys(info, &info->keys[i], key);
+ }
+ if (FindKeyNameForAlias(xkb, key->name, &real_name))
+ {
+ for (i = 0; i < info->nKeys; i++)
+ {
+ if (info->keys[i].name == real_name)
+ return MergeKeys(info, &info->keys[i], key);
}
}
- if (info->nKeys>=info->szKeys) {
- info->szKeys+= SYMBOLS_CHUNK;
- info->keys= uTypedRecalloc(info->keys,info->nKeys,info->szKeys,KeyInfo);
- if (!info->keys) {
- WSGO("Could not allocate key symbols descriptions\n");
- ACTION("Some key symbols definitions may be lost\n");
- return False;
- }
+ if (info->nKeys >= info->szKeys)
+ {
+ info->szKeys += SYMBOLS_CHUNK;
+ info->keys =
+ uTypedRecalloc(info->keys, info->nKeys, info->szKeys, KeyInfo);
+ if (!info->keys)
+ {
+ WSGO("Could not allocate key symbols descriptions\n");
+ ACTION("Some key symbols definitions may be lost\n");
+ return False;
+ }
}
- return CopyKeyInfo(key,&info->keys[info->nKeys++],True);
+ return CopyKeyInfo(key, &info->keys[info->nKeys++], True);
}
static Bool
-AddModMapEntry(SymbolsInfo *info,ModMapEntry *new)
+AddModMapEntry(SymbolsInfo * info, ModMapEntry * new)
{
-ModMapEntry * mm;
-Bool clobber;
-
- clobber= (new->defs.merge!=MergeAugment);
- for (mm=info->modMap;mm!=NULL;mm= (ModMapEntry *)mm->defs.next) {
- if (new->haveSymbol&&mm->haveSymbol&&(new->u.keySym==mm->u.keySym)) {
- unsigned use,ignore;
- if (mm->modifier!=new->modifier) {
- if (clobber) {
- use= new->modifier;
- ignore= mm->modifier;
- }
- else {
- use= mm->modifier;
- ignore= new->modifier;
- }
- ERROR1("%s added to symbol map for multiple modifiers\n",
- XkbKeysymText(new->u.keySym,XkbMessage));
- ACTION2("Using %s, ignoring %s.\n",
- XkbModIndexText(use,XkbMessage),
- XkbModIndexText(ignore,XkbMessage));
- mm->modifier= use;
- }
- return True;
- }
- if ((!new->haveSymbol)&&(!mm->haveSymbol)&&
- (new->u.keyName==mm->u.keyName)) {
- unsigned use,ignore;
- if (mm->modifier!=new->modifier) {
- if (clobber) {
- use= new->modifier;
- ignore= mm->modifier;
- }
- else {
- use= mm->modifier;
- ignore= new->modifier;
- }
- ERROR1("Key %s added to map for multiple modifiers\n",
- longText(new->u.keyName,XkbMessage));
- ACTION2("Using %s, ignoring %s.\n",
- XkbModIndexText(use,XkbMessage),
- XkbModIndexText(ignore,XkbMessage));
- mm->modifier= use;
- }
- return True;
- }
- }
- mm= uTypedAlloc(ModMapEntry);
- if (mm==NULL) {
- WSGO("Could not allocate modifier map entry\n");
- ACTION1("Modifier map for %s will be incomplete\n",
- XkbModIndexText(new->modifier,XkbMessage));
- return False;
- }
- *mm= *new;
- mm->defs.next= &info->modMap->defs;
- info->modMap= mm;
+ ModMapEntry *mm;
+ Bool clobber;
+
+ clobber = (new->defs.merge != MergeAugment);
+ for (mm = info->modMap; mm != NULL; mm = (ModMapEntry *) mm->defs.next)
+ {
+ if (new->haveSymbol && mm->haveSymbol
+ && (new->u.keySym == mm->u.keySym))
+ {
+ unsigned use, ignore;
+ if (mm->modifier != new->modifier)
+ {
+ if (clobber)
+ {
+ use = new->modifier;
+ ignore = mm->modifier;
+ }
+ else
+ {
+ use = mm->modifier;
+ ignore = new->modifier;
+ }
+ ERROR1
+ ("%s added to symbol map for multiple modifiers\n",
+ XkbKeysymText(new->u.keySym, XkbMessage));
+ ACTION2("Using %s, ignoring %s.\n",
+ XkbModIndexText(use, XkbMessage),
+ XkbModIndexText(ignore, XkbMessage));
+ mm->modifier = use;
+ }
+ return True;
+ }
+ if ((!new->haveSymbol) && (!mm->haveSymbol) &&
+ (new->u.keyName == mm->u.keyName))
+ {
+ unsigned use, ignore;
+ if (mm->modifier != new->modifier)
+ {
+ if (clobber)
+ {
+ use = new->modifier;
+ ignore = mm->modifier;
+ }
+ else
+ {
+ use = mm->modifier;
+ ignore = new->modifier;
+ }
+ ERROR1("Key %s added to map for multiple modifiers\n",
+ longText(new->u.keyName, XkbMessage));
+ ACTION2("Using %s, ignoring %s.\n",
+ XkbModIndexText(use, XkbMessage),
+ XkbModIndexText(ignore, XkbMessage));
+ mm->modifier = use;
+ }
+ return True;
+ }
+ }
+ mm = uTypedAlloc(ModMapEntry);
+ if (mm == NULL)
+ {
+ WSGO("Could not allocate modifier map entry\n");
+ ACTION1("Modifier map for %s will be incomplete\n",
+ XkbModIndexText(new->modifier, XkbMessage));
+ return False;
+ }
+ *mm = *new;
+ mm->defs.next = &info->modMap->defs;
+ info->modMap = mm;
return True;
}
/***====================================================================***/
static void
-MergeIncludedSymbols(SymbolsInfo *into,SymbolsInfo *from,
- unsigned merge,XkbDescPtr xkb)
+MergeIncludedSymbols(SymbolsInfo * into, SymbolsInfo * from,
+ unsigned merge, XkbDescPtr xkb)
{
-register int i;
-KeyInfo * key;
-
- if (from->errorCount>0) {
- into->errorCount+= from->errorCount;
- return;
- }
- if (into->name==NULL) {
- into->name= from->name;
- from->name= NULL;
- }
- for (i=0;i<XkbNumKbdGroups;i++) {
- if (from->groupNames[i]!=None) {
- if ((merge!=MergeAugment)||(into->groupNames[i]==None))
- into->groupNames[i]= from->groupNames[i];
- }
- }
- for (i=0,key=from->keys;i<from->nKeys;i++,key++) {
- if (merge!=MergeDefault)
- key->defs.merge= merge;
- if (!AddKeySymbols(into,key,xkb))
- into->errorCount++;
- }
- if (from->modMap!=NULL) {
- ModMapEntry *mm,*next;
- for (mm=from->modMap;mm!=NULL;mm=next) {
- if (merge!=MergeDefault)
- mm->defs.merge= merge;
- if (!AddModMapEntry(into,mm))
- into->errorCount++;
- next= (ModMapEntry *)mm->defs.next;
- uFree(mm);
- }
- from->modMap= NULL;
- }
- if (!MergeAliases(&into->aliases,&from->aliases,merge))
- into->errorCount++;
+ register int i;
+ KeyInfo *key;
+
+ if (from->errorCount > 0)
+ {
+ into->errorCount += from->errorCount;
+ return;
+ }
+ if (into->name == NULL)
+ {
+ into->name = from->name;
+ from->name = NULL;
+ }
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ if (from->groupNames[i] != None)
+ {
+ if ((merge != MergeAugment) || (into->groupNames[i] == None))
+ into->groupNames[i] = from->groupNames[i];
+ }
+ }
+ for (i = 0, key = from->keys; i < from->nKeys; i++, key++)
+ {
+ if (merge != MergeDefault)
+ key->defs.merge = merge;
+ if (!AddKeySymbols(into, key, xkb))
+ into->errorCount++;
+ }
+ if (from->modMap != NULL)
+ {
+ ModMapEntry *mm, *next;
+ for (mm = from->modMap; mm != NULL; mm = next)
+ {
+ if (merge != MergeDefault)
+ mm->defs.merge = merge;
+ if (!AddModMapEntry(into, mm))
+ into->errorCount++;
+ next = (ModMapEntry *) mm->defs.next;
+ uFree(mm);
+ }
+ from->modMap = NULL;
+ }
+ if (!MergeAliases(&into->aliases, &from->aliases, merge))
+ into->errorCount++;
return;
}
-typedef void (*FileHandler)(
- XkbFile * /* rtrn */,
- XkbDescPtr /* xkb */,
- unsigned /* merge */,
- SymbolsInfo * /* included */
-);
+typedef void (*FileHandler) (XkbFile * /* rtrn */ ,
+ XkbDescPtr /* xkb */ ,
+ unsigned /* merge */ ,
+ SymbolsInfo * /* included */
+ );
static Bool
-HandleIncludeSymbols( IncludeStmt * stmt,
- XkbDescPtr xkb,
- SymbolsInfo * info,
- FileHandler hndlr)
+HandleIncludeSymbols(IncludeStmt * stmt,
+ XkbDescPtr xkb, SymbolsInfo * info, FileHandler hndlr)
{
-unsigned newMerge;
-XkbFile * rtrn;
-SymbolsInfo included;
-Bool haveSelf;
-
- haveSelf= False;
- if ((stmt->file==NULL)&&(stmt->map==NULL)) {
- haveSelf= True;
- included= *info;
- bzero(info,sizeof(SymbolsInfo));
- }
- else if (ProcessIncludeFile(stmt,XkmSymbolsIndex,&rtrn,&newMerge)) {
- InitSymbolsInfo(&included,xkb);
- included.fileID= included.dflt.defs.fileID= rtrn->id;
- included.merge= included.dflt.defs.merge= MergeOverride;
- if (stmt->modifier) {
- included.explicit_group= atoi(stmt->modifier) - 1;
- } else {
- included.explicit_group= info->explicit_group;
- }
- (*hndlr)(rtrn,xkb,MergeOverride,&included);
- if (stmt->stmt!=NULL) {
- if (included.name!=NULL)
- uFree(included.name);
- included.name= stmt->stmt;
- stmt->stmt= NULL;
- }
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- if ((stmt->next!=NULL)&&(included.errorCount<1)) {
- IncludeStmt * next;
- unsigned op;
- SymbolsInfo next_incl;
-
- for (next=stmt->next;next!=NULL;next=next->next) {
- if ((next->file==NULL)&&(next->map==NULL)) {
- haveSelf= True;
- MergeIncludedSymbols(&included,info,next->merge,xkb);
- FreeSymbolsInfo(info);
- }
- else if (ProcessIncludeFile(next,XkmSymbolsIndex,&rtrn,&op)) {
- InitSymbolsInfo(&next_incl,xkb);
- next_incl.fileID= next_incl.dflt.defs.fileID= rtrn->id;
- next_incl.merge= next_incl.dflt.defs.merge= MergeOverride;
- if (next->modifier) {
- next_incl.explicit_group= atoi(next->modifier) - 1;
- } else {
- next_incl.explicit_group= info->explicit_group;
+ unsigned newMerge;
+ XkbFile *rtrn;
+ SymbolsInfo included;
+ Bool haveSelf;
+
+ haveSelf = False;
+ if ((stmt->file == NULL) && (stmt->map == NULL))
+ {
+ haveSelf = True;
+ included = *info;
+ bzero(info, sizeof(SymbolsInfo));
+ }
+ else if (ProcessIncludeFile(stmt, XkmSymbolsIndex, &rtrn, &newMerge))
+ {
+ InitSymbolsInfo(&included, xkb);
+ included.fileID = included.dflt.defs.fileID = rtrn->id;
+ included.merge = included.dflt.defs.merge = MergeOverride;
+ if (stmt->modifier)
+ {
+ included.explicit_group = atoi(stmt->modifier) - 1;
+ }
+ else
+ {
+ included.explicit_group = info->explicit_group;
+ }
+ (*hndlr) (rtrn, xkb, MergeOverride, &included);
+ if (stmt->stmt != NULL)
+ {
+ if (included.name != NULL)
+ uFree(included.name);
+ included.name = stmt->stmt;
+ stmt->stmt = NULL;
+ }
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ if ((stmt->next != NULL) && (included.errorCount < 1))
+ {
+ IncludeStmt *next;
+ unsigned op;
+ SymbolsInfo next_incl;
+
+ for (next = stmt->next; next != NULL; next = next->next)
+ {
+ if ((next->file == NULL) && (next->map == NULL))
+ {
+ haveSelf = True;
+ MergeIncludedSymbols(&included, info, next->merge, xkb);
+ FreeSymbolsInfo(info);
+ }
+ else if (ProcessIncludeFile(next, XkmSymbolsIndex, &rtrn, &op))
+ {
+ InitSymbolsInfo(&next_incl, xkb);
+ next_incl.fileID = next_incl.dflt.defs.fileID = rtrn->id;
+ next_incl.merge = next_incl.dflt.defs.merge = MergeOverride;
+ if (next->modifier)
+ {
+ next_incl.explicit_group = atoi(next->modifier) - 1;
+ }
+ else
+ {
+ next_incl.explicit_group = info->explicit_group;
}
- (*hndlr)(rtrn,xkb,MergeOverride,&next_incl);
- MergeIncludedSymbols(&included,&next_incl,op,xkb);
- FreeSymbolsInfo(&next_incl);
- }
- else {
- info->errorCount+= 10;
- return False;
- }
- }
+ (*hndlr) (rtrn, xkb, MergeOverride, &next_incl);
+ MergeIncludedSymbols(&included, &next_incl, op, xkb);
+ FreeSymbolsInfo(&next_incl);
+ }
+ else
+ {
+ info->errorCount += 10;
+ return False;
+ }
+ }
}
if (haveSelf)
- *info= included;
- else {
- MergeIncludedSymbols(info,&included,newMerge,xkb);
- FreeSymbolsInfo(&included);
+ *info = included;
+ else
+ {
+ MergeIncludedSymbols(info, &included, newMerge, xkb);
+ FreeSymbolsInfo(&included);
}
- return (info->errorCount==0);
+ return (info->errorCount == 0);
}
-static LookupEntry groupNames[]= {
- { "group1", 1 },
- { "group2", 2 },
- { "group3", 3 },
- { "group4", 4 },
- { "group5", 5 },
- { "group6", 6 },
- { "group7", 7 },
- { "group8", 8 },
- { NULL, 0 }
+static LookupEntry groupNames[] = {
+ {"group1", 1},
+ {"group2", 2},
+ {"group3", 3},
+ {"group4", 4},
+ {"group5", 5},
+ {"group6", 6},
+ {"group7", 7},
+ {"group8", 8},
+ {NULL, 0}
};
@@ -749,765 +877,885 @@ static LookupEntry groupNames[]= {
#define ACTIONS 2
static Bool
-GetGroupIndex( KeyInfo * key,
- ExprDef * arrayNdx,
- unsigned what,
- unsigned * ndx_rtrn)
+GetGroupIndex(KeyInfo * key,
+ ExprDef * arrayNdx, unsigned what, unsigned *ndx_rtrn)
{
-const char *name;
-ExprResult tmp;
-
- if (what==SYMBOLS) name= "symbols";
- else name= "actions";
-
- if (arrayNdx==NULL) {
- register int i;
- unsigned defined;
- if (what==SYMBOLS) defined= key->symsDefined;
- else defined= key->actsDefined;
-
- for (i=0;i<XkbNumKbdGroups;i++) {
- if ((defined&(1<<i))==0) {
- *ndx_rtrn= i;
- return True;
- }
- }
- ERROR3("Too many groups of %s for key %s (max %d)\n",name,
- longText(key->name,XkbMessage),
- XkbNumKbdGroups+1);
- ACTION1("Ignoring %s defined for extra groups\n",name);
- return False;
- }
- if (!ExprResolveInteger(arrayNdx,&tmp,SimpleLookup,(XPointer)groupNames)) {
- ERROR2("Illegal group index for %s of key %s\n",name,
- longText(key->name,XkbMessage));
- ACTION("Definition with non-integer array index ignored\n");
- return False;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbNumKbdGroups)) {
- ERROR3("Group index for %s of key %s is out of range (1..%d)\n",name,
- longText(key->name,XkbMessage),
- XkbNumKbdGroups+1);
- ACTION2("Ignoring %s for group %d\n",name,tmp.uval);
- return False;
- }
- *ndx_rtrn= tmp.uval-1;
+ const char *name;
+ ExprResult tmp;
+
+ if (what == SYMBOLS)
+ name = "symbols";
+ else
+ name = "actions";
+
+ if (arrayNdx == NULL)
+ {
+ register int i;
+ unsigned defined;
+ if (what == SYMBOLS)
+ defined = key->symsDefined;
+ else
+ defined = key->actsDefined;
+
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ if ((defined & (1 << i)) == 0)
+ {
+ *ndx_rtrn = i;
+ return True;
+ }
+ }
+ ERROR3("Too many groups of %s for key %s (max %d)\n", name,
+ longText(key->name, XkbMessage), XkbNumKbdGroups + 1);
+ ACTION1("Ignoring %s defined for extra groups\n", name);
+ return False;
+ }
+ if (!ExprResolveInteger
+ (arrayNdx, &tmp, SimpleLookup, (XPointer) groupNames))
+ {
+ ERROR2("Illegal group index for %s of key %s\n", name,
+ longText(key->name, XkbMessage));
+ ACTION("Definition with non-integer array index ignored\n");
+ return False;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbNumKbdGroups))
+ {
+ ERROR3("Group index for %s of key %s is out of range (1..%d)\n",
+ name, longText(key->name, XkbMessage), XkbNumKbdGroups + 1);
+ ACTION2("Ignoring %s for group %d\n", name, tmp.uval);
+ return False;
+ }
+ *ndx_rtrn = tmp.uval - 1;
return True;
}
static Bool
-AddSymbolsToKey( KeyInfo * key,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SymbolsInfo * info)
+AddSymbolsToKey(KeyInfo * key,
+ XkbDescPtr xkb,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, SymbolsInfo * info)
{
-unsigned ndx,nSyms;
-int i;
-
- if (!GetGroupIndex(key,arrayNdx,SYMBOLS,&ndx))
- return False;
- if (value==NULL) {
- key->symsDefined|= (1<<ndx);
- return True;
- }
- if (value->op!=ExprKeysymList) {
- ERROR1("Expected a list of symbols, found %s\n",exprOpText(value->op));
- ACTION2("Ignoring symbols for group %d of %s\n",ndx,
- longText(key->name,XkbMessage));
- return False;
- }
- if (key->syms[ndx]!=NULL) {
- WSGO2("Symbols for key %s, group %d already defined\n",
- longText(key->name,XkbMessage),
- ndx);
- return False;
- }
- nSyms= value->value.list.nSyms;
- if (((key->numLevels[ndx]<nSyms)||(key->syms[ndx]==NULL))&&
- (!ResizeKeyGroup(key,ndx,nSyms,False))) {
- WSGO2("Could not resize group %d of key %s\n",ndx,
- longText(key->name,XkbMessage));
- ACTION("Symbols lost\n");
- return False;
- }
- key->symsDefined|= (1<<ndx);
- memcpy((char *)key->syms[ndx],(char *)value->value.list.syms,
- nSyms*sizeof(KeySym));
- for (i=key->numLevels[ndx]-1;(i>=0)&&(key->syms[ndx][i]==NoSymbol);i--) {
- key->numLevels[ndx]--;
+ unsigned ndx, nSyms;
+ int i;
+
+ if (!GetGroupIndex(key, arrayNdx, SYMBOLS, &ndx))
+ return False;
+ if (value == NULL)
+ {
+ key->symsDefined |= (1 << ndx);
+ return True;
+ }
+ if (value->op != ExprKeysymList)
+ {
+ ERROR1("Expected a list of symbols, found %s\n",
+ exprOpText(value->op));
+ ACTION2("Ignoring symbols for group %d of %s\n", ndx,
+ longText(key->name, XkbMessage));
+ return False;
+ }
+ if (key->syms[ndx] != NULL)
+ {
+ WSGO2("Symbols for key %s, group %d already defined\n",
+ longText(key->name, XkbMessage), ndx);
+ return False;
+ }
+ nSyms = value->value.list.nSyms;
+ if (((key->numLevels[ndx] < nSyms) || (key->syms[ndx] == NULL)) &&
+ (!ResizeKeyGroup(key, ndx, nSyms, False)))
+ {
+ WSGO2("Could not resize group %d of key %s\n", ndx,
+ longText(key->name, XkbMessage));
+ ACTION("Symbols lost\n");
+ return False;
+ }
+ key->symsDefined |= (1 << ndx);
+ for (i = 0; i < nSyms; i++) {
+ if (!LookupKeysym(value->value.list.syms[i], &key->syms[ndx][i])) {
+ WSGO1("Could not resolve keysym %s\n", value->value.list.syms[i]);
+ key->syms[ndx][i] = NoSymbol;
+ }
+ }
+ for (i = key->numLevels[ndx] - 1;
+ (i >= 0) && (key->syms[ndx][i] == NoSymbol); i--)
+ {
+ key->numLevels[ndx]--;
}
return True;
}
static Bool
-AddActionsToKey( KeyInfo * key,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SymbolsInfo * info)
+AddActionsToKey(KeyInfo * key,
+ XkbDescPtr xkb,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, SymbolsInfo * info)
{
-register int i;
-unsigned ndx,nActs;
-ExprDef * act;
-XkbAnyAction * toAct;
-
- if (!GetGroupIndex(key,arrayNdx,ACTIONS,&ndx))
- return False;
-
- if (value==NULL) {
- key->actsDefined|= (1<<ndx);
- return True;
- }
- if (value->op!=ExprActionList) {
- WSGO1("Bad expression type (%d) for action list value\n",value->op);
- ACTION2("Ignoring actions for group %d of %s\n",ndx,
- longText(key->name,XkbMessage));
- return False;
- }
- if (key->acts[ndx]!=NULL) {
- WSGO2("Actions for key %s, group %d already defined\n",
- longText(key->name,XkbMessage),
- ndx);
- return False;
- }
- for (nActs=0,act= value->value.child;act!=NULL;nActs++) {
- act= (ExprDef *)act->common.next;
- }
- if (nActs<1) {
- WSGO("Action list but not actions in AddActionsToKey\n");
- return False;
- }
- if (((key->numLevels[ndx]<nActs)||(key->acts[ndx]==NULL))&&
- (!ResizeKeyGroup(key,ndx,nActs,True))) {
- WSGO2("Could not resize group %d of key %s\n",ndx,
- longText(key->name,XkbMessage));
- ACTION("Actions lost\n");
- return False;
- }
- key->actsDefined|= (1<<ndx);
-
- toAct= (XkbAnyAction *)key->acts[ndx];
- act= value->value.child;
- for (i=0;i<nActs;i++,toAct++) {
- if (!HandleActionDef(act,xkb,toAct,MergeOverride,info->action)) {
- ERROR1("Illegal action definition for %s\n",
- longText(key->name,XkbMessage));
- ACTION2("Action for group %d/level %d ignored\n",ndx+1,i+1);
- }
- act= (ExprDef *)act->common.next;
+ register int i;
+ unsigned ndx, nActs;
+ ExprDef *act;
+ XkbAnyAction *toAct;
+
+ if (!GetGroupIndex(key, arrayNdx, ACTIONS, &ndx))
+ return False;
+
+ if (value == NULL)
+ {
+ key->actsDefined |= (1 << ndx);
+ return True;
+ }
+ if (value->op != ExprActionList)
+ {
+ WSGO1("Bad expression type (%d) for action list value\n", value->op);
+ ACTION2("Ignoring actions for group %d of %s\n", ndx,
+ longText(key->name, XkbMessage));
+ return False;
+ }
+ if (key->acts[ndx] != NULL)
+ {
+ WSGO2("Actions for key %s, group %d already defined\n",
+ longText(key->name, XkbMessage), ndx);
+ return False;
+ }
+ for (nActs = 0, act = value->value.child; act != NULL; nActs++)
+ {
+ act = (ExprDef *) act->common.next;
+ }
+ if (nActs < 1)
+ {
+ WSGO("Action list but not actions in AddActionsToKey\n");
+ return False;
+ }
+ if (((key->numLevels[ndx] < nActs) || (key->acts[ndx] == NULL)) &&
+ (!ResizeKeyGroup(key, ndx, nActs, True)))
+ {
+ WSGO2("Could not resize group %d of key %s\n", ndx,
+ longText(key->name, XkbMessage));
+ ACTION("Actions lost\n");
+ return False;
+ }
+ key->actsDefined |= (1 << ndx);
+
+ toAct = (XkbAnyAction *) key->acts[ndx];
+ act = value->value.child;
+ for (i = 0; i < nActs; i++, toAct++)
+ {
+ if (!HandleActionDef(act, xkb, toAct, MergeOverride, info->action))
+ {
+ ERROR1("Illegal action definition for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION2("Action for group %d/level %d ignored\n", ndx + 1, i + 1);
+ }
+ act = (ExprDef *) act->common.next;
}
return True;
}
static int
-SetAllowNone(KeyInfo *key,ExprDef *arrayNdx,ExprDef *value)
+SetAllowNone(KeyInfo * key, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult tmp;
-unsigned radio_groups= 0;
-
- if (arrayNdx==NULL) {
- radio_groups= XkbAllRadioGroupsMask;
- }
- else {
- if (!ExprResolveInteger(arrayNdx,&tmp,RadioLookup,NULL)){
- ERROR("Illegal index in group name definition\n");
- ACTION("Definition with non-integer array index ignored\n");
- return False;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbMaxRadioGroups)) {
- ERROR1("Illegal radio group specified (must be 1..%d)\n",
- XkbMaxRadioGroups+1);
- ACTION1("Value of \"allow none\" for group %d ignored\n",tmp.uval);
- return False;
- }
- radio_groups|= (1<<(tmp.uval-1));
- }
- if (!ExprResolveBoolean(value,&tmp,NULL,NULL)) {
- ERROR1("Illegal \"allow none\" value for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Non-boolean value ignored\n");
- return False;
- }
- if (tmp.uval) key->allowNone|= radio_groups;
- else key->allowNone&= ~radio_groups;
+ ExprResult tmp;
+ unsigned radio_groups = 0;
+
+ if (arrayNdx == NULL)
+ {
+ radio_groups = XkbAllRadioGroupsMask;
+ }
+ else
+ {
+ if (!ExprResolveInteger(arrayNdx, &tmp, RadioLookup, NULL))
+ {
+ ERROR("Illegal index in group name definition\n");
+ ACTION("Definition with non-integer array index ignored\n");
+ return False;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbMaxRadioGroups))
+ {
+ ERROR1("Illegal radio group specified (must be 1..%d)\n",
+ XkbMaxRadioGroups + 1);
+ ACTION1("Value of \"allow none\" for group %d ignored\n",
+ tmp.uval);
+ return False;
+ }
+ radio_groups |= (1 << (tmp.uval - 1));
+ }
+ if (!ExprResolveBoolean(value, &tmp, NULL, NULL))
+ {
+ ERROR1("Illegal \"allow none\" value for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Non-boolean value ignored\n");
+ return False;
+ }
+ if (tmp.uval)
+ key->allowNone |= radio_groups;
+ else
+ key->allowNone &= ~radio_groups;
return True;
}
-static LookupEntry lockingEntries[] = {
- { "true", XkbKB_Lock },
- { "yes", XkbKB_Lock },
- { "on", XkbKB_Lock },
- { "false", XkbKB_Default },
- { "no", XkbKB_Default },
- { "off", XkbKB_Default },
- { "permanent", XkbKB_Lock|XkbKB_Permanent },
- { NULL, 0 }
+static LookupEntry lockingEntries[] = {
+ {"true", XkbKB_Lock},
+ {"yes", XkbKB_Lock},
+ {"on", XkbKB_Lock},
+ {"false", XkbKB_Default},
+ {"no", XkbKB_Default},
+ {"off", XkbKB_Default},
+ {"permanent", XkbKB_Lock | XkbKB_Permanent},
+ {NULL, 0}
};
-static LookupEntry repeatEntries[]= {
- { "true", RepeatYes },
- { "yes", RepeatYes },
- { "on", RepeatYes },
- { "false", RepeatNo },
- { "no", RepeatNo },
- { "off", RepeatNo },
- { "default", RepeatUndefined },
- { NULL, 0 }
+static LookupEntry repeatEntries[] = {
+ {"true", RepeatYes},
+ {"yes", RepeatYes},
+ {"on", RepeatYes},
+ {"false", RepeatNo},
+ {"no", RepeatNo},
+ {"off", RepeatNo},
+ {"default", RepeatUndefined},
+ {NULL, 0}
};
-static LookupEntry rgEntries[]= {
- { "none", 0 },
- { NULL, 0 }
+static LookupEntry rgEntries[] = {
+ {"none", 0},
+ {NULL, 0}
};
static Bool
-SetSymbolsField( KeyInfo * key,
- XkbDescPtr xkb,
- char * field,
- ExprDef * arrayNdx,
- ExprDef * value,
- SymbolsInfo * info)
+SetSymbolsField(KeyInfo * key,
+ XkbDescPtr xkb,
+ char *field,
+ ExprDef * arrayNdx, ExprDef * value, SymbolsInfo * info)
{
-Bool ok= True;
-ExprResult tmp;
-
- if (uStrCaseCmp(field,"type")==0) {
- ExprResult ndx;
- if ((!ExprResolveString(value,&tmp,NULL,NULL))&&(warningLevel>0)) {
- WARN("The type field of a key symbol map must be a string\n");
- ACTION("Ignoring illegal type definition\n");
- }
- if (arrayNdx==NULL) {
- key->dfltType= XkbInternAtom(NULL,tmp.str,False);
- key->defs.defined|= _Key_Type_Dflt;
- }
- else if (!ExprResolveInteger(arrayNdx,&ndx,SimpleLookup,
- (XPointer)groupNames)) {
- ERROR1("Illegal group index for type of key %s\n",
- longText(key->name,XkbMessage));
- ACTION("Definition with non-integer array index ignored\n");
- return False;
- }
- else if ((ndx.uval<1)||(ndx.uval>XkbNumKbdGroups)) {
- ERROR2("Group index for type of key %s is out of range (1..%d)\n",
- longText(key->name,XkbMessage),
- XkbNumKbdGroups+1);
- ACTION1("Ignoring type for group %d\n",ndx.uval);
- return False;
- }
- else {
- key->types[ndx.uval-1]= XkbInternAtom(NULL,tmp.str,False);
- key->typesDefined|= (1<<(ndx.uval-1));
- }
- }
- else if (uStrCaseCmp(field,"symbols")==0)
- return AddSymbolsToKey(key,xkb,field,arrayNdx,value,info);
- else if (uStrCaseCmp(field,"actions")==0)
- return AddActionsToKey(key,xkb,field,arrayNdx,value,info);
- else if ((uStrCaseCmp(field,"vmods")==0)||
- (uStrCaseCmp(field,"virtualmods")==0)||
- (uStrCaseCmp(field,"virtualmodifiers")==0)) {
- ok= ExprResolveModMask(value,&tmp,LookupVModMask,(XPointer)xkb);
- if (ok) {
- key->vmodmap= (tmp.uval>>8);
- key->defs.defined|= _Key_VModMap;
- }
- else {
- ERROR1("Expected a virtual modifier mask, found %s\n",
- exprOpText(value->op));
- ACTION1("Ignoring virtual modifiers definition for key %s\n",
- longText(key->name,XkbMessage));
- }
- }
- else if ((uStrCaseCmp(field,"locking")==0)||(uStrCaseCmp(field,"lock")==0)||
- (uStrCaseCmp(field,"locks")==0)) {
- ok= ExprResolveEnum(value,&tmp,lockingEntries);
- if (ok)
- key->behavior.type= tmp.uval;
- key->defs.defined|= _Key_Behavior;
- }
- else if ((uStrCaseCmp(field,"radiogroup")==0)||
- (uStrCaseCmp(field,"permanentradiogroup")==0)) {
- Bool permanent= False;
- if (uStrCaseCmp(field,"permanentradiogroup")==0)
- permanent= True;
- ok= ExprResolveInteger(value,&tmp,SimpleLookup,(XPointer)rgEntries);
- if (!ok) {
- ERROR1("Illegal radio group specification for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Non-integer radio group ignored\n");
- return False;
- }
- if (tmp.uval==0) {
- key->behavior.type= XkbKB_Default;
- key->behavior.data= 0;
- return ok;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbMaxRadioGroups)) {
- ERROR1("Radio group specification for %s out of range (1..32)\n",
- longText(key->name,XkbMessage));
- ACTION1("Illegal radio group %d ignored\n",tmp.uval);
- return False;
- }
- key->behavior.type= XkbKB_RadioGroup|(permanent?XkbKB_Permanent:0);
- key->behavior.data= tmp.uval-1;
- if (key->allowNone&(1<<(tmp.uval-1)))
- key->behavior.data|= XkbKB_RGAllowNone;
- key->defs.defined|= _Key_Behavior;
- }
- else if (uStrCaseEqual(field,"allownone")) {
- ok= SetAllowNone(key,arrayNdx,value);
- }
- else if (uStrCasePrefix("overlay",field)||
- uStrCasePrefix("permanentoverlay",field)) {
- Bool permanent= False;
- char *which;
- int overlayNdx;
- if (uStrCasePrefix("permanent",field)) {
- permanent= True;
- which= &field[sizeof("permanentoverlay")-1];
- }
- else {
- which= &field[sizeof("overlay")-1];
- }
- if (sscanf(which,"%d",&overlayNdx)==1) {
- if (((overlayNdx<1)||(overlayNdx>2))&&(warningLevel>0)) {
- ERROR2("Illegal overlay %d specified for %s\n",
- overlayNdx,
- longText(key->name,XkbMessage));
- ACTION("Ignored\n");
- return False;
- }
- }
- else if (*which=='\0')
- overlayNdx=1;
- else if (warningLevel>0) {
- ERROR2("Illegal overlay \"%s\" specified for %s\n",
- which,
- longText(key->name,XkbMessage));
- ACTION("Ignored\n");
- return False;
- }
- ok= ExprResolveKeyName(value,&tmp,NULL,NULL);
- if (!ok) {
- ERROR1("Illegal overlay key specification for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Overlay key must be specified by name\n");
- return False;
- }
- if (overlayNdx==1) key->behavior.type= XkbKB_Overlay1;
- else key->behavior.type= XkbKB_Overlay2;
- if (permanent)
- key->behavior.type|= XkbKB_Permanent;
-
- key->behavior.data= 0;
- key->nameForOverlayKey= KeyNameToLong(tmp.keyName.name);
- key->defs.defined|= _Key_Behavior;
- }
- else if ((uStrCaseCmp(field,"repeating")==0)||
- (uStrCaseCmp(field,"repeats")==0)||
- (uStrCaseCmp(field,"repeat")==0)){
- ok= ExprResolveEnum(value,&tmp,repeatEntries);
- if (!ok) {
- ERROR1("Illegal repeat setting for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Non-boolean repeat setting ignored\n");
- return False;
- }
- key->repeat= tmp.uval;
- key->defs.defined|= _Key_Repeat;
- }
- else if ((uStrCaseCmp(field,"groupswrap")==0)||
- (uStrCaseCmp(field,"wrapgroups")==0)) {
- ok= ExprResolveBoolean(value,&tmp,NULL,NULL);
- if (!ok) {
- ERROR1("Illegal groupsWrap setting for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Non-boolean value ignored\n");
- return False;
- }
- if (tmp.uval) key->groupInfo= XkbWrapIntoRange;
- else key->groupInfo= XkbClampIntoRange;
- key->defs.defined|= _Key_GroupInfo;
- }
- else if ((uStrCaseCmp(field,"groupsclamp")==0)||
- (uStrCaseCmp(field,"clampgroups")==0)) {
- ok= ExprResolveBoolean(value,&tmp,NULL,NULL);
- if (!ok) {
- ERROR1("Illegal groupsClamp setting for %s\n",
- longText(key->name,XkbMessage));
- ACTION("Non-boolean value ignored\n");
- return False;
- }
- if (tmp.uval) key->groupInfo= XkbClampIntoRange;
- else key->groupInfo= XkbWrapIntoRange;
- key->defs.defined|= _Key_GroupInfo;
- }
- else if ((uStrCaseCmp(field,"groupsredirect")==0)||
- (uStrCaseCmp(field,"redirectgroups")==0)) {
- if (!ExprResolveInteger(value,&tmp,SimpleLookup,(XPointer)groupNames)) {
- ERROR1("Illegal group index for redirect of key %s\n",
- longText(key->name,XkbMessage));
- ACTION("Definition with non-integer group ignored\n");
- return False;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbNumKbdGroups)) {
- ERROR2("Out-of-range (1..%d) group for redirect of key %s\n",
- XkbNumKbdGroups,
- longText(key->name,XkbMessage));
- ERROR1("Ignoring illegal group %d\n",tmp.uval);
- return False;
- }
- key->groupInfo= XkbSetGroupInfo(0,XkbRedirectIntoRange,tmp.uval-1);
- key->defs.defined|= _Key_GroupInfo;
- }
- else {
- ERROR1("Unknown field %s in a symbol interpretation\n",field);
- ACTION("Definition ignored\n");
- ok= False;
+ Bool ok = True;
+ ExprResult tmp;
+
+ if (uStrCaseCmp(field, "type") == 0)
+ {
+ ExprResult ndx;
+ if ((!ExprResolveString(value, &tmp, NULL, NULL))
+ && (warningLevel > 0))
+ {
+ WARN("The type field of a key symbol map must be a string\n");
+ ACTION("Ignoring illegal type definition\n");
+ }
+ if (arrayNdx == NULL)
+ {
+ key->dfltType = XkbInternAtom(NULL, tmp.str, False);
+ key->defs.defined |= _Key_Type_Dflt;
+ }
+ else if (!ExprResolveInteger(arrayNdx, &ndx, SimpleLookup,
+ (XPointer) groupNames))
+ {
+ ERROR1("Illegal group index for type of key %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Definition with non-integer array index ignored\n");
+ return False;
+ }
+ else if ((ndx.uval < 1) || (ndx.uval > XkbNumKbdGroups))
+ {
+ ERROR2
+ ("Group index for type of key %s is out of range (1..%d)\n",
+ longText(key->name, XkbMessage), XkbNumKbdGroups + 1);
+ ACTION1("Ignoring type for group %d\n", ndx.uval);
+ return False;
+ }
+ else
+ {
+ key->types[ndx.uval - 1] = XkbInternAtom(NULL, tmp.str, False);
+ key->typesDefined |= (1 << (ndx.uval - 1));
+ }
+ }
+ else if (uStrCaseCmp(field, "symbols") == 0)
+ return AddSymbolsToKey(key, xkb, field, arrayNdx, value, info);
+ else if (uStrCaseCmp(field, "actions") == 0)
+ return AddActionsToKey(key, xkb, field, arrayNdx, value, info);
+ else if ((uStrCaseCmp(field, "vmods") == 0) ||
+ (uStrCaseCmp(field, "virtualmods") == 0) ||
+ (uStrCaseCmp(field, "virtualmodifiers") == 0))
+ {
+ ok = ExprResolveModMask(value, &tmp, LookupVModMask, (XPointer) xkb);
+ if (ok)
+ {
+ key->vmodmap = (tmp.uval >> 8);
+ key->defs.defined |= _Key_VModMap;
+ }
+ else
+ {
+ ERROR1("Expected a virtual modifier mask, found %s\n",
+ exprOpText(value->op));
+ ACTION1("Ignoring virtual modifiers definition for key %s\n",
+ longText(key->name, XkbMessage));
+ }
+ }
+ else if ((uStrCaseCmp(field, "locking") == 0)
+ || (uStrCaseCmp(field, "lock") == 0)
+ || (uStrCaseCmp(field, "locks") == 0))
+ {
+ ok = ExprResolveEnum(value, &tmp, lockingEntries);
+ if (ok)
+ key->behavior.type = tmp.uval;
+ key->defs.defined |= _Key_Behavior;
+ }
+ else if ((uStrCaseCmp(field, "radiogroup") == 0) ||
+ (uStrCaseCmp(field, "permanentradiogroup") == 0))
+ {
+ Bool permanent = False;
+ if (uStrCaseCmp(field, "permanentradiogroup") == 0)
+ permanent = True;
+ ok = ExprResolveInteger(value, &tmp, SimpleLookup,
+ (XPointer) rgEntries);
+ if (!ok)
+ {
+ ERROR1("Illegal radio group specification for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Non-integer radio group ignored\n");
+ return False;
+ }
+ if (tmp.uval == 0)
+ {
+ key->behavior.type = XkbKB_Default;
+ key->behavior.data = 0;
+ return ok;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbMaxRadioGroups))
+ {
+ ERROR1
+ ("Radio group specification for %s out of range (1..32)\n",
+ longText(key->name, XkbMessage));
+ ACTION1("Illegal radio group %d ignored\n", tmp.uval);
+ return False;
+ }
+ key->behavior.type =
+ XkbKB_RadioGroup | (permanent ? XkbKB_Permanent : 0);
+ key->behavior.data = tmp.uval - 1;
+ if (key->allowNone & (1 << (tmp.uval - 1)))
+ key->behavior.data |= XkbKB_RGAllowNone;
+ key->defs.defined |= _Key_Behavior;
+ }
+ else if (uStrCaseEqual(field, "allownone"))
+ {
+ ok = SetAllowNone(key, arrayNdx, value);
+ }
+ else if (uStrCasePrefix("overlay", field) ||
+ uStrCasePrefix("permanentoverlay", field))
+ {
+ Bool permanent = False;
+ char *which;
+ int overlayNdx;
+ if (uStrCasePrefix("permanent", field))
+ {
+ permanent = True;
+ which = &field[sizeof("permanentoverlay") - 1];
+ }
+ else
+ {
+ which = &field[sizeof("overlay") - 1];
+ }
+ if (sscanf(which, "%d", &overlayNdx) == 1)
+ {
+ if (((overlayNdx < 1) || (overlayNdx > 2)) && (warningLevel > 0))
+ {
+ ERROR2("Illegal overlay %d specified for %s\n",
+ overlayNdx, longText(key->name, XkbMessage));
+ ACTION("Ignored\n");
+ return False;
+ }
+ }
+ else if (*which == '\0')
+ overlayNdx = 1;
+ else if (warningLevel > 0)
+ {
+ ERROR2("Illegal overlay \"%s\" specified for %s\n",
+ which, longText(key->name, XkbMessage));
+ ACTION("Ignored\n");
+ return False;
+ }
+ ok = ExprResolveKeyName(value, &tmp, NULL, NULL);
+ if (!ok)
+ {
+ ERROR1("Illegal overlay key specification for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Overlay key must be specified by name\n");
+ return False;
+ }
+ if (overlayNdx == 1)
+ key->behavior.type = XkbKB_Overlay1;
+ else
+ key->behavior.type = XkbKB_Overlay2;
+ if (permanent)
+ key->behavior.type |= XkbKB_Permanent;
+
+ key->behavior.data = 0;
+ key->nameForOverlayKey = KeyNameToLong(tmp.keyName.name);
+ key->defs.defined |= _Key_Behavior;
+ }
+ else if ((uStrCaseCmp(field, "repeating") == 0) ||
+ (uStrCaseCmp(field, "repeats") == 0) ||
+ (uStrCaseCmp(field, "repeat") == 0))
+ {
+ ok = ExprResolveEnum(value, &tmp, repeatEntries);
+ if (!ok)
+ {
+ ERROR1("Illegal repeat setting for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Non-boolean repeat setting ignored\n");
+ return False;
+ }
+ key->repeat = tmp.uval;
+ key->defs.defined |= _Key_Repeat;
+ }
+ else if ((uStrCaseCmp(field, "groupswrap") == 0) ||
+ (uStrCaseCmp(field, "wrapgroups") == 0))
+ {
+ ok = ExprResolveBoolean(value, &tmp, NULL, NULL);
+ if (!ok)
+ {
+ ERROR1("Illegal groupsWrap setting for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Non-boolean value ignored\n");
+ return False;
+ }
+ if (tmp.uval)
+ key->groupInfo = XkbWrapIntoRange;
+ else
+ key->groupInfo = XkbClampIntoRange;
+ key->defs.defined |= _Key_GroupInfo;
+ }
+ else if ((uStrCaseCmp(field, "groupsclamp") == 0) ||
+ (uStrCaseCmp(field, "clampgroups") == 0))
+ {
+ ok = ExprResolveBoolean(value, &tmp, NULL, NULL);
+ if (!ok)
+ {
+ ERROR1("Illegal groupsClamp setting for %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Non-boolean value ignored\n");
+ return False;
+ }
+ if (tmp.uval)
+ key->groupInfo = XkbClampIntoRange;
+ else
+ key->groupInfo = XkbWrapIntoRange;
+ key->defs.defined |= _Key_GroupInfo;
+ }
+ else if ((uStrCaseCmp(field, "groupsredirect") == 0) ||
+ (uStrCaseCmp(field, "redirectgroups") == 0))
+ {
+ if (!ExprResolveInteger
+ (value, &tmp, SimpleLookup, (XPointer) groupNames))
+ {
+ ERROR1("Illegal group index for redirect of key %s\n",
+ longText(key->name, XkbMessage));
+ ACTION("Definition with non-integer group ignored\n");
+ return False;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbNumKbdGroups))
+ {
+ ERROR2("Out-of-range (1..%d) group for redirect of key %s\n",
+ XkbNumKbdGroups, longText(key->name, XkbMessage));
+ ERROR1("Ignoring illegal group %d\n", tmp.uval);
+ return False;
+ }
+ key->groupInfo =
+ XkbSetGroupInfo(0, XkbRedirectIntoRange, tmp.uval - 1);
+ key->defs.defined |= _Key_GroupInfo;
+ }
+ else
+ {
+ ERROR1("Unknown field %s in a symbol interpretation\n", field);
+ ACTION("Definition ignored\n");
+ ok = False;
}
return ok;
}
static int
-SetGroupName(SymbolsInfo *info,ExprDef *arrayNdx,ExprDef *value)
+SetGroupName(SymbolsInfo * info, ExprDef * arrayNdx, ExprDef * value)
{
-ExprResult tmp,name;
-
- if ((arrayNdx==NULL)&&(warningLevel>0)) {
- WARN("You must specify an index when specifying a group name\n");
- ACTION("Group name definition without array subscript ignored\n");
- return False;
- }
- if (!ExprResolveInteger(arrayNdx,&tmp,SimpleLookup,(XPointer)groupNames)) {
- ERROR("Illegal index in group name definition\n");
- ACTION("Definition with non-integer array index ignored\n");
- return False;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbNumKbdGroups)) {
- ERROR1("Attempt to specify name for illegal group (must be 1..%d)\n",
- XkbNumKbdGroups+1);
- ACTION1("Name for group %d ignored\n",tmp.uval);
- return False;
- }
- if (!ExprResolveString(value,&name,NULL,NULL)) {
- ERROR("Group name must be a string\n");
- ACTION1("Illegal name for group %d ignored\n",tmp.uval);
- return False;
- }
- info->groupNames[tmp.uval-1+info->explicit_group]=
- XkbInternAtom(NULL,name.str,False);
-
+ ExprResult tmp, name;
+
+ if ((arrayNdx == NULL) && (warningLevel > 0))
+ {
+ WARN("You must specify an index when specifying a group name\n");
+ ACTION("Group name definition without array subscript ignored\n");
+ return False;
+ }
+ if (!ExprResolveInteger
+ (arrayNdx, &tmp, SimpleLookup, (XPointer) groupNames))
+ {
+ ERROR("Illegal index in group name definition\n");
+ ACTION("Definition with non-integer array index ignored\n");
+ return False;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbNumKbdGroups))
+ {
+ ERROR1
+ ("Attempt to specify name for illegal group (must be 1..%d)\n",
+ XkbNumKbdGroups + 1);
+ ACTION1("Name for group %d ignored\n", tmp.uval);
+ return False;
+ }
+ if (!ExprResolveString(value, &name, NULL, NULL))
+ {
+ ERROR("Group name must be a string\n");
+ ACTION1("Illegal name for group %d ignored\n", tmp.uval);
+ return False;
+ }
+ info->groupNames[tmp.uval - 1 + info->explicit_group] =
+ XkbInternAtom(NULL, name.str, False);
+
return True;
}
static int
-HandleSymbolsVar(VarDef *stmt,XkbDescPtr xkb,SymbolsInfo *info)
+HandleSymbolsVar(VarDef * stmt, XkbDescPtr xkb, SymbolsInfo * info)
{
-ExprResult elem,field,tmp;
-ExprDef * arrayNdx;
-
- if (ExprResolveLhs(stmt->name,&elem,&field,&arrayNdx)==0)
- return 0; /* internal error, already reported */
- if (elem.str&&(uStrCaseCmp(elem.str,"key")==0)) {
- return SetSymbolsField(&info->dflt,xkb,field.str,arrayNdx,stmt->value,
- info);
- }
- else if ((elem.str==NULL)&&((uStrCaseCmp(field.str,"name")==0)||
- (uStrCaseCmp(field.str,"groupname")==0))) {
- return SetGroupName(info,arrayNdx,stmt->value);
- }
- else if ((elem.str==NULL)&&((uStrCaseCmp(field.str,"groupswrap")==0)||
- (uStrCaseCmp(field.str,"wrapgroups")==0))) {
- if (!ExprResolveBoolean(stmt->value,&tmp,NULL,NULL)) {
- ERROR("Illegal setting for global groupsWrap\n");
- ACTION("Non-boolean value ignored\n");
- return False;
- }
- if (tmp.uval) info->groupInfo= XkbWrapIntoRange;
- else info->groupInfo= XkbClampIntoRange;
- return True;
- }
- else if ((elem.str==NULL)&&((uStrCaseCmp(field.str,"groupsclamp")==0)||
- (uStrCaseCmp(field.str,"clampgroups")==0))) {
- if (!ExprResolveBoolean(stmt->value,&tmp,NULL,NULL)) {
- ERROR("Illegal setting for global groupsClamp\n");
- ACTION("Non-boolean value ignored\n");
- return False;
- }
- if (tmp.uval) info->groupInfo= XkbClampIntoRange;
- else info->groupInfo= XkbWrapIntoRange;
- return True;
- }
- else if ((elem.str==NULL)&&((uStrCaseCmp(field.str,"groupsredirect")==0)||
- (uStrCaseCmp(field.str,"redirectgroups")==0))) {
- if (!ExprResolveInteger(stmt->value,&tmp,
- SimpleLookup,(XPointer)groupNames)) {
- ERROR("Illegal group index for global groupsRedirect\n");
- ACTION("Definition with non-integer group ignored\n");
- return False;
- }
- if ((tmp.uval<1)||(tmp.uval>XkbNumKbdGroups)) {
- ERROR1("Out-of-range (1..%d) group for global groupsRedirect\n",
- XkbNumKbdGroups);
- ACTION1("Ignoring illegal group %d\n",tmp.uval);
- return False;
- }
- info->groupInfo= XkbSetGroupInfo(0,XkbRedirectIntoRange,tmp.uval);
- return True;
- }
- else if ((elem.str==NULL)&&(uStrCaseCmp(field.str,"allownone")==0)) {
- return SetAllowNone(&info->dflt,arrayNdx,stmt->value);
- }
- return SetActionField(xkb,elem.str,field.str,arrayNdx,stmt->value,
- &info->action);
+ ExprResult elem, field, tmp;
+ ExprDef *arrayNdx;
+
+ if (ExprResolveLhs(stmt->name, &elem, &field, &arrayNdx) == 0)
+ return 0; /* internal error, already reported */
+ if (elem.str && (uStrCaseCmp(elem.str, "key") == 0))
+ {
+ return SetSymbolsField(&info->dflt, xkb, field.str, arrayNdx,
+ stmt->value, info);
+ }
+ else if ((elem.str == NULL) && ((uStrCaseCmp(field.str, "name") == 0) ||
+ (uStrCaseCmp(field.str, "groupname") ==
+ 0)))
+ {
+ return SetGroupName(info, arrayNdx, stmt->value);
+ }
+ else if ((elem.str == NULL)
+ && ((uStrCaseCmp(field.str, "groupswrap") == 0)
+ || (uStrCaseCmp(field.str, "wrapgroups") == 0)))
+ {
+ if (!ExprResolveBoolean(stmt->value, &tmp, NULL, NULL))
+ {
+ ERROR("Illegal setting for global groupsWrap\n");
+ ACTION("Non-boolean value ignored\n");
+ return False;
+ }
+ if (tmp.uval)
+ info->groupInfo = XkbWrapIntoRange;
+ else
+ info->groupInfo = XkbClampIntoRange;
+ return True;
+ }
+ else if ((elem.str == NULL)
+ && ((uStrCaseCmp(field.str, "groupsclamp") == 0)
+ || (uStrCaseCmp(field.str, "clampgroups") == 0)))
+ {
+ if (!ExprResolveBoolean(stmt->value, &tmp, NULL, NULL))
+ {
+ ERROR("Illegal setting for global groupsClamp\n");
+ ACTION("Non-boolean value ignored\n");
+ return False;
+ }
+ if (tmp.uval)
+ info->groupInfo = XkbClampIntoRange;
+ else
+ info->groupInfo = XkbWrapIntoRange;
+ return True;
+ }
+ else if ((elem.str == NULL)
+ && ((uStrCaseCmp(field.str, "groupsredirect") == 0)
+ || (uStrCaseCmp(field.str, "redirectgroups") == 0)))
+ {
+ if (!ExprResolveInteger(stmt->value, &tmp,
+ SimpleLookup, (XPointer) groupNames))
+ {
+ ERROR("Illegal group index for global groupsRedirect\n");
+ ACTION("Definition with non-integer group ignored\n");
+ return False;
+ }
+ if ((tmp.uval < 1) || (tmp.uval > XkbNumKbdGroups))
+ {
+ ERROR1
+ ("Out-of-range (1..%d) group for global groupsRedirect\n",
+ XkbNumKbdGroups);
+ ACTION1("Ignoring illegal group %d\n", tmp.uval);
+ return False;
+ }
+ info->groupInfo = XkbSetGroupInfo(0, XkbRedirectIntoRange, tmp.uval);
+ return True;
+ }
+ else if ((elem.str == NULL) && (uStrCaseCmp(field.str, "allownone") == 0))
+ {
+ return SetAllowNone(&info->dflt, arrayNdx, stmt->value);
+ }
+ return SetActionField(xkb, elem.str, field.str, arrayNdx, stmt->value,
+ &info->action);
}
static Bool
-HandleSymbolsBody( VarDef * def,
- XkbDescPtr xkb,
- KeyInfo * key,
- SymbolsInfo * info)
+HandleSymbolsBody(VarDef * def,
+ XkbDescPtr xkb, KeyInfo * key, SymbolsInfo * info)
{
-Bool ok= True;
-ExprResult tmp,field;
-ExprDef * arrayNdx;
-
- for (;def!=NULL;def= (VarDef *)def->common.next) {
- if ((def->name)&&(def->name->type==ExprFieldRef)) {
- ok= HandleSymbolsVar(def,xkb,info);
- continue;
- }
- else {
- if (def->name==NULL) {
- if ((def->value==NULL)||(def->value->op==ExprKeysymList))
- field.str= "symbols";
- else field.str= "actions";
- arrayNdx= NULL;
- }
- else {
- ok= ExprResolveLhs(def->name,&tmp,&field,&arrayNdx);
- }
- if (ok)
- ok= SetSymbolsField(key,xkb,field.str,arrayNdx,def->value,info);
- }
+ Bool ok = True;
+ ExprResult tmp, field;
+ ExprDef *arrayNdx;
+
+ for (; def != NULL; def = (VarDef *) def->common.next)
+ {
+ if ((def->name) && (def->name->type == ExprFieldRef))
+ {
+ ok = HandleSymbolsVar(def, xkb, info);
+ continue;
+ }
+ else
+ {
+ if (def->name == NULL)
+ {
+ if ((def->value == NULL)
+ || (def->value->op == ExprKeysymList))
+ field.str = "symbols";
+ else
+ field.str = "actions";
+ arrayNdx = NULL;
+ }
+ else
+ {
+ ok = ExprResolveLhs(def->name, &tmp, &field, &arrayNdx);
+ }
+ if (ok)
+ ok = SetSymbolsField(key, xkb, field.str, arrayNdx,
+ def->value, info);
+ }
}
return ok;
}
static Bool
-SetExplicitGroup( SymbolsInfo * info,
- KeyInfo * key)
+SetExplicitGroup(SymbolsInfo * info, KeyInfo * key)
{
unsigned group = info->explicit_group;
if (group == 0)
- return True;
-
- if ((key->typesDefined|key->symsDefined|key->actsDefined) & ~1) {
- int i;
- WARN1("For the map %s an explicit group specified\n", info->name);
- WARN1("but key %s has more than one group defined\n",
- longText(key->name,XkbMessage));
- ACTION("All groups except first one will be ignored\n");
- for (i = 1; i < XkbNumKbdGroups ; i++) {
- key->numLevels[i]= 0;
- if (key->syms[i]!=NULL)
- uFree(key->syms[i]);
- key->syms[i]= (KeySym*) NULL;
- if (key->acts[i]!=NULL)
- uFree(key->acts[i]);
- key->acts[i]= (XkbAction*) NULL;
- key->types[i]= (Atom) 0;
- }
- }
- key->typesDefined = key->symsDefined = key->actsDefined = 1 << group;
-
- key->numLevels[group]= key->numLevels[0];
- key->numLevels[0]= 0;
- key->syms[group]= key->syms[0];
- key->syms[0]= (KeySym*) NULL;
- key->acts[group]= key->acts[0];
- key->acts[0]= (XkbAction*) NULL;
- key->types[group]= key->types[0];
- key->types[0]= (Atom) 0;
- return True;
+ return True;
+
+ if ((key->typesDefined | key->symsDefined | key->actsDefined) & ~1)
+ {
+ int i;
+ WARN1("For the map %s an explicit group specified\n", info->name);
+ WARN1("but key %s has more than one group defined\n",
+ longText(key->name, XkbMessage));
+ ACTION("All groups except first one will be ignored\n");
+ for (i = 1; i < XkbNumKbdGroups; i++)
+ {
+ key->numLevels[i] = 0;
+ if (key->syms[i] != NULL)
+ uFree(key->syms[i]);
+ key->syms[i] = (KeySym *) NULL;
+ if (key->acts[i] != NULL)
+ uFree(key->acts[i]);
+ key->acts[i] = (XkbAction *) NULL;
+ key->types[i] = (Atom) 0;
+ }
+ }
+ key->typesDefined = key->symsDefined = key->actsDefined = 1 << group;
+
+ key->numLevels[group] = key->numLevels[0];
+ key->numLevels[0] = 0;
+ key->syms[group] = key->syms[0];
+ key->syms[0] = (KeySym *) NULL;
+ key->acts[group] = key->acts[0];
+ key->acts[0] = (XkbAction *) NULL;
+ key->types[group] = key->types[0];
+ key->types[0] = (Atom) 0;
+ return True;
}
static int
-HandleSymbolsDef( SymbolsDef * stmt,
- XkbDescPtr xkb,
- unsigned merge,
- SymbolsInfo * info)
+HandleSymbolsDef(SymbolsDef * stmt,
+ XkbDescPtr xkb, unsigned merge, SymbolsInfo * info)
{
-KeyInfo key;
-
+ KeyInfo key;
+
InitKeyInfo(&key);
- CopyKeyInfo(&info->dflt,&key,False);
- key.defs.merge= stmt->merge;
- key.name= KeyNameToLong(stmt->keyName);
- if (!HandleSymbolsBody((VarDef *)stmt->symbols,xkb,&key,info)) {
- info->errorCount++;
- return False;
+ CopyKeyInfo(&info->dflt, &key, False);
+ key.defs.merge = stmt->merge;
+ key.name = KeyNameToLong(stmt->keyName);
+ if (!HandleSymbolsBody((VarDef *) stmt->symbols, xkb, &key, info))
+ {
+ info->errorCount++;
+ return False;
}
- if (!SetExplicitGroup(info,&key)) {
+ if (!SetExplicitGroup(info, &key))
+ {
info->errorCount++;
return False;
}
- if (!AddKeySymbols(info,&key,xkb)) {
- info->errorCount++;
- return False;
+ if (!AddKeySymbols(info, &key, xkb))
+ {
+ info->errorCount++;
+ return False;
}
return True;
}
static Bool
-HandleModMapDef( ModMapDef * def,
- XkbDescPtr xkb,
- unsigned merge,
- SymbolsInfo * info)
+HandleModMapDef(ModMapDef * def,
+ XkbDescPtr xkb, unsigned merge, SymbolsInfo * info)
{
-ExprDef * key;
-ModMapEntry tmp;
-ExprResult rtrn;
-Bool ok;
-
- if (!LookupModIndex(NULL,None,def->modifier,TypeInt,&rtrn)) {
- ERROR("Illegal modifier map definition\n");
- ACTION1("Ignoring map for non-modifier \"%s\"\n",
- XkbAtomText(NULL,def->modifier,XkbMessage));
- return False;
- }
- ok= True;
- tmp.modifier= rtrn.uval;
- for (key=def->keys;key!=NULL;key=(ExprDef *)key->common.next) {
- if ((key->op==ExprValue)&&(key->type==TypeKeyName)) {
- tmp.haveSymbol= False;
- tmp.u.keyName= KeyNameToLong(key->value.keyName);
- }
- else if (ExprResolveKeySym(key,&rtrn,NULL,NULL)) {
- tmp.haveSymbol= True;
- tmp.u.keySym= rtrn.uval;
- }
- else {
- ERROR("Modmap entries may contain only key names or keysyms\n");
- ACTION1("Illegal definition for %s modifier ignored\n",
- XkbModIndexText(tmp.modifier,XkbMessage));
- continue;
- }
-
- ok= AddModMapEntry(info,&tmp)&&ok;
+ ExprDef *key;
+ ModMapEntry tmp;
+ ExprResult rtrn;
+ Bool ok;
+
+ if (!LookupModIndex(NULL, None, def->modifier, TypeInt, &rtrn))
+ {
+ ERROR("Illegal modifier map definition\n");
+ ACTION1("Ignoring map for non-modifier \"%s\"\n",
+ XkbAtomText(NULL, def->modifier, XkbMessage));
+ return False;
+ }
+ ok = True;
+ tmp.modifier = rtrn.uval;
+ for (key = def->keys; key != NULL; key = (ExprDef *) key->common.next)
+ {
+ if ((key->op == ExprValue) && (key->type == TypeKeyName))
+ {
+ tmp.haveSymbol = False;
+ tmp.u.keyName = KeyNameToLong(key->value.keyName);
+ }
+ else if (ExprResolveKeySym(key, &rtrn, NULL, NULL))
+ {
+ tmp.haveSymbol = True;
+ tmp.u.keySym = rtrn.uval;
+ }
+ else
+ {
+ ERROR("Modmap entries may contain only key names or keysyms\n");
+ ACTION1("Illegal definition for %s modifier ignored\n",
+ XkbModIndexText(tmp.modifier, XkbMessage));
+ continue;
+ }
+
+ ok = AddModMapEntry(info, &tmp) && ok;
}
return ok;
}
static void
-HandleSymbolsFile( XkbFile * file,
- XkbDescPtr xkb,
- unsigned merge,
- SymbolsInfo * info)
+HandleSymbolsFile(XkbFile * file,
+ XkbDescPtr xkb, unsigned merge, SymbolsInfo * info)
{
-ParseCommon *stmt;
-
- info->name= uStringDup(file->name);
- stmt= file->defs;
- while (stmt) {
- switch (stmt->stmtType) {
- case StmtInclude:
- if (!HandleIncludeSymbols((IncludeStmt *)stmt,xkb,info,
- HandleSymbolsFile))
- info->errorCount++;
- break;
- case StmtSymbolsDef:
- if (!HandleSymbolsDef((SymbolsDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- case StmtVarDef:
- if (!HandleSymbolsVar((VarDef *)stmt,xkb,info))
- info->errorCount++;
- break;
- case StmtVModDef:
- if (!HandleVModDef((VModDef *)stmt,merge,&info->vmods))
- info->errorCount++;
- break;
- case StmtInterpDef:
- ERROR("Interpretation files may not include other types\n");
- ACTION("Ignoring definition of symbol interpretation\n");
- info->errorCount++;
- break;
- case StmtKeycodeDef:
- ERROR("Interpretation files may not include other types\n");
- ACTION("Ignoring definition of key name\n");
- info->errorCount++;
- break;
- case StmtModMapDef:
- if (!HandleModMapDef((ModMapDef *)stmt,xkb,merge,info))
- info->errorCount++;
- break;
- default:
- WSGO1("Unexpected statement type %d in HandleSymbolsFile\n",
- stmt->stmtType);
- break;
- }
- stmt= stmt->next;
- if (info->errorCount>10) {
+ ParseCommon *stmt;
+
+ info->name = uStringDup(file->name);
+ stmt = file->defs;
+ while (stmt)
+ {
+ switch (stmt->stmtType)
+ {
+ case StmtInclude:
+ if (!HandleIncludeSymbols((IncludeStmt *) stmt, xkb, info,
+ HandleSymbolsFile))
+ info->errorCount++;
+ break;
+ case StmtSymbolsDef:
+ if (!HandleSymbolsDef((SymbolsDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ case StmtVarDef:
+ if (!HandleSymbolsVar((VarDef *) stmt, xkb, info))
+ info->errorCount++;
+ break;
+ case StmtVModDef:
+ if (!HandleVModDef((VModDef *) stmt, merge, &info->vmods))
+ info->errorCount++;
+ break;
+ case StmtInterpDef:
+ ERROR("Interpretation files may not include other types\n");
+ ACTION("Ignoring definition of symbol interpretation\n");
+ info->errorCount++;
+ break;
+ case StmtKeycodeDef:
+ ERROR("Interpretation files may not include other types\n");
+ ACTION("Ignoring definition of key name\n");
+ info->errorCount++;
+ break;
+ case StmtModMapDef:
+ if (!HandleModMapDef((ModMapDef *) stmt, xkb, merge, info))
+ info->errorCount++;
+ break;
+ default:
+ WSGO1("Unexpected statement type %d in HandleSymbolsFile\n",
+ stmt->stmtType);
+ break;
+ }
+ stmt = stmt->next;
+ if (info->errorCount > 10)
+ {
#ifdef NOISY
- ERROR("Too many errors\n");
+ ERROR("Too many errors\n");
#endif
- ACTION1("Abandoning symbols file \"%s\"\n",file->topName);
- break;
- }
+ ACTION1("Abandoning symbols file \"%s\"\n", file->topName);
+ break;
+ }
}
return;
}
static Bool
-FindKeyForSymbol(XkbDescPtr xkb,KeySym sym,unsigned int *kc_rtrn)
+FindKeyForSymbol(XkbDescPtr xkb, KeySym sym, unsigned int *kc_rtrn)
{
-register int i, j;
-register Bool gotOne;
-
- j= 0;
- do {
- gotOne= False;
- for (i = xkb->min_key_code; i <= (int)xkb->max_key_code; i++) {
- if ( j<(int)XkbKeyNumSyms(xkb,i) ) {
+ register int i, j;
+ register Bool gotOne;
+
+ j = 0;
+ do
+ {
+ gotOne = False;
+ for (i = xkb->min_key_code; i <= (int) xkb->max_key_code; i++)
+ {
+ if (j < (int) XkbKeyNumSyms(xkb, i))
+ {
gotOne = True;
- if ((XkbKeySym(xkb,i,j)==sym)) {
- *kc_rtrn= i;
+ if ((XkbKeySym(xkb, i, j) == sym))
+ {
+ *kc_rtrn = i;
return True;
- }
+ }
}
}
j++;
- } while (gotOne);
+ }
+ while (gotOne);
return False;
}
+/**
+ * Find the given name in the xkb->map->types and return its index.
+ *
+ * @param name The atom to search for.
+ * @param type_rtrn Set to the index of the name if found.
+ *
+ * @return True if found, False otherwise.
+ */
static Bool
-FindNamedType(XkbDescPtr xkb,Atom name,unsigned *type_rtrn)
+FindNamedType(XkbDescPtr xkb, Atom name, unsigned *type_rtrn)
{
-register unsigned n;
-
- if (xkb&&xkb->map&&xkb->map->types) {
- for (n=0;n<xkb->map->num_types;n++) {
- if (xkb->map->types[n].name==(Atom)name) {
- *type_rtrn= n;
- return True;
- }
- }
+ register unsigned n;
+
+ if (xkb && xkb->map && xkb->map->types)
+ {
+ for (n = 0; n < xkb->map->num_types; n++)
+ {
+ if (xkb->map->types[n].name == (Atom) name)
+ {
+ *type_rtrn = n;
+ return True;
+ }
+ }
}
return False;
}
static Bool
-KSIsLower (KeySym ks)
+KSIsLower(KeySym ks)
{
KeySym lower, upper;
XConvertCase(ks, &lower, &upper);
@@ -1518,7 +1766,7 @@ KSIsLower (KeySym ks)
}
static Bool
-KSIsUpper (KeySym ks)
+KSIsUpper(KeySym ks)
{
KeySym lower, upper;
XConvertCase(ks, &lower, &upper);
@@ -1528,394 +1776,531 @@ KSIsUpper (KeySym ks)
return (ks == upper ? True : False);
}
+/**
+ * Assign a type to the given sym and return the Atom for the type assigned.
+ *
+ * Simple recipe:
+ * - ONE_LEVEL for width 0/1
+ * - ALPHABETIC for 2 shift levels, with lower/upercase
+ * - KEYPAD for keypad keys.
+ * - TWO_LEVEL for other 2 shift level keys.
+ * and the same for four level keys.
+ *
+ * @param width Number of sysms in syms.
+ * @param syms The keysyms for the given key (must be size width).
+ * @param typeNameRtrn Set to the Atom of the type name.
+ *
+ * @returns True if a type could be found, False otherwise.
+ */
static Bool
-FindAutomaticType(int width,KeySym *syms,Atom *typeNameRtrn, Bool *autoType)
+FindAutomaticType(int width, KeySym * syms, Atom * typeNameRtrn,
+ Bool * autoType)
{
*autoType = False;
- if ((width==1)||(width==0)) {
- *typeNameRtrn= XkbInternAtom(NULL,"ONE_LEVEL",False);
- *autoType = True;
- } else if (width == 2) {
- if ( syms && KSIsLower(syms[0]) && KSIsUpper(syms[1]) ) {
- *typeNameRtrn= XkbInternAtom(NULL,"ALPHABETIC",False);
- } else if ( syms &&
- (XkbKSIsKeypad(syms[0]) || XkbKSIsKeypad(syms[1])) ) {
- *typeNameRtrn= XkbInternAtom(NULL,"KEYPAD",False);
- *autoType = True;
- } else {
- *typeNameRtrn= XkbInternAtom(NULL,"TWO_LEVEL",False);
- *autoType = True;
- }
- } else if (width <= 4 ) {
- if ( syms && KSIsLower(syms[0]) && KSIsUpper(syms[1]) )
- if ( KSIsLower(syms[2]) && KSIsUpper(syms[3]) )
- *typeNameRtrn= XkbInternAtom(NULL,
- "FOUR_LEVEL_ALPHABETIC",False);
- else
- *typeNameRtrn= XkbInternAtom(NULL,
- "FOUR_LEVEL_SEMIALPHABETIC",False);
-
- else if ( syms && (XkbKSIsKeypad(syms[0]) || XkbKSIsKeypad(syms[1])) )
- *typeNameRtrn= XkbInternAtom(NULL,
- "FOUR_LEVEL_KEYPAD",False);
- else *typeNameRtrn= XkbInternAtom(NULL,"FOUR_LEVEL",False);
- }
- return ((width>=0)&&(width<=4));
+ if ((width == 1) || (width == 0))
+ {
+ *typeNameRtrn = XkbInternAtom(NULL, "ONE_LEVEL", False);
+ *autoType = True;
+ }
+ else if (width == 2)
+ {
+ if (syms && KSIsLower(syms[0]) && KSIsUpper(syms[1]))
+ {
+ *typeNameRtrn = XkbInternAtom(NULL, "ALPHABETIC", False);
+ }
+ else if (syms && (XkbKSIsKeypad(syms[0]) || XkbKSIsKeypad(syms[1])))
+ {
+ *typeNameRtrn = XkbInternAtom(NULL, "KEYPAD", False);
+ *autoType = True;
+ }
+ else
+ {
+ *typeNameRtrn = XkbInternAtom(NULL, "TWO_LEVEL", False);
+ *autoType = True;
+ }
+ }
+ else if (width <= 4)
+ {
+ if (syms && KSIsLower(syms[0]) && KSIsUpper(syms[1]))
+ if (KSIsLower(syms[2]) && KSIsUpper(syms[3]))
+ *typeNameRtrn =
+ XkbInternAtom(NULL, "FOUR_LEVEL_ALPHABETIC", False);
+ else
+ *typeNameRtrn = XkbInternAtom(NULL,
+ "FOUR_LEVEL_SEMIALPHABETIC",
+ False);
+
+ else if (syms && (XkbKSIsKeypad(syms[0]) || XkbKSIsKeypad(syms[1])))
+ *typeNameRtrn = XkbInternAtom(NULL, "FOUR_LEVEL_KEYPAD", False);
+ else
+ *typeNameRtrn = XkbInternAtom(NULL, "FOUR_LEVEL", False);
+ /* XXX: why not set autoType here? */
+ }
+ return ((width >= 0) && (width <= 4));
}
+/**
+ * Ensure the given KeyInfo is in a coherent state, i.e. no gaps between the
+ * groups, and reduce to one group if all groups are identical anyway.
+ */
static void
-PrepareKeyDef(KeyInfo *key)
+PrepareKeyDef(KeyInfo * key)
{
int i, j, width, defined, lastGroup;
Bool identical;
-
+
defined = key->symsDefined | key->actsDefined | key->typesDefined;
- for (i = XkbNumKbdGroups - 1; i >= 0; i--) {
- if (defined & (1<<i))
- break;
+ /* get highest group number */
+ for (i = XkbNumKbdGroups - 1; i >= 0; i--)
+ {
+ if (defined & (1 << i))
+ break;
}
lastGroup = i;
if (lastGroup == 0)
- return;
+ return;
/* If there are empty groups between non-empty ones fill them with data */
/* from the first group. */
/* We can make a wrong assumption here. But leaving gaps is worse. */
- for (i = lastGroup; i > 0; i--) {
- if (defined & (1<<i))
+ for (i = lastGroup; i > 0; i--)
+ {
+ if (defined & (1 << i))
continue;
width = key->numLevels[0];
- if (key->typesDefined & 1) {
- for (j = 0; j < width; j++) {
+ if (key->typesDefined & 1)
+ {
+ for (j = 0; j < width; j++)
+ {
key->types[i] = key->types[0];
}
key->typesDefined |= 1 << i;
}
- if ((key->actsDefined & 1) && key->acts[0]) {
- key->acts[i]= uTypedCalloc(width, XkbAction);
+ if ((key->actsDefined & 1) && key->acts[0])
+ {
+ key->acts[i] = uTypedCalloc(width, XkbAction);
if (key->acts[i] == NULL)
continue;
memcpy((void *) key->acts[i], (void *) key->acts[0],
width * sizeof(XkbAction));
key->actsDefined |= 1 << i;
}
- if ((key->symsDefined & 1) && key->syms[0]) {
- key->syms[i]= uTypedCalloc(width, KeySym);
+ if ((key->symsDefined & 1) && key->syms[0])
+ {
+ key->syms[i] = uTypedCalloc(width, KeySym);
if (key->syms[i] == NULL)
continue;
memcpy((void *) key->syms[i], (void *) key->syms[0],
width * sizeof(KeySym));
key->symsDefined |= 1 << i;
}
- if (defined & 1) {
+ if (defined & 1)
+ {
key->numLevels[i] = key->numLevels[0];
}
}
/* If all groups are completely identical remove them all */
/* exept the first one. */
identical = True;
- for (i = lastGroup; i > 0; i--) {
+ for (i = lastGroup; i > 0; i--)
+ {
if ((key->numLevels[i] != key->numLevels[0]) ||
- (key->types[i] != key->types[0])) {
+ (key->types[i] != key->types[0]))
+ {
identical = False;
break;
}
if ((key->syms[i] != key->syms[0]) &&
- (key->syms[i] == NULL || key->syms[0] == NULL ||
- memcmp((void*) key->syms[i], (void*) key->syms[0],
- sizeof(KeySym) * key->numLevels[0])) ) {
- identical = False;
- break;
- }
+ (key->syms[i] == NULL || key->syms[0] == NULL ||
+ memcmp((void *) key->syms[i], (void *) key->syms[0],
+ sizeof(KeySym) * key->numLevels[0])))
+ {
+ identical = False;
+ break;
+ }
if ((key->acts[i] != key->acts[0]) &&
- (key->acts[i] == NULL || key->acts[0] == NULL ||
- memcmp((void*) key->acts[i], (void*) key->acts[0],
- sizeof(XkbAction) * key->numLevels[0]))) {
+ (key->acts[i] == NULL || key->acts[0] == NULL ||
+ memcmp((void *) key->acts[i], (void *) key->acts[0],
+ sizeof(XkbAction) * key->numLevels[0])))
+ {
identical = False;
break;
- }
- }
- if (identical) {
- for (i = lastGroup; i > 0; i--) {
- key->numLevels[i]= 0;
- if (key->syms[i] != NULL)
- uFree(key->syms[i]);
- key->syms[i]= (KeySym*) NULL;
- if (key->acts[i] != NULL)
- uFree(key->acts[i]);
- key->acts[i]= (XkbAction*) NULL;
- key->types[i]= (Atom) 0;
- }
- key->symsDefined &= 1;
- key->actsDefined &= 1;
- key->typesDefined &= 1;
+ }
+ }
+ if (identical)
+ {
+ for (i = lastGroup; i > 0; i--)
+ {
+ key->numLevels[i] = 0;
+ if (key->syms[i] != NULL)
+ uFree(key->syms[i]);
+ key->syms[i] = (KeySym *) NULL;
+ if (key->acts[i] != NULL)
+ uFree(key->acts[i]);
+ key->acts[i] = (XkbAction *) NULL;
+ key->types[i] = (Atom) 0;
+ }
+ key->symsDefined &= 1;
+ key->actsDefined &= 1;
+ key->typesDefined &= 1;
}
return;
}
+/**
+ * Copy the KeyInfo into result.
+ *
+ * This function recurses.
+ */
static Bool
-CopySymbolsDef(XkbFileInfo *result,KeyInfo *key,int start_from)
+CopySymbolsDef(XkbFileInfo * result, KeyInfo * key, int start_from)
{
-register int i;
-unsigned okc,kc,width,tmp,nGroups;
-XkbKeyTypePtr type;
-Bool haveActions,autoType,useAlias;
-KeySym * outSyms;
-XkbAction * outActs;
-XkbDescPtr xkb;
-unsigned types[XkbNumKbdGroups];
-
- xkb= result->xkb;
- useAlias= (start_from==0);
- if (!FindNamedKey(xkb,key->name,&kc,useAlias,CreateKeyNames(xkb),
- start_from)) {
- if ((start_from==0)&&(warningLevel>=5)) {
- WARN2("Key %s not found in %s keycodes\n",
- longText(key->name,XkbMessage),
- XkbAtomText(NULL,xkb->names->keycodes,XkbMessage));
- ACTION("Symbols ignored\n");
- }
- return False;
- }
-
- haveActions= False;
- for (i=width=nGroups=0;i<XkbNumKbdGroups;i++) {
- if (((i+1)>nGroups)&&(((key->symsDefined|key->actsDefined)&(1<<i))||
- (key->typesDefined)&(1<<i)))
- nGroups= i+1;
- if (key->acts[i])
- haveActions= True;
- autoType= False;
- if (key->types[i]==None) {
- if (key->dfltType!=None)
- key->types[i]= key->dfltType;
- else if (FindAutomaticType(key->numLevels[i],key->syms[i],
- &key->types[i], &autoType)) {
- }
- else {
- if (warningLevel>=5) {
- WARN1("No automatic type for %d symbols\n",
- (unsigned int)key->numLevels[i]);
- ACTION3("Using %s for the %s key (keycode %d)\n",
- XkbAtomText(NULL,key->types[i],XkbMessage),
- longText(key->name,XkbMessage),kc);
- }
- }
- }
- if (FindNamedType(xkb,key->types[i],&types[i])) {
- if (!autoType || key->numLevels[i] > 2)
- xkb->server->explicit[kc]|= (1<<i);
- }
- else {
- if (warningLevel>=3) {
- WARN1("Type \"%s\" is not defined\n",
- XkbAtomText(NULL,key->types[i],XkbMessage));
- ACTION2("Using TWO_LEVEL for the %s key (keycode %d)\n",
- longText(key->name,XkbMessage),kc);
- }
- types[i]= XkbTwoLevelIndex;
- }
- type= &xkb->map->types[types[i]];
- if (type->num_levels<key->numLevels[i]) {
- if (warningLevel>0) {
- WARN4("Type \"%s\" has %d levels, but %s has %d symbols\n",
- XkbAtomText(NULL,type->name,XkbMessage),
- (unsigned int)type->num_levels,
- longText(key->name,XkbMessage),
- (unsigned int)key->numLevels[i]);
- ACTION("Ignoring extra symbols\n");
- }
- key->numLevels[i]= type->num_levels;
- }
- if (key->numLevels[i]>width)
- width= key->numLevels[i];
- if (type->num_levels>width)
- width= type->num_levels;
- }
-
- i= width*nGroups;
- outSyms= XkbResizeKeySyms(xkb,kc,i);
- if (outSyms==NULL) {
- WSGO2("Could not enlarge symbols for %s (keycode %d)\n",
- longText(key->name,XkbMessage),kc);
- return False;
- }
- if (haveActions) {
- outActs= XkbResizeKeyActions(xkb,kc,i);
- if (outActs==NULL) {
- WSGO2("Could not enlarge actions for %s (key %d)\n",
- longText(key->name,XkbMessage),kc);
- return False;
- }
- xkb->server->explicit[kc]|= XkbExplicitInterpretMask;
- }
- else outActs= NULL;
- if (key->defs.defined&_Key_GroupInfo)
- i= key->groupInfo;
- else i= xkb->map->key_sym_map[kc].group_info;
- xkb->map->key_sym_map[kc].group_info= XkbSetNumGroups(i,nGroups);
- xkb->map->key_sym_map[kc].width= width;
- for (i=0;i<nGroups;i++) {
- xkb->map->key_sym_map[kc].kt_index[i]= types[i];
- if (key->syms[i]!=NULL) {
- for (tmp=0;tmp<width;tmp++) {
- if (tmp<key->numLevels[i])
- outSyms[tmp]= key->syms[i][tmp];
- else outSyms[tmp]= NoSymbol;
- if ((outActs!=NULL)&&(key->acts[i]!=NULL)) {
- if (tmp<key->numLevels[i])
- outActs[tmp]= key->acts[i][tmp];
- else outActs[tmp].type= XkbSA_NoAction;
- }
- }
- }
- outSyms+= width;
- if (outActs)
- outActs+= width;
- }
- switch (key->behavior.type&XkbKB_OpMask) {
- case XkbKB_Default:
- break;
- case XkbKB_Overlay1:
- case XkbKB_Overlay2:
- /* find key by name! */
- if (!FindNamedKey(xkb,key->nameForOverlayKey,&okc,True,
- CreateKeyNames(xkb),0)) {
- if (warningLevel>=1) {
- WARN2("Key %s not found in %s keycodes\n",
- longText(key->nameForOverlayKey,XkbMessage),
- XkbAtomText(NULL,xkb->names->keycodes,XkbMessage));
- ACTION1("Not treating %s as an overlay key \n",
- longText(key->name,XkbMessage));
- }
- break;
- }
- key->behavior.data= okc;
- default:
- xkb->server->behaviors[kc]= key->behavior;
- xkb->server->explicit[kc]|= XkbExplicitBehaviorMask;
- break;
- }
- if (key->defs.defined&_Key_VModMap) {
- xkb->server->vmodmap[kc]= key->vmodmap;
- xkb->server->explicit[kc]|= XkbExplicitVModMapMask;
- }
- if (key->repeat!=RepeatUndefined) {
- if (key->repeat==RepeatYes)
- xkb->ctrls->per_key_repeat[kc/8]|= (1<<(kc%8));
- else xkb->ctrls->per_key_repeat[kc/8]&= ~(1<<(kc%8));
- xkb->server->explicit[kc]|= XkbExplicitAutoRepeatMask;
- }
- CopySymbolsDef(result,key,kc+1);
+ register int i;
+ unsigned okc, kc, width, tmp, nGroups;
+ XkbKeyTypePtr type;
+ Bool haveActions, autoType, useAlias;
+ KeySym *outSyms;
+ XkbAction *outActs;
+ XkbDescPtr xkb;
+ unsigned types[XkbNumKbdGroups];
+
+ xkb = result->xkb;
+ useAlias = (start_from == 0);
+
+ /* get the keycode for the key. */
+ if (!FindNamedKey(xkb, key->name, &kc, useAlias, CreateKeyNames(xkb),
+ start_from))
+ {
+ if ((start_from == 0) && (warningLevel >= 5))
+ {
+ WARN2("Key %s not found in %s keycodes\n",
+ longText(key->name, XkbMessage),
+ XkbAtomText(NULL, xkb->names->keycodes, XkbMessage));
+ ACTION("Symbols ignored\n");
+ }
+ return False;
+ }
+
+ haveActions = False;
+ for (i = width = nGroups = 0; i < XkbNumKbdGroups; i++)
+ {
+ if (((i + 1) > nGroups)
+ && (((key->symsDefined | key->actsDefined) & (1 << i))
+ || (key->typesDefined) & (1 << i)))
+ nGroups = i + 1;
+ if (key->acts[i])
+ haveActions = True;
+ autoType = False;
+ /* Assign the type to the key, if it is missing. */
+ if (key->types[i] == None)
+ {
+ if (key->dfltType != None)
+ key->types[i] = key->dfltType;
+ else if (FindAutomaticType(key->numLevels[i], key->syms[i],
+ &key->types[i], &autoType))
+ {
+ }
+ else
+ {
+ if (warningLevel >= 5)
+ {
+ WARN1("No automatic type for %d symbols\n",
+ (unsigned int) key->numLevels[i]);
+ ACTION3("Using %s for the %s key (keycode %d)\n",
+ XkbAtomText(NULL, key->types[i],
+ XkbMessage),
+ longText(key->name, XkbMessage), kc);
+ }
+ }
+ }
+ if (FindNamedType(xkb, key->types[i], &types[i]))
+ {
+ if (!autoType || key->numLevels[i] > 2)
+ xkb->server->explicit[kc] |= (1 << i);
+ }
+ else
+ {
+ if (warningLevel >= 3)
+ {
+ WARN1("Type \"%s\" is not defined\n",
+ XkbAtomText(NULL, key->types[i], XkbMessage));
+ ACTION2("Using TWO_LEVEL for the %s key (keycode %d)\n",
+ longText(key->name, XkbMessage), kc);
+ }
+ types[i] = XkbTwoLevelIndex;
+ }
+ /* if the type specifies less syms than the key has, shrink the key */
+ type = &xkb->map->types[types[i]];
+ if (type->num_levels < key->numLevels[i])
+ {
+ if (warningLevel > 0)
+ {
+ WARN4
+ ("Type \"%s\" has %d levels, but %s has %d symbols\n",
+ XkbAtomText(NULL, type->name, XkbMessage),
+ (unsigned int) type->num_levels,
+ longText(key->name, XkbMessage),
+ (unsigned int) key->numLevels[i]);
+ ACTION("Ignoring extra symbols\n");
+ }
+ key->numLevels[i] = type->num_levels;
+ }
+ if (key->numLevels[i] > width)
+ width = key->numLevels[i];
+ if (type->num_levels > width)
+ width = type->num_levels;
+ }
+
+ /* width is now the largest width found */
+
+ i = width * nGroups;
+ outSyms = XkbResizeKeySyms(xkb, kc, i);
+ if (outSyms == NULL)
+ {
+ WSGO2("Could not enlarge symbols for %s (keycode %d)\n",
+ longText(key->name, XkbMessage), kc);
+ return False;
+ }
+ if (haveActions)
+ {
+ outActs = XkbResizeKeyActions(xkb, kc, i);
+ if (outActs == NULL)
+ {
+ WSGO2("Could not enlarge actions for %s (key %d)\n",
+ longText(key->name, XkbMessage), kc);
+ return False;
+ }
+ xkb->server->explicit[kc] |= XkbExplicitInterpretMask;
+ }
+ else
+ outActs = NULL;
+ if (key->defs.defined & _Key_GroupInfo)
+ i = key->groupInfo;
+ else
+ i = xkb->map->key_sym_map[kc].group_info;
+
+ xkb->map->key_sym_map[kc].group_info = XkbSetNumGroups(i, nGroups);
+ xkb->map->key_sym_map[kc].width = width;
+ for (i = 0; i < nGroups; i++)
+ {
+ /* assign kt_index[i] to the index of the type in map->types.
+ * kt_index[i] may have been set by a previous run (if we have two
+ * layouts specified). Let's not overwrite it with the ONE_LEVEL
+ * default group if we dont even have keys for this group anyway.
+ *
+ * FIXME: There should be a better fix for this.
+ */
+ if (key->numLevels[i])
+ xkb->map->key_sym_map[kc].kt_index[i] = types[i];
+ if (key->syms[i] != NULL)
+ {
+ /* fill key to "width" symbols*/
+ for (tmp = 0; tmp < width; tmp++)
+ {
+ if (tmp < key->numLevels[i])
+ outSyms[tmp] = key->syms[i][tmp];
+ else
+ outSyms[tmp] = NoSymbol;
+ if ((outActs != NULL) && (key->acts[i] != NULL))
+ {
+ if (tmp < key->numLevels[i])
+ outActs[tmp] = key->acts[i][tmp];
+ else
+ outActs[tmp].type = XkbSA_NoAction;
+ }
+ }
+ }
+ outSyms += width;
+ if (outActs)
+ outActs += width;
+ }
+ switch (key->behavior.type & XkbKB_OpMask)
+ {
+ case XkbKB_Default:
+ break;
+ case XkbKB_Overlay1:
+ case XkbKB_Overlay2:
+ /* find key by name! */
+ if (!FindNamedKey(xkb, key->nameForOverlayKey, &okc, True,
+ CreateKeyNames(xkb), 0))
+ {
+ if (warningLevel >= 1)
+ {
+ WARN2("Key %s not found in %s keycodes\n",
+ longText(key->nameForOverlayKey, XkbMessage),
+ XkbAtomText(NULL, xkb->names->keycodes, XkbMessage));
+ ACTION1("Not treating %s as an overlay key \n",
+ longText(key->name, XkbMessage));
+ }
+ break;
+ }
+ key->behavior.data = okc;
+ default:
+ xkb->server->behaviors[kc] = key->behavior;
+ xkb->server->explicit[kc] |= XkbExplicitBehaviorMask;
+ break;
+ }
+ if (key->defs.defined & _Key_VModMap)
+ {
+ xkb->server->vmodmap[kc] = key->vmodmap;
+ xkb->server->explicit[kc] |= XkbExplicitVModMapMask;
+ }
+ if (key->repeat != RepeatUndefined)
+ {
+ if (key->repeat == RepeatYes)
+ xkb->ctrls->per_key_repeat[kc / 8] |= (1 << (kc % 8));
+ else
+ xkb->ctrls->per_key_repeat[kc / 8] &= ~(1 << (kc % 8));
+ xkb->server->explicit[kc] |= XkbExplicitAutoRepeatMask;
+ }
+
+ /* do the same thing for the next key */
+ CopySymbolsDef(result, key, kc + 1);
return True;
}
static Bool
-CopyModMapDef(XkbFileInfo *result,ModMapEntry *entry)
+CopyModMapDef(XkbFileInfo * result, ModMapEntry * entry)
{
-unsigned kc;
-XkbDescPtr xkb;
-
- xkb= result->xkb;
- if ((!entry->haveSymbol)&&(!FindNamedKey(xkb,entry->u.keyName,&kc,True,
- CreateKeyNames(xkb),0))) {
- if (warningLevel>=5) {
- WARN2("Key %s not found in %s keycodes\n",
- longText(entry->u.keyName,XkbMessage),
- XkbAtomText(NULL,xkb->names->keycodes,XkbMessage));
- ACTION1("Modifier map entry for %s not updated\n",
- XkbModIndexText(entry->modifier,XkbMessage));
- }
- return False;
- }
- else if (entry->haveSymbol&&(!FindKeyForSymbol(xkb,entry->u.keySym,&kc))) {
- if (warningLevel>5) {
- WARN2("Key \"%s\" not found in %s symbol map\n",
- XkbKeysymText(entry->u.keySym,XkbMessage),
- XkbAtomText(NULL,xkb->names->symbols,XkbMessage));
- ACTION1("Modifier map entry for %s not updated\n",
- XkbModIndexText(entry->modifier,XkbMessage));
- }
- return False;
- }
- xkb->map->modmap[kc]|= (1<<entry->modifier);
+ unsigned kc;
+ XkbDescPtr xkb;
+
+ xkb = result->xkb;
+ if ((!entry->haveSymbol)
+ &&
+ (!FindNamedKey
+ (xkb, entry->u.keyName, &kc, True, CreateKeyNames(xkb), 0)))
+ {
+ if (warningLevel >= 5)
+ {
+ WARN2("Key %s not found in %s keycodes\n",
+ longText(entry->u.keyName, XkbMessage),
+ XkbAtomText(NULL, xkb->names->keycodes, XkbMessage));
+ ACTION1("Modifier map entry for %s not updated\n",
+ XkbModIndexText(entry->modifier, XkbMessage));
+ }
+ return False;
+ }
+ else if (entry->haveSymbol
+ && (!FindKeyForSymbol(xkb, entry->u.keySym, &kc)))
+ {
+ if (warningLevel > 5)
+ {
+ WARN2("Key \"%s\" not found in %s symbol map\n",
+ XkbKeysymText(entry->u.keySym, XkbMessage),
+ XkbAtomText(NULL, xkb->names->symbols, XkbMessage));
+ ACTION1("Modifier map entry for %s not updated\n",
+ XkbModIndexText(entry->modifier, XkbMessage));
+ }
+ return False;
+ }
+ xkb->map->modmap[kc] |= (1 << entry->modifier);
return True;
}
+/**
+ * Handle the xkb_symbols section of an xkb file.
+ *
+ * @param file The parsed xkb_symbols section of the xkb file.
+ * @param result Handle to the data to store the result in.
+ * @param merge Merge strategy (e.g. MergeOverride).
+ */
Bool
-CompileSymbols(XkbFile *file,XkbFileInfo *result,unsigned merge)
+CompileSymbols(XkbFile * file, XkbFileInfo * result, unsigned merge)
{
-register int i;
-SymbolsInfo info;
-XkbDescPtr xkb;
+ register int i;
+ SymbolsInfo info;
+ XkbDescPtr xkb;
- xkb= result->xkb;
- InitSymbolsInfo(&info,xkb);
- info.dflt.defs.fileID= file->id;
- info.dflt.defs.merge= merge;
- HandleSymbolsFile(file,xkb,merge,&info);
+ xkb = result->xkb;
+ InitSymbolsInfo(&info, xkb);
+ info.dflt.defs.fileID = file->id;
+ info.dflt.defs.merge = merge;
+ HandleSymbolsFile(file, xkb, merge, &info);
if (info.nKeys == 0)
return True;
- if (info.errorCount==0) {
- KeyInfo *key;
- if (XkbAllocNames(xkb,XkbSymbolsNameMask|XkbGroupNamesMask,0,0)
- !=Success) {
- WSGO("Can not allocate names in CompileSymbols\n");
- ACTION("Symbols not added\n");
- return False;
- }
- if(XkbAllocClientMap(xkb,XkbKeySymsMask|XkbModifierMapMask,0)!=Success){
- WSGO("Could not allocate client map in CompileSymbols\n");
- ACTION("Symbols not added\n");
- return False;
- }
- if (XkbAllocServerMap(xkb,XkbAllServerInfoMask,32)!=Success) {
- WSGO("Could not allocate server map in CompileSymbols\n");
- ACTION("Symbols not added\n");
- return False;
- }
- if (XkbAllocControls(xkb,XkbPerKeyRepeatMask)!=Success) {
- WSGO("Could not allocate controls in CompileSymbols\n");
- ACTION("Symbols not added\n");
- return False;
- }
- xkb->names->symbols= XkbInternAtom(xkb->dpy,info.name,False);
- if (info.aliases)
- ApplyAliases(xkb,False,&info.aliases);
- for (i=0;i<XkbNumKbdGroups;i++) {
- if (info.groupNames[i]!=None)
- xkb->names->groups[i]= info.groupNames[i];
- }
- for (key=info.keys,i=0;i<info.nKeys;i++,key++) {
- PrepareKeyDef(key);
- }
- for (key=info.keys,i=0;i<info.nKeys;i++,key++) {
- if (!CopySymbolsDef(result,key,0))
- info.errorCount++;
- }
- if (warningLevel>3) {
- for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) {
- if (xkb->names->keys[i].name[0]=='\0')
- continue;
- if (XkbKeyNumGroups(xkb,i)<1) {
- char buf[5];
- memcpy(buf,xkb->names->keys[i].name,4);
- buf[4]= '\0';
- WARN2("No symbols defined for <%s> (keycode %d)\n",buf,i);
- }
- }
- }
- if (info.modMap) {
- ModMapEntry *mm,*next;
- for (mm=info.modMap;mm!=NULL;mm=next) {
- if (!CopyModMapDef(result,mm))
- info.errorCount++;
- next= (ModMapEntry *)mm->defs.next;
- }
- }
- return True;
+ if (info.errorCount == 0)
+ {
+ KeyInfo *key;
+
+ /* alloc memory in the xkb struct */
+ if (XkbAllocNames(xkb, XkbSymbolsNameMask | XkbGroupNamesMask, 0, 0)
+ != Success)
+ {
+ WSGO("Can not allocate names in CompileSymbols\n");
+ ACTION("Symbols not added\n");
+ return False;
+ }
+ if (XkbAllocClientMap(xkb, XkbKeySymsMask | XkbModifierMapMask, 0)
+ != Success)
+ {
+ WSGO("Could not allocate client map in CompileSymbols\n");
+ ACTION("Symbols not added\n");
+ return False;
+ }
+ if (XkbAllocServerMap(xkb, XkbAllServerInfoMask, 32) != Success)
+ {
+ WSGO("Could not allocate server map in CompileSymbols\n");
+ ACTION("Symbols not added\n");
+ return False;
+ }
+ if (XkbAllocControls(xkb, XkbPerKeyRepeatMask) != Success)
+ {
+ WSGO("Could not allocate controls in CompileSymbols\n");
+ ACTION("Symbols not added\n");
+ return False;
+ }
+
+ /* now copy info into xkb. */
+ xkb->names->symbols = XkbInternAtom(xkb->dpy, info.name, False);
+ if (info.aliases)
+ ApplyAliases(xkb, False, &info.aliases);
+ for (i = 0; i < XkbNumKbdGroups; i++)
+ {
+ if (info.groupNames[i] != None)
+ xkb->names->groups[i] = info.groupNames[i];
+ }
+ /* sanitize keys */
+ for (key = info.keys, i = 0; i < info.nKeys; i++, key++)
+ {
+ PrepareKeyDef(key);
+ }
+ /* copy! */
+ for (key = info.keys, i = 0; i < info.nKeys; i++, key++)
+ {
+ if (!CopySymbolsDef(result, key, 0))
+ info.errorCount++;
+ }
+ if (warningLevel > 3)
+ {
+ for (i = xkb->min_key_code; i <= xkb->max_key_code; i++)
+ {
+ if (xkb->names->keys[i].name[0] == '\0')
+ continue;
+ if (XkbKeyNumGroups(xkb, i) < 1)
+ {
+ char buf[5];
+ memcpy(buf, xkb->names->keys[i].name, 4);
+ buf[4] = '\0';
+ WARN2
+ ("No symbols defined for <%s> (keycode %d)\n",
+ buf, i);
+ }
+ }
+ }
+ if (info.modMap)
+ {
+ ModMapEntry *mm, *next;
+ for (mm = info.modMap; mm != NULL; mm = next)
+ {
+ if (!CopyModMapDef(result, mm))
+ info.errorCount++;
+ next = (ModMapEntry *) mm->defs.next;
+ }
+ }
+ return True;
}
return False;
}
diff --git a/app/xkbcomp/tokens.h b/app/xkbcomp/tokens.h
index c63c393a7..970f3d4de 100644
--- a/app/xkbcomp/tokens.h
+++ b/app/xkbcomp/tokens.h
@@ -1,4 +1,3 @@
-/* $Xorg: tokens.h,v 1.3 2000/08/17 19:54:33 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -97,4 +96,9 @@
#define FUNCTION_KEYS 76
#define ALTERNATE_GROUP 77
+extern Atom tok_ONE_LEVEL;
+extern Atom tok_TWO_LEVEL;
+extern Atom tok_ALPHABETIC;
+extern Atom tok_KEYPAD;
+
#endif
diff --git a/app/xkbcomp/utils.c b/app/xkbcomp/utils.c
index aa4dc8987..55efbe11f 100644
--- a/app/xkbcomp/utils.c
+++ b/app/xkbcomp/utils.c
@@ -1,11 +1,10 @@
/*\
- * $Xorg: utils.c,v 1.4 2000/08/17 19:54:33 cpqbld Exp $
*
- * COPYRIGHT 1990
- * DIGITAL EQUIPMENT CORPORATION
- * MAYNARD, MASSACHUSETTS
- * ALL RIGHTS RESERVED.
+ * COPYRIGHT 1990
+ * DIGITAL EQUIPMENT CORPORATION
+ * MAYNARD, MASSACHUSETTS
+ * ALL RIGHTS RESERVED.
*
* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
* SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
@@ -24,8 +23,7 @@
* documentation, and that the name of Digital Equipment Corporation not be
* used in advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
- \*/
-/* $XFree86: xc/programs/xkbcomp/utils.c,v 3.6 2001/07/25 15:05:24 dawes Exp $ */
+ \*/
#include "utils.h"
#include <ctype.h>
@@ -37,43 +35,46 @@
Opaque
uAlloc(unsigned size)
{
- return((Opaque)malloc(size));
+ return ((Opaque) malloc(size));
}
/***====================================================================***/
Opaque
-uCalloc(unsigned n,unsigned size)
+uCalloc(unsigned n, unsigned size)
{
- return((Opaque)calloc(n,size));
+ return ((Opaque) calloc(n, size));
}
/***====================================================================***/
Opaque
-uRealloc(Opaque old,unsigned newSize)
+uRealloc(Opaque old, unsigned newSize)
{
- if (old==NULL)
- return((Opaque)malloc(newSize));
- else return((Opaque)realloc((char *)old,newSize));
+ if (old == NULL)
+ return ((Opaque) malloc(newSize));
+ else
+ return ((Opaque) realloc((char *) old, newSize));
}
/***====================================================================***/
Opaque
-uRecalloc(Opaque old,unsigned nOld,unsigned nNew,unsigned itemSize)
+uRecalloc(Opaque old, unsigned nOld, unsigned nNew, unsigned itemSize)
{
-char *rtrn;
-
- if (old==NULL)
- rtrn= (char *)calloc(nNew,itemSize);
- else {
- rtrn= (char *)realloc((char *)old,nNew*itemSize);
- if ((rtrn)&&(nNew>nOld)) {
- bzero(&rtrn[nOld*itemSize],(nNew-nOld)*itemSize);
- }
+ char *rtrn;
+
+ if (old == NULL)
+ rtrn = (char *) calloc(nNew, itemSize);
+ else
+ {
+ rtrn = (char *) realloc((char *) old, nNew * itemSize);
+ if ((rtrn) && (nNew > nOld))
+ {
+ bzero(&rtrn[nOld * itemSize], (nNew - nOld) * itemSize);
+ }
}
- return (Opaque)rtrn;
+ return (Opaque) rtrn;
}
/***====================================================================***/
@@ -81,8 +82,8 @@ char *rtrn;
void
uFree(Opaque ptr)
{
- if (ptr!=(Opaque)NULL)
- free((char *)ptr);
+ if (ptr != (Opaque) NULL)
+ free((char *) ptr);
return;
}
@@ -90,51 +91,58 @@ uFree(Opaque ptr)
/*** FUNCTION ENTRY TRACKING ***/
/***====================================================================***/
-static FILE *entryFile= NULL;
- int uEntryLevel;
+static FILE *entryFile = NULL;
+int uEntryLevel;
Boolean
uSetEntryFile(char *name)
{
- if ((entryFile!=NULL)&&(entryFile!=stderr)) {
- fprintf(entryFile,"switching to %s\n",name?name:"stderr");
- fclose(entryFile);
+ if ((entryFile != NULL) && (entryFile != stderr))
+ {
+ fprintf(entryFile, "switching to %s\n", name ? name : "stderr");
+ fclose(entryFile);
}
- if (name!=NullString) entryFile= fopen(name,"w");
- else entryFile= stderr;
- if (entryFile==NULL) {
- entryFile= stderr;
- return(False);
+ if (name != NullString)
+ entryFile = fopen(name, "w");
+ else
+ entryFile = stderr;
+ if (entryFile == NULL)
+ {
+ entryFile = stderr;
+ return (False);
}
- return(True);
+ return (True);
}
void
-uEntry(int l,char *s,...)
+uEntry(int l, char *s, ...)
{
-int i;
-va_list args;
+ int i;
+ va_list args;
- for (i=0;i<uEntryLevel;i++) {
- putc(' ',entryFile);
+ for (i = 0; i < uEntryLevel; i++)
+ {
+ putc(' ', entryFile);
}
va_start(args, s);
- vfprintf(entryFile,s,args);
+ vfprintf(entryFile, s, args);
va_end(args);
- uEntryLevel+= l;
+ uEntryLevel += l;
}
void
-uExit(int l,char *rtVal)
+uExit(int l, char *rtVal)
{
-int i;
-
- uEntryLevel-= l;
- if (uEntryLevel<0) uEntryLevel= 0;
- for (i=0;i<uEntryLevel;i++) {
- putc(' ',entryFile);
+ int i;
+
+ uEntryLevel -= l;
+ if (uEntryLevel < 0)
+ uEntryLevel = 0;
+ for (i = 0; i < uEntryLevel; i++)
+ {
+ putc(' ', entryFile);
}
- fprintf(entryFile,"---> %p\n",rtVal);
+ fprintf(entryFile, "---> %p\n", rtVal);
return;
}
@@ -142,83 +150,92 @@ int i;
/*** PRINT FUNCTIONS ***/
/***====================================================================***/
- FILE *uDebugFile= NULL;
- int uDebugIndentLevel= 0;
- int uDebugIndentSize= 4;
+FILE *uDebugFile = NULL;
+int uDebugIndentLevel = 0;
+int uDebugIndentSize = 4;
Boolean
uSetDebugFile(char *name)
{
- if ((uDebugFile!=NULL)&&(uDebugFile!=stderr)) {
- fprintf(uDebugFile,"switching to %s\n",name?name:"stderr");
- fclose(uDebugFile);
+ if ((uDebugFile != NULL) && (uDebugFile != stderr))
+ {
+ fprintf(uDebugFile, "switching to %s\n", name ? name : "stderr");
+ fclose(uDebugFile);
}
- if (name!=NullString) uDebugFile= fopen(name,"w");
- else uDebugFile= stderr;
- if (uDebugFile==NULL) {
- uDebugFile= stderr;
- return(False);
+ if (name != NullString)
+ uDebugFile = fopen(name, "w");
+ else
+ uDebugFile = stderr;
+ if (uDebugFile == NULL)
+ {
+ uDebugFile = stderr;
+ return (False);
}
- return(True);
+ return (True);
}
void
-uDebug(char *s,...)
+uDebug(char *s, ...)
{
-int i;
-va_list args;
+ int i;
+ va_list args;
- for (i=(uDebugIndentLevel*uDebugIndentSize);i>0;i--) {
- putc(' ',uDebugFile);
+ for (i = (uDebugIndentLevel * uDebugIndentSize); i > 0; i--)
+ {
+ putc(' ', uDebugFile);
}
va_start(args, s);
- vfprintf(uDebugFile,s,args);
+ vfprintf(uDebugFile, s, args);
va_end(args);
fflush(uDebugFile);
}
void
-uDebugNOI(char *s,...)
+uDebugNOI(char *s, ...)
{
-va_list args;
+ va_list args;
va_start(args, s);
- vfprintf(uDebugFile,s,args);
+ vfprintf(uDebugFile, s, args);
va_end(args);
fflush(uDebugFile);
}
/***====================================================================***/
-static FILE *errorFile= NULL;
-static int outCount= 0;
-static char *preMsg= NULL;
-static char *postMsg= NULL;
-static char *prefix= NULL;
+static FILE *errorFile = NULL;
+static int outCount = 0;
+static char *preMsg = NULL;
+static char *postMsg = NULL;
+static char *prefix = NULL;
Boolean
uSetErrorFile(char *name)
{
- if ((errorFile!=NULL)&&(errorFile!=stderr)) {
- fprintf(errorFile,"switching to %s\n",name?name:"stderr");
- fclose(errorFile);
+ if ((errorFile != NULL) && (errorFile != stderr))
+ {
+ fprintf(errorFile, "switching to %s\n", name ? name : "stderr");
+ fclose(errorFile);
}
- if (name!=NullString) errorFile= fopen(name,"w");
- else errorFile= stderr;
- if (errorFile==NULL) {
- errorFile= stderr;
- return(False);
+ if (name != NullString)
+ errorFile = fopen(name, "w");
+ else
+ errorFile = stderr;
+ if (errorFile == NULL)
+ {
+ errorFile = stderr;
+ return (False);
}
- return(True);
+ return (True);
}
void
uInformation(const char *s, ...)
{
-va_list args;
+ va_list args;
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
fflush(errorFile);
}
@@ -228,13 +245,13 @@ va_list args;
void
uAction(const char *s, ...)
{
-va_list args;
+ va_list args;
- if (prefix!=NULL)
- fprintf(errorFile,"%s",prefix);
- fprintf(errorFile," ");
+ if (prefix != NULL)
+ fprintf(errorFile, "%s", prefix);
+ fprintf(errorFile, " ");
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
fflush(errorFile);
}
@@ -244,15 +261,15 @@ va_list args;
void
uWarning(const char *s, ...)
{
-va_list args;
+ va_list args;
- if ((outCount==0)&&(preMsg!=NULL))
- fprintf(errorFile,"%s\n",preMsg);
- if (prefix!=NULL)
- fprintf(errorFile,"%s",prefix);
- fprintf(errorFile,"Warning: ");
+ if ((outCount == 0) && (preMsg != NULL))
+ fprintf(errorFile, "%s\n", preMsg);
+ if (prefix != NULL)
+ fprintf(errorFile, "%s", prefix);
+ fprintf(errorFile, "Warning: ");
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
fflush(errorFile);
outCount++;
@@ -263,15 +280,15 @@ va_list args;
void
uError(const char *s, ...)
{
-va_list args;
+ va_list args;
- if ((outCount==0)&&(preMsg!=NULL))
- fprintf(errorFile,"%s\n",preMsg);
- if (prefix!=NULL)
- fprintf(errorFile,"%s",prefix);
- fprintf(errorFile,"Error: ");
+ if ((outCount == 0) && (preMsg != NULL))
+ fprintf(errorFile, "%s\n", preMsg);
+ if (prefix != NULL)
+ fprintf(errorFile, "%s", prefix);
+ fprintf(errorFile, "Error: ");
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
fflush(errorFile);
outCount++;
@@ -282,17 +299,17 @@ va_list args;
void
uFatalError(const char *s, ...)
{
-va_list args;
+ va_list args;
- if ((outCount==0)&&(preMsg!=NULL))
- fprintf(errorFile,"%s\n",preMsg);
- if (prefix!=NULL)
- fprintf(errorFile,"%s",prefix);
- fprintf(errorFile,"Fatal Error: ");
+ if ((outCount == 0) && (preMsg != NULL))
+ fprintf(errorFile, "%s\n", preMsg);
+ if (prefix != NULL)
+ fprintf(errorFile, "%s", prefix);
+ fprintf(errorFile, "Fatal Error: ");
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
- fprintf(errorFile," Exiting\n");
+ fprintf(errorFile, " Exiting\n");
fflush(errorFile);
outCount++;
exit(1);
@@ -304,15 +321,15 @@ va_list args;
void
uInternalError(const char *s, ...)
{
-va_list args;
+ va_list args;
- if ((outCount==0)&&(preMsg!=NULL))
- fprintf(errorFile,"%s\n",preMsg);
- if (prefix!=NULL)
- fprintf(errorFile,"%s",prefix);
- fprintf(errorFile,"Internal error: ");
+ if ((outCount == 0) && (preMsg != NULL))
+ fprintf(errorFile, "%s\n", preMsg);
+ if (prefix != NULL)
+ fprintf(errorFile, "%s", prefix);
+ fprintf(errorFile, "Internal error: ");
va_start(args, s);
- vfprintf(errorFile,s,args);
+ vfprintf(errorFile, s, args);
va_end(args);
fflush(errorFile);
outCount++;
@@ -321,30 +338,30 @@ va_list args;
void
uSetPreErrorMessage(char *msg)
{
- outCount= 0;
- preMsg= msg;
+ outCount = 0;
+ preMsg = msg;
return;
}
void
uSetPostErrorMessage(char *msg)
{
- postMsg= msg;
+ postMsg = msg;
return;
}
void
uSetErrorPrefix(char *pre)
{
- prefix= pre;
+ prefix = pre;
return;
}
void
uFinishUp(void)
{
- if ((outCount>0)&&(postMsg!=NULL))
- fprintf(errorFile,"%s\n",postMsg);
+ if ((outCount > 0) && (postMsg != NULL))
+ fprintf(errorFile, "%s\n", postMsg);
return;
}
@@ -354,12 +371,12 @@ uFinishUp(void)
char *
uStringDup(const char *str)
{
-char *rtrn;
+ char *rtrn;
- if (str==NULL)
- return NULL;
- rtrn= (char *)uAlloc(strlen(str)+1);
- strcpy(rtrn,str);
+ if (str == NULL)
+ return NULL;
+ rtrn = (char *) uAlloc(strlen(str) + 1);
+ strcpy(rtrn, str);
return rtrn;
}
#endif
@@ -368,24 +385,26 @@ char *rtrn;
int
uStrCaseCmp(const char *str1, const char *str2)
{
- char buf1[512],buf2[512];
+ char buf1[512], buf2[512];
char c, *s;
register int n;
- for (n=0, s = buf1; (c = *str1++); n++) {
- if (isupper(c))
- c = tolower(c);
- if (n>510)
- break;
- *s++ = c;
+ for (n = 0, s = buf1; (c = *str1++); n++)
+ {
+ if (isupper(c))
+ c = tolower(c);
+ if (n > 510)
+ break;
+ *s++ = c;
}
*s = '\0';
- for (n=0, s = buf2; (c = *str2++); n++) {
- if (isupper(c))
- c = tolower(c);
- if (n>510)
- break;
- *s++ = c;
+ for (n = 0, s = buf2; (c = *str2++); n++)
+ {
+ if (isupper(c))
+ c = tolower(c);
+ if (n > 510)
+ break;
+ *s++ = c;
}
*s = '\0';
return (strcmp(buf1, buf2));
@@ -396,15 +415,19 @@ uStrCasePrefix(const char *my_prefix, char *str)
{
char c1;
char c2;
- while (((c1=*my_prefix)!='\0')&&((c2=*str)!='\0')) {
- if (isupper(c1)) c1= tolower(c1);
- if (isupper(c2)) c2= tolower(c2);
- if (c1!=c2)
- return 0;
- my_prefix++; str++;
+ while (((c1 = *my_prefix) != '\0') && ((c2 = *str) != '\0'))
+ {
+ if (isupper(c1))
+ c1 = tolower(c1);
+ if (isupper(c2))
+ c2 = tolower(c2);
+ if (c1 != c2)
+ return 0;
+ my_prefix++;
+ str++;
}
- if (c1!='\0')
- return 0;
+ if (c1 != '\0')
+ return 0;
return 1;
}
diff --git a/app/xkbcomp/utils.h b/app/xkbcomp/utils.h
index ab84a4f7b..65e37c8a5 100644
--- a/app/xkbcomp/utils.h
+++ b/app/xkbcomp/utils.h
@@ -2,12 +2,11 @@
#define UTILS_H 1
/*\
- * $Xorg: utils.h,v 1.3 2000/08/17 19:54:33 cpqbld Exp $
*
- * COPYRIGHT 1990
- * DIGITAL EQUIPMENT CORPORATION
- * MAYNARD, MASSACHUSETTS
- * ALL RIGHTS RESERVED.
+ * COPYRIGHT 1990
+ * DIGITAL EQUIPMENT CORPORATION
+ * MAYNARD, MASSACHUSETTS
+ * ALL RIGHTS RESERVED.
*
* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
* SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
@@ -26,8 +25,7 @@
* documentation, and that the name of Digital Equipment Corporation not be
* used in advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
- \*/
-/* $XFree86: xc/programs/xkbcomp/utils.h,v 3.5 2002/06/05 00:00:37 dawes Exp $ */
+ \*/
/***====================================================================***/
@@ -37,6 +35,7 @@
#include <X11/Xfuncs.h>
#include <stddef.h>
+#include "config.h"
#ifndef NUL
#define NUL '\0'
@@ -45,14 +44,14 @@
/***====================================================================***/
#ifndef OPAQUE_DEFINED
-typedef void *Opaque;
+typedef void *Opaque;
#endif
#ifndef NullOpaque
#define NullOpaque ((Opaque)NULL)
#endif
#ifndef BOOLEAN_DEFINED
-typedef char Boolean;
+typedef char Boolean;
#endif
#ifndef True
@@ -62,7 +61,7 @@ typedef char Boolean;
#define booleanText(b) ((b)?"True":"False")
#ifndef COMPARISON_DEFINED
-typedef int Comparison;
+typedef int Comparison;
#define Greater ((Comparison)1)
#define Equal ((Comparison)0)
@@ -71,37 +70,23 @@ typedef int Comparison;
#define comparisonText(c) ((c)?((c)<0?"Less":"Greater"):"Equal")
#endif
-#if 0
-typedef union {
- int i;
- unsigned u;
- void *p;
- void *(*fp)();
-} Union;
-#endif
-
/***====================================================================***/
-extern Opaque uAlloc(
- unsigned /* size */
-);
-extern Opaque uCalloc(
- unsigned /* n */,
- unsigned /* size */
-);
-extern Opaque uRealloc(
- Opaque /* old */,
- unsigned /* newSize */
-);
-extern Opaque uRecalloc(
- Opaque /* old */,
- unsigned /* nOld */,
- unsigned /* nNew */,
- unsigned /* newSize */
-);
-extern void uFree(
- Opaque /* ptr */
-);
+extern Opaque uAlloc(unsigned /* size */
+ );
+extern Opaque uCalloc(unsigned /* n */ ,
+ unsigned /* size */
+ );
+extern Opaque uRealloc(Opaque /* old */ ,
+ unsigned /* newSize */
+ );
+extern Opaque uRecalloc(Opaque /* old */ ,
+ unsigned /* nOld */ ,
+ unsigned /* nNew */ ,
+ unsigned /* newSize */
+ );
+extern void uFree(Opaque /* ptr */
+ );
#define uTypedAlloc(t) ((t *)uAlloc((unsigned)sizeof(t)))
#define uTypedCalloc(n,t) ((t *)uCalloc((unsigned)n,(unsigned)sizeof(t)))
@@ -117,9 +102,8 @@ extern void uFree(
/***====================================================================***/
-extern Boolean uSetErrorFile(
- char * /* name */
-);
+extern Boolean uSetErrorFile(char * /* name */
+ );
#define INFO6 uInformation
#define INFO5 uInformation
@@ -129,14 +113,14 @@ extern Boolean uSetErrorFile(
#define INFO1 uInformation
#define INFO uInformation
-extern void uInformation(
- const char * /* s */, ...
-)
+extern void
+uInformation(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
#define ACTION6 uAction
#define ACTION5 uAction
@@ -146,14 +130,13 @@ __attribute__((format(printf, 1, 2)))
#define ACTION1 uAction
#define ACTION uAction
-extern void uAction(
- const char * /* s */, ...
-)
+ extern void uAction(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
#define WARN6 uWarning
#define WARN5 uWarning
@@ -163,14 +146,13 @@ __attribute__((format(printf, 1, 2)))
#define WARN1 uWarning
#define WARN uWarning
-extern void uWarning(
- const char * /* s */, ...
-)
+ extern void uWarning(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
#define ERROR6 uError
#define ERROR5 uError
@@ -180,14 +162,13 @@ __attribute__((format(printf, 1, 2)))
#define ERROR1 uError
#define ERROR uError
-extern void uError(
- const char * /* s */, ...
-)
+ extern void uError(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
#define FATAL6 uFatalError
#define FATAL5 uFatalError
@@ -197,14 +178,13 @@ __attribute__((format(printf, 1, 2)))
#define FATAL1 uFatalError
#define FATAL uFatalError
-extern void uFatalError(
- const char * /* s */, ...
-)
+ extern void uFatalError(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
/* WSGO stands for "Weird Stuff Going On" */
#define WSGO6 uInternalError
@@ -215,30 +195,24 @@ __attribute__((format(printf, 1, 2)))
#define WSGO1 uInternalError
#define WSGO uInternalError
-extern void uInternalError(
- const char * /* s */, ...
-)
+ extern void uInternalError(const char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
-extern void uSetPreErrorMessage(
- char * /* msg */
-);
+ extern void uSetPreErrorMessage(char * /* msg */
+ );
-extern void uSetPostErrorMessage(
- char * /* msg */
-);
+ extern void uSetPostErrorMessage(char * /* msg */
+ );
-extern void uSetErrorPrefix(
- char * /* void */
-);
+ extern void uSetErrorPrefix(char * /* void */
+ );
-extern void uFinishUp(
- void
-);
+ extern void uFinishUp(void);
/***====================================================================***/
@@ -255,21 +229,18 @@ extern void uFinishUp(
#define uStrCaseCmp(s1,s2) (strcasecmp(s1,s2))
#define uStrCasePrefix(p,s) (strncasecmp(p,s,strlen(p))==0)
#else
-extern int uStrCaseCmp(
- const char * /* s1 */,
- const char * /* s2 */
-);
-extern int uStrCasePrefix(
- const char * /* p */,
- char * /* str */
-);
+ extern int uStrCaseCmp(const char * /* s1 */ ,
+ const char * /* s2 */
+ );
+ extern int uStrCasePrefix(const char * /* p */ ,
+ char * /* str */
+ );
#endif
#ifdef HAVE_STRDUP
-#define uStringDup(s1) (strdup(s1))
+#define uStringDup(s1) ((s1) ? strdup(s1) : NULL)
#else
-extern char *uStringDup(
- const char * /* s1 */
-);
+ extern char *uStringDup(const char * /* s1 */
+ );
#endif
/***====================================================================***/
@@ -287,36 +258,31 @@ extern char *uStringDup(
#define DEBUG_VAR debugFlags
#endif
-#ifdef DEBUG_VAR_NOT_LOCAL
extern
-#endif
-unsigned int DEBUG_VAR;
+ unsigned int DEBUG_VAR;
-extern void uDebug(
- char * /* s */, ...
-)
+ extern void uDebug(char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
-extern void uDebugNOI( /* no indent */
- char * /* s */, ...
-)
+ extern void uDebugNOI( /* no indent */
+ char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 1, 2)))
+ __attribute__ ((format(printf, 1, 2)))
#endif
-;
+ ;
-extern Boolean uSetDebugFile(
- char *name
-);
+ extern Boolean uSetDebugFile(char *name);
-extern FILE *uDebugFile;
-extern int uDebugIndentLevel;
-extern int uDebugIndentSize;
+ extern FILE *uDebugFile;
+ extern int uDebugIndentLevel;
+ extern int uDebugIndentSize;
#define uDebugIndent(l) (uDebugIndentLevel+=(l))
#define uDebugOutdent(l) (uDebugIndentLevel-=(l))
#ifdef DEBUG_ON
@@ -347,29 +313,24 @@ extern int uDebugIndentSize;
#define uDEBUG_NOI5(f,s,a,b,c,d,e)
#endif
-extern Boolean uSetEntryFile(
- char *name
-);
-extern void uEntry(
- int /* l */,
- char * /* s */, ...
-)
+ extern Boolean uSetEntryFile(char *name);
+ extern void uEntry(int /* l */ ,
+ char * /* s */ , ...
+ )
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 6)))
-__attribute__((format(printf, 2, 3)))
+ __attribute__ ((format(printf, 2, 3)))
#endif
-;
+ ;
-extern void uExit(
- int l,char *rtVal
-);
+ extern void uExit(int l, char *rtVal);
#ifdef ENTRY_TRACKING_ON
#define ENTRY_BIT 0x10
#define LOW_ENTRY_BIT 0x1000
#define ENTER (DEBUG_VAR&ENTRY_BIT)
#define FLAG(fLag) (DEBUG_VAR&(fLag))
-extern int uEntryLevel;
+ extern int uEntryLevel;
#define uENTRY(s) { if (ENTER) uEntry(1,s);}
#define uENTRY1(s,a) { if (ENTER) uEntry(1,s,a);}
@@ -414,9 +375,7 @@ extern int uEntryLevel;
#define uFLAG_ENTRY7(f,s,a,b,c,d,e,g,h)
#define uFLAG_RETURN(v) { return(v);}
#define uFLAG_VOIDRETURN { return; }
-#endif
+#endif
#endif /* UTILS_H */
-
-
diff --git a/app/xkbcomp/vmod.c b/app/xkbcomp/vmod.c
index 9a8bd0d87..5578fd01f 100644
--- a/app/xkbcomp/vmod.c
+++ b/app/xkbcomp/vmod.c
@@ -1,4 +1,3 @@
-/* $Xorg: vmod.c,v 1.3 2000/08/17 19:54:33 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,9 +23,7 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/vmod.c,v 3.3 2001/01/17 23:45:45 dawes Exp $ */
-#define DEBUG_VAR_NOT_LOCAL
#define DEBUG_VAR debugFlags
#include <stdio.h>
#include "xkbcomp.h"
@@ -40,144 +37,190 @@
#include "vmod.h"
void
-InitVModInfo(VModInfo *info,XkbDescPtr xkb)
+InitVModInfo(VModInfo * info, XkbDescPtr xkb)
{
- ClearVModInfo(info,xkb);
- info->errorCount= 0;
+ ClearVModInfo(info, xkb);
+ info->errorCount = 0;
return;
}
void
-ClearVModInfo(VModInfo *info,XkbDescPtr xkb)
+ClearVModInfo(VModInfo * info, XkbDescPtr xkb)
{
-register int i;
-
- if (XkbAllocNames(xkb,XkbVirtualModNamesMask,0,0)!=Success)
- return;
- if (XkbAllocServerMap(xkb,XkbVirtualModsMask,0)!=Success)
- return;
- info->xkb= xkb;
- info->newlyDefined= info->defined= info->available= 0;
- if (xkb && xkb->names) {
- register int bit;
- for (i=0,bit=1;i<XkbNumVirtualMods;i++,bit<<=1) {
- if (xkb->names->vmods[i]!=None)
- info->defined|= bit;
- }
+ register int i;
+
+ if (XkbAllocNames(xkb, XkbVirtualModNamesMask, 0, 0) != Success)
+ return;
+ if (XkbAllocServerMap(xkb, XkbVirtualModsMask, 0) != Success)
+ return;
+ info->xkb = xkb;
+ info->newlyDefined = info->defined = info->available = 0;
+ if (xkb && xkb->names)
+ {
+ register int bit;
+ for (i = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1)
+ {
+ if (xkb->names->vmods[i] != None)
+ info->defined |= bit;
+ }
}
return;
}
/***====================================================================***/
+/**
+ * Handle one entry in the virtualModifiers line (e.g. NumLock).
+ * If the entry is e.g. NumLock=Mod1, stmt->value is not NULL, and the
+ * XkbServerMap's vmod is set to the given modifier. Otherwise, the vmod is 0.
+ *
+ * @param stmt The statement specifying the name and (if any the value).
+ * @param mergeMode Merge strategy (e.g. MergeOverride)
+ */
Bool
-HandleVModDef(VModDef *stmt,unsigned mergeMode,VModInfo *info)
+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;
- const char *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;
+ 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;
+ const char *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;
+ 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;
+ 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));
+ XkbAtomText(NULL, stmt->name, XkbMessage));
return False;
}
+/**
+ * Returns the index of the given modifier in the xkb->names->vmods array.
+ *
+ * @param priv Pointer to the xkb data structure.
+ * @param elem Must be None, otherwise return False.
+ * @param field The Atom of the modifier's name (e.g. Atom for LAlt)
+ * @param type Must be TypeInt, otherwise return False.
+ * @param val_rtrn Set to the index of the modifier that matches.
+ *
+ * @return True on success, False otherwise. If False is returned, val_rtrn is
+ * undefined.
+ */
int
-LookupVModIndex( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+LookupVModIndex(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
-register int i;
-register char * fieldStr;
-register char * modStr;
-XkbDescPtr xkb;
-
- xkb= (XkbDescPtr)priv;
- if ((xkb==NULL)||(xkb->names==NULL)||(elem!=None)||(type!=TypeInt)) {
- return False;
+ register int i;
+ register char *fieldStr;
+ register char *modStr;
+ XkbDescPtr xkb;
+
+ xkb = (XkbDescPtr) priv;
+ if ((xkb == NULL) || (xkb->names == NULL) || (elem != None)
+ || (type != TypeInt))
+ {
+ return False;
}
- fieldStr= XkbAtomGetString(xkb->dpy,field);
- if (fieldStr==NULL)
- return False;
- for (i=0;i<XkbNumVirtualMods;i++) {
- modStr= XkbAtomGetString(xkb->dpy,xkb->names->vmods[i]);
- if ((modStr!=NULL)&&(uStrCaseCmp(fieldStr,modStr)==0)) {
- val_rtrn->uval= i;
- return True;
- }
+ /* get the actual name */
+ fieldStr = XkbAtomGetString(xkb->dpy, field);
+ if (fieldStr == NULL)
+ return False;
+ /* For each named modifier, get the name and compare it to the one passed
+ * in. If we get a match, return the index of the modifier.
+ * The order of modifiers is the same as in the virtual_modifiers line in
+ * the xkb_types section.
+ */
+ for (i = 0; i < XkbNumVirtualMods; i++)
+ {
+ modStr = XkbAtomGetString(xkb->dpy, xkb->names->vmods[i]);
+ if ((modStr != NULL) && (uStrCaseCmp(fieldStr, modStr) == 0))
+ {
+ val_rtrn->uval = i;
+ return True;
+ }
}
return False;
}
+/**
+ * Get the mask for the given modifier and set val_rtrn.uval to the mask.
+ * Note that the mask returned is always > 512.
+ *
+ * @param priv Pointer to xkb data structure.
+ * @param val_rtrn Set to the mask returned.
+ *
+ * @return True on success, False otherwise. If False is returned, val_rtrn is
+ * undefined.
+ */
int
-LookupVModMask( XPointer priv,
- Atom elem,
- Atom field,
- unsigned type,
- ExprResult * val_rtrn)
+LookupVModMask(XPointer priv,
+ Atom elem, Atom field, unsigned type, ExprResult * val_rtrn)
{
- if (LookupVModIndex(priv,elem,field,type,val_rtrn)) {
- register unsigned ndx= val_rtrn->uval;
- val_rtrn->uval= (1<<(XkbNumModifiers+ndx));
- return True;
+ if (LookupVModIndex(priv, elem, field, type, val_rtrn))
+ {
+ register unsigned ndx = val_rtrn->uval;
+ val_rtrn->uval = (1 << (XkbNumModifiers + ndx));
+ return True;
}
return False;
}
@@ -185,41 +228,44 @@ LookupVModMask( XPointer priv,
int
FindKeypadVMod(XkbDescPtr xkb)
{
-Atom name;
-ExprResult rtrn;
+ Atom name;
+ ExprResult rtrn;
- name= XkbInternAtom(xkb->dpy,"NumLock",False);
- if ((xkb)&&
- LookupVModIndex((XPointer)xkb,None,name,TypeInt,&rtrn)) {
- return rtrn.ival;
+ name = XkbInternAtom(xkb->dpy, "NumLock", False);
+ if ((xkb) && LookupVModIndex((XPointer) xkb, None, name, TypeInt, &rtrn))
+ {
+ return rtrn.ival;
}
return -1;
}
Bool
-ResolveVirtualModifier(ExprDef *def,ExprResult *val_rtrn,VModInfo *info)
+ResolveVirtualModifier(ExprDef * def, ExprResult * val_rtrn, VModInfo * info)
{
-XkbNamesPtr names;
-
- names= info->xkb->names;
- if (def->op==ExprIdent) {
- register int i,bit;
- for (i=0,bit=1;i<XkbNumVirtualMods;i++,bit<<=1) {
- char *str1,*str2;
- str1= XkbAtomGetString(info->xkb->dpy,names->vmods[i]);
- str2= XkbAtomGetString(NULL,def->value.str);
- if ((info->available&bit)&&
- (uStrCaseCmp(str1,str2)==Equal)) {
- val_rtrn->uval= i;
- return True;
- }
- }
+ XkbNamesPtr names;
+
+ names = info->xkb->names;
+ if (def->op == ExprIdent)
+ {
+ register int i, bit;
+ for (i = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1)
+ {
+ char *str1, *str2;
+ str1 = XkbAtomGetString(info->xkb->dpy, names->vmods[i]);
+ str2 = XkbAtomGetString(NULL, def->value.str);
+ if ((info->available & bit) && (uStrCaseCmp(str1, str2) == Equal))
+ {
+ val_rtrn->uval = i;
+ return True;
+ }
+ }
}
- if (ExprResolveInteger(def,val_rtrn,NULL,NULL)) {
- if (val_rtrn->uval<XkbNumVirtualMods)
- return True;
- ERROR2("Illegal virtual modifier %d (must be 0..%d inclusive)\n",
- val_rtrn->uval,XkbNumVirtualMods-1);
+ if (ExprResolveInteger(def, val_rtrn, NULL, NULL))
+ {
+ if (val_rtrn->uval < XkbNumVirtualMods)
+ return True;
+ ERROR2("Illegal virtual modifier %d (must be 0..%d inclusive)\n",
+ val_rtrn->uval, XkbNumVirtualMods - 1);
}
return False;
}
diff --git a/app/xkbcomp/vmod.h b/app/xkbcomp/vmod.h
index 231d2c8ba..559b9d504 100644
--- a/app/xkbcomp/vmod.h
+++ b/app/xkbcomp/vmod.h
@@ -1,4 +1,3 @@
-/* $Xorg: vmod.h,v 1.3 2000/08/17 19:54:33 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,64 +23,56 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86$ */
#ifndef VMOD_H
#define VMOD_H 1
-typedef struct _VModInfo {
- XkbDescPtr xkb;
- unsigned defined;
- unsigned available;
- unsigned newlyDefined;
- int errorCount;
+typedef struct _VModInfo
+{
+ XkbDescPtr xkb;
+ unsigned defined;
+ unsigned available;
+ unsigned newlyDefined;
+ int errorCount;
} VModInfo;
-extern void InitVModInfo(
- VModInfo * /* info */,
- XkbDescPtr /* xkb */
-);
+extern void InitVModInfo(VModInfo * /* info */ ,
+ XkbDescPtr /* xkb */
+ );
-extern void ClearVModInfo(
- VModInfo * /* info */,
- XkbDescPtr /* xkb */
-);
+extern void ClearVModInfo(VModInfo * /* info */ ,
+ XkbDescPtr /* xkb */
+ );
-extern Bool HandleVModDef(
- VModDef * /* stmt */,
- unsigned /* mergeMode */,
- VModInfo * /* info */
-);
+extern Bool HandleVModDef(VModDef * /* stmt */ ,
+ unsigned /* mergeMode */ ,
+ VModInfo * /* info */
+ );
-extern Bool ApplyVModDefs(
- VModInfo * /* info */,
- XkbDescPtr /* xkb */
-);
+extern Bool ApplyVModDefs(VModInfo * /* info */ ,
+ XkbDescPtr /* xkb */
+ );
-extern int LookupVModIndex(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
+extern int LookupVModIndex(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
-extern int LookupVModMask(
- XPointer /* priv */,
- Atom /* elem */,
- Atom /* field */,
- unsigned /* type */,
- ExprResult * /* val_rtrn */
-);
+extern int LookupVModMask(XPointer /* priv */ ,
+ Atom /* elem */ ,
+ Atom /* field */ ,
+ unsigned /* type */ ,
+ ExprResult * /* val_rtrn */
+ );
-extern int FindKeypadVMod(
- XkbDescPtr /* xkb */
-);
+extern int FindKeypadVMod(XkbDescPtr /* xkb */
+ );
-extern Bool ResolveVirtualModifier(
- ExprDef * /* def */,
- ExprResult * /* value_rtrn */,
- VModInfo * /* info */
-);
+extern Bool ResolveVirtualModifier(ExprDef * /* def */ ,
+ ExprResult * /* value_rtrn */ ,
+ VModInfo * /* info */
+ );
#endif /* VMOD_H */
diff --git a/app/xkbcomp/xkbcomp.c b/app/xkbcomp/xkbcomp.c
index 111a7b371..b0df9207e 100644
--- a/app/xkbcomp/xkbcomp.c
+++ b/app/xkbcomp/xkbcomp.c
@@ -1,4 +1,3 @@
-/* $Xorg: xkbcomp.c,v 1.4 2000/08/17 19:54:33 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/xkbcomp.c,v 3.20 2003/09/24 02:43:38 dawes Exp $ */
#include <stdio.h>
#include <ctype.h>
@@ -40,7 +38,6 @@
#include <malloc.h>
#endif
-#define DEBUG_VAR_NOT_LOCAL
#define DEBUG_VAR debugFlags
#include "xkbcomp.h"
#include <stdlib.h>
@@ -76,35 +73,37 @@
#define INPUT_XKB 1
#define INPUT_XKM 2
+unsigned int debugFlags;
+
static const char *fileTypeExt[] = {
- "XXX",
- "xkm",
- "h",
- "xkb",
- "dir"
+ "XXX",
+ "xkm",
+ "h",
+ "xkb",
+ "dir"
};
-static unsigned inputFormat,outputFormat;
- char * rootDir;
-static char * inputFile;
-static char * inputMap;
-static char * outputFile;
-static char * inDpyName;
-static char * outDpyName;
-static Display * inDpy;
-static Display * outDpy;
-static Bool showImplicit= False;
-static Bool synch= False;
-static Bool computeDflts= False;
-static Bool xkblist= False;
- unsigned warningLevel= 5;
- unsigned verboseLevel= 0;
- unsigned dirsToStrip= 0;
- unsigned optionalParts= 0;
-static char * preErrorMsg= NULL;
-static char * postErrorMsg= NULL;
-static char * errorPrefix= NULL;
-static unsigned int device_id = XkbUseCoreKbd;
+static unsigned inputFormat, outputFormat;
+char *rootDir;
+static char *inputFile;
+static char *inputMap;
+static char *outputFile;
+static char *inDpyName;
+static char *outDpyName;
+static Display *inDpy;
+static Display *outDpy;
+static Bool showImplicit = False;
+static Bool synch = False;
+static Bool computeDflts = False;
+static Bool xkblist = False;
+unsigned warningLevel = 5;
+unsigned verboseLevel = 0;
+unsigned dirsToStrip = 0;
+unsigned optionalParts = 0;
+static char *preErrorMsg = NULL;
+static char *postErrorMsg = NULL;
+static char *errorPrefix = NULL;
+static unsigned int device_id = XkbUseCoreKbd;
/***====================================================================***/
@@ -112,16 +111,18 @@ static unsigned int device_id = XkbUseCoreKbd;
#define M1(m,a) fprintf(stderr,(m),(a))
static void
-Usage(int argc,char *argv[])
+Usage(int argc, char *argv[])
{
if (!xkblist)
- M1("Usage: %s [options] input-file [ output-file ]\n",argv[0]);
- else M1("Usage: %s [options] file[(map)] ...\n",argv[0]);
+ M1("Usage: %s [options] input-file [ output-file ]\n", argv[0]);
+ else
+ M1("Usage: %s [options] file[(map)] ...\n", argv[0]);
M("Legal options:\n");
M("-?,-help Print this message\n");
- if (!xkblist) {
- M("-a Show all actions\n");
- M("-C Create a C header file\n");
+ if (!xkblist)
+ {
+ M("-a Show all actions\n");
+ M("-C Create a C header file\n");
}
#ifdef DEBUG
M("-d [flags] Report debugging information\n");
@@ -129,44 +130,49 @@ Usage(int argc,char *argv[])
M("-em1 <msg> Print <msg> before printing first error message\n");
M("-emp <msg> Print <msg> at the start of each message line\n");
M("-eml <msg> If there were any errors, print <msg> before exiting\n");
- if (!xkblist) {
- M("-dflts Compute defaults for missing parts\n");
- M("-I[<dir>] Specifies a top level directory for include\n");
- M(" directives. Multiple directories are legal.\n");
- M("-l [flags] List matching maps in the specified files\n");
- M(" f: list fully specified names\n");
- M(" h: also list hidden maps\n");
- M(" l: long listing (show flags)\n");
- M(" p: also list partial maps\n");
- M(" R: recursively list subdirectories\n");
- M(" default is all options off\n");
+ if (!xkblist)
+ {
+ M("-dflts Compute defaults for missing parts\n");
+ M("-I[<dir>] Specifies a top level directory for include\n");
+ M(" directives. Multiple directories are legal.\n");
+ M("-l [flags] List matching maps in the specified files\n");
+ M(" f: list fully specified names\n");
+ M(" h: also list hidden maps\n");
+ M(" l: long listing (show flags)\n");
+ M(" p: also list partial maps\n");
+ M(" R: recursively list subdirectories\n");
+ M(" default is all options off\n");
}
M("-i <deviceid> Specifies device ID (not name) to compile for\n");
M("-m[ap] <map> Specifies map to compile\n");
M("-o <file> Specifies output file name\n");
- if (!xkblist) {
- M("-opt[ional] <parts> Specifies optional components of keymap\n");
- M(" Errors in optional parts are not fatal\n");
- M(" <parts> can be any combination of:\n");
- M(" c: compat map g: geometry\n");
- M(" k: keycodes s: symbols\n");
- M(" t: types\n");
+ if (!xkblist)
+ {
+ M("-opt[ional] <parts> Specifies optional components of keymap\n");
+ M(" Errors in optional parts are not fatal\n");
+ M(" <parts> can be any combination of:\n");
+ M(" c: compat map g: geometry\n");
+ M(" k: keycodes s: symbols\n");
+ M(" t: types\n");
}
- if (xkblist) {
- M("-p <count> Specifies the number of slashes to be stripped\n");
- M(" from the front of the map name on output\n");
+ if (xkblist)
+ {
+ M("-p <count> Specifies the number of slashes to be stripped\n");
+ M(" from the front of the map name on output\n");
}
M("-R[<DIR>] Specifies the root directory for\n");
M(" relative path names\n");
M("-synch Force synchronization\n");
- if (xkblist) {
- M("-v [<flags>] Set level of detail for listing.\n");
- M(" flags are as for the -l option\n");
+ if (xkblist)
+ {
+ M("-v [<flags>] Set level of detail for listing.\n");
+ M(" flags are as for the -l option\n");
}
M("-w [<lvl>] Set warning level (0=none, 10=all)\n");
- if (!xkblist) {
- M("-xkb Create an XKB source (.xkb) file\n");
- M("-xkm Create a compiled key map (.xkm) file\n");
+ if (!xkblist)
+ {
+ M("-xkb Create an XKB source (.xkb) file\n");
+ M("-xkm Create a compiled key map (.xkm) file\n");
}
return;
}
@@ -176,529 +182,701 @@ Usage(int argc,char *argv[])
static void
setVerboseFlags(char *str)
{
- for (;*str;str++) {
- switch (*str) {
- case 'f': verboseLevel|= WantFullNames; break;
- case 'h': verboseLevel|= WantHiddenMaps; break;
- case 'l': verboseLevel|= WantLongListing; break;
- case 'p': verboseLevel|= WantPartialMaps; break;
- case 'R': verboseLevel|= ListRecursive; break;
- default:
- if (warningLevel>4) {
- WARN1("Unknown verbose option \"%c\"\n",(unsigned int)*str);
- ACTION("Ignored\n");
- }
- break;
- }
+ for (; *str; str++)
+ {
+ switch (*str)
+ {
+ case 'f':
+ verboseLevel |= WantFullNames;
+ break;
+ case 'h':
+ verboseLevel |= WantHiddenMaps;
+ break;
+ case 'l':
+ verboseLevel |= WantLongListing;
+ break;
+ case 'p':
+ verboseLevel |= WantPartialMaps;
+ break;
+ case 'R':
+ verboseLevel |= ListRecursive;
+ break;
+ default:
+ if (warningLevel > 4)
+ {
+ WARN1("Unknown verbose option \"%c\"\n", (unsigned int) *str);
+ ACTION("Ignored\n");
+ }
+ break;
+ }
}
return;
}
static Bool
-parseArgs(int argc,char *argv[])
+parseArgs(int argc, char *argv[])
{
-register int i,tmp;
+ register int i, tmp;
- i= strlen(argv[0]);
- tmp= strlen("xkblist");
- if ((i>=tmp)&&(strcmp(&argv[0][i-tmp],"xkblist")==0)) {
- xkblist= True;
+ i = strlen(argv[0]);
+ tmp = strlen("xkblist");
+ if ((i >= tmp) && (strcmp(&argv[0][i - tmp], "xkblist") == 0))
+ {
+ xkblist = True;
}
- for (i=1;i<argc;i++) {
- int itmp;
- if ((argv[i][0]!='-')||(uStringEqual(argv[i],"-"))) {
- if (!xkblist) {
- if (inputFile==NULL)
- inputFile= argv[i];
- else if (outputFile==NULL)
- outputFile= argv[i];
- else if (warningLevel>0) {
- WARN("Too many file names on command line\n");
- ACTION3("Compiling %s, writing to %s, ignoring %s\n",
- inputFile,outputFile,argv[i]);
- }
- }
- else if (!AddMatchingFiles(argv[i]))
- return False;
- }
- else if ((strcmp(argv[i],"-?")==0)||(strcmp(argv[i],"-help")==0)) {
- Usage(argc,argv);
- exit(0);
- }
- else if ((strcmp(argv[i],"-a")==0)&&(!xkblist)) {
- showImplicit= True;
- }
- else if ((strcmp(argv[i],"-C")==0)&&(!xkblist)) {
- if ((outputFormat!=WANT_DEFAULT)&&(outputFormat!=WANT_C_HDR)) {
- if (warningLevel>0) {
- WARN("Multiple output file formats specified\n");
- ACTION1("\"%s\" flag ignored\n",argv[i]);
- }
- }
- else outputFormat= WANT_C_HDR;
- }
+ for (i = 1; i < argc; i++)
+ {
+ int itmp;
+ if ((argv[i][0] != '-') || (uStringEqual(argv[i], "-")))
+ {
+ if (!xkblist)
+ {
+ if (inputFile == NULL)
+ inputFile = argv[i];
+ else if (outputFile == NULL)
+ outputFile = argv[i];
+ else if (warningLevel > 0)
+ {
+ WARN("Too many file names on command line\n");
+ ACTION3
+ ("Compiling %s, writing to %s, ignoring %s\n",
+ inputFile, outputFile, argv[i]);
+ }
+ }
+ else if (!AddMatchingFiles(argv[i]))
+ return False;
+ }
+ else if ((strcmp(argv[i], "-?") == 0)
+ || (strcmp(argv[i], "-help") == 0))
+ {
+ Usage(argc, argv);
+ exit(0);
+ }
+ else if ((strcmp(argv[i], "-a") == 0) && (!xkblist))
+ {
+ showImplicit = True;
+ }
+ else if ((strcmp(argv[i], "-C") == 0) && (!xkblist))
+ {
+ if ((outputFormat != WANT_DEFAULT)
+ && (outputFormat != WANT_C_HDR))
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple output file formats specified\n");
+ ACTION1("\"%s\" flag ignored\n", argv[i]);
+ }
+ }
+ else
+ outputFormat = WANT_C_HDR;
+ }
#ifdef DEBUG
- else if (strcmp(argv[i],"-d")==0) {
- if ((i>=(argc-1))||(!isdigit(argv[i+1][0]))) {
- debugFlags= 1;
- }
- else {
- if (sscanf(argv[++i],"%i",&itmp) == 1)
- debugFlags = itmp;
- }
- INFO1("Setting debug flags to %d\n",debugFlags);
- }
+ else if (strcmp(argv[i], "-d") == 0)
+ {
+ if ((i >= (argc - 1)) || (!isdigit(argv[i + 1][0])))
+ {
+ debugFlags = 1;
+ }
+ else
+ {
+ if (sscanf(argv[++i], "%i", &itmp) == 1)
+ debugFlags = itmp;
+ }
+ INFO1("Setting debug flags to %d\n", debugFlags);
+ }
#endif
- else if ((strcmp(argv[i],"-dflts")==0)&&(!xkblist)) {
- computeDflts= True;
- }
- else if (strcmp(argv[i],"-em1")==0) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No pre-error message specified\n");
- ACTION("Trailing \"-em1\" option ignored\n");
- }
- }
- else if (preErrorMsg!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple pre-error messsages specified\n");
- ACTION2("Compiling %s, ignoring %s\n",preErrorMsg,argv[i]);
- }
- }
- else preErrorMsg= argv[i];
- }
- else if (strcmp(argv[i],"-emp")==0) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No error prefix specified\n");
- ACTION("Trailing \"-emp\" option ignored\n");
- }
- }
- else if (errorPrefix!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple error prefixes specified\n");
- ACTION2("Compiling %s, ignoring %s\n",errorPrefix,argv[i]);
- }
- }
- else errorPrefix= argv[i];
- }
- else if (strcmp(argv[i],"-eml")==0) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No post-error message specified\n");
- ACTION("Trailing \"-eml\" option ignored\n");
- }
- }
- else if (postErrorMsg!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple post-error messages specified\n");
- ACTION2("Compiling %s, ignoring %s\n",postErrorMsg,argv[i]);
- }
- }
- else postErrorMsg= argv[i];
- }
- else if ((strncmp(argv[i],"-I",2)==0)&&(!xkblist)) {
- if (!XkbAddDirectoryToPath(&argv[i][2])) {
- ACTION("Exiting\n");
- exit(1);
- }
- }
- else if ((strncmp(argv[i], "-i", 2) == 0) && (!xkblist)) {
- if (++i >= argc) {
+ else if ((strcmp(argv[i], "-dflts") == 0) && (!xkblist))
+ {
+ computeDflts = True;
+ }
+ else if (strcmp(argv[i], "-em1") == 0)
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No pre-error message specified\n");
+ ACTION("Trailing \"-em1\" option ignored\n");
+ }
+ }
+ else if (preErrorMsg != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple pre-error messsages specified\n");
+ ACTION2("Compiling %s, ignoring %s\n",
+ preErrorMsg, argv[i]);
+ }
+ }
+ else
+ preErrorMsg = argv[i];
+ }
+ else if (strcmp(argv[i], "-emp") == 0)
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No error prefix specified\n");
+ ACTION("Trailing \"-emp\" option ignored\n");
+ }
+ }
+ else if (errorPrefix != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple error prefixes specified\n");
+ ACTION2("Compiling %s, ignoring %s\n",
+ errorPrefix, argv[i]);
+ }
+ }
+ else
+ errorPrefix = argv[i];
+ }
+ else if (strcmp(argv[i], "-eml") == 0)
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No post-error message specified\n");
+ ACTION("Trailing \"-eml\" option ignored\n");
+ }
+ }
+ else if (postErrorMsg != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple post-error messages specified\n");
+ ACTION2("Compiling %s, ignoring %s\n",
+ postErrorMsg, argv[i]);
+ }
+ }
+ else
+ postErrorMsg = argv[i];
+ }
+ else if ((strncmp(argv[i], "-I", 2) == 0) && (!xkblist))
+ {
+ if (!XkbAddDirectoryToPath(&argv[i][2]))
+ {
+ ACTION("Exiting\n");
+ exit(1);
+ }
+ }
+ else if ((strncmp(argv[i], "-i", 2) == 0) && (!xkblist))
+ {
+ if (++i >= argc)
+ {
if (warningLevel > 0)
WARN("No device ID specified\n");
}
device_id = atoi(argv[i]);
}
- else if ((strncmp(argv[i],"-l",2)==0)&&(!xkblist)) {
- if (outputFormat!=WANT_DEFAULT) {
- if (warningLevel>0) {
- WARN("Multiple output file formats specified\n");
- ACTION1("\"%s\" flag ignored\n",argv[i]);
- }
- }
- else {
- if (argv[i][2]!='\0')
- setVerboseFlags(&argv[i][2]);
- xkblist= True;
- if ((inputFile)&&(!AddMatchingFiles(inputFile)))
- return False;
- else inputFile= NULL;
- if ((outputFile)&&(!AddMatchingFiles(outputFile)))
- return False;
- else outputFile= NULL;
- }
- }
- else if ((strcmp(argv[i],"-m")==0)||(strcmp(argv[i],"-map")==0)) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No map name specified\n");
- ACTION1("Trailing \"%s\" option ignored\n",argv[i-1]);
- }
- }
- else if (xkblist) {
- if (!AddMapOnly(argv[i]))
- return False;
- }
- else if (inputMap!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple map names specified\n");
- ACTION2("Compiling %s, ignoring %s\n",inputMap,argv[i]);
- }
- }
- else inputMap= argv[i];
- }
- else if ((strcmp(argv[i],"-merge")==0)&&(!xkblist)) {
- /* Ignored */
- }
- else if (strcmp(argv[i],"-o")==0) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No output file specified\n");
- ACTION("Trailing \"-o\" option ignored\n");
- }
- }
- else if (outputFile!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple output files specified\n");
- ACTION2("Compiling %s, ignoring %s\n",outputFile,argv[i]);
- }
- }
- else outputFile= argv[i];
- }
- else if (((strcmp(argv[i],"-opt")==0)||(strcmp(argv[i],"optional")==0))
- &&(!xkblist)) {
- if (++i>=argc) {
- if (warningLevel>0) {
- WARN("No optional components specified\n");
- ACTION1("Trailing \"%s\" option ignored\n",argv[i-1]);
- }
- }
- else {
- char *tmp2;
- for (tmp2=argv[i];(*tmp2!='\0');tmp2++) {
- switch (*tmp2) {
- case 'c': case 'C':
- optionalParts|= XkmCompatMapMask;
- break;
- case 'g': case 'G':
- optionalParts|= XkmGeometryMask;
- break;
- case 'k': case 'K':
- optionalParts|= XkmKeyNamesMask;
- break;
- case 's': case 'S':
- optionalParts|= XkmSymbolsMask;
- break;
- case 't': case 'T':
- optionalParts|= XkmTypesMask;
- break;
- default:
- if (warningLevel>0) {
- WARN1("Illegal component for %s option\n",
- argv[i-1]);
- ACTION1("Ignoring unknown specifier \"%c\"\n",
- (unsigned int)*tmp2);
- }
- break;
- }
- }
- }
- }
- else if (strncmp(argv[i],"-p",2)==0) {
- if (isdigit(argv[i][2])) {
- if (sscanf(&argv[i][2],"%i",&itmp) == 1)
- dirsToStrip = itmp;
- }
- else if ((i<(argc-1))&&(isdigit(argv[i+1][0]))) {
- if (sscanf(argv[++i],"%i",&itmp) == 1)
- dirsToStrip = itmp;
- }
- else {
- dirsToStrip= 0;
- }
- if (warningLevel>5)
- INFO1("Setting path count to %d\n",dirsToStrip);
- }
- else if (strncmp(argv[i],"-R",2)==0) {
- if (argv[i][2]=='\0') {
- if (warningLevel>0) {
- WARN("No root directory specified\n");
- ACTION("Ignoring -R option\n");
- }
- }
- else if (rootDir!=NULL) {
- if (warningLevel>0) {
- WARN("Multiple root directories specified\n");
- ACTION2("Using %s, ignoring %s\n",rootDir,argv[i]);
- }
- }
- else {
- rootDir= &argv[i][2];
- if (warningLevel>8) {
- WARN1("Changing root directory to \"%s\"\n",rootDir);
- }
- if ((chdir(rootDir)<0) && (warningLevel>0)) {
- WARN1("Couldn't change directory to \"%s\"\n",rootDir);
- ACTION("Root directory (-R) option ignored\n");
- rootDir= NULL;
- }
- }
- }
- else if ((strcmp(argv[i],"-synch")==0)||(strcmp(argv[i],"-s")==0)) {
- synch= True;
- }
- else if (strncmp(argv[i],"-v",2)==0) {
- char *str;
- if (argv[i][2]!='\0')
- str= &argv[i][2];
- else if ((i<(argc-1))&&(argv[i+1][0]!='-'))
- str= argv[++i];
- else str= NULL;
- if (str)
- setVerboseFlags(str);
- }
- else if (strncmp(argv[i],"-w",2)==0) {
- if ((i>=(argc-1))||(!isdigit(argv[i+1][0]))) {
- warningLevel = 0;
- if (isdigit(argv[i][1]))
- if (sscanf(&argv[i][1],"%i",&itmp) == 1)
- warningLevel = itmp;
- }
- else {
- if (sscanf(argv[++i],"%i",&itmp) == 1)
- warningLevel = itmp;
- }
- }
- else if ((strcmp(argv[i],"-xkb")==0)&&(!xkblist)) {
- if ((outputFormat!=WANT_DEFAULT)&&(outputFormat!=WANT_XKB_FILE)) {
- if (warningLevel>0) {
- WARN("Multiple output file formats specified\n");
- ACTION1("\"%s\" flag ignored\n",argv[i]);
- }
- }
- else outputFormat= WANT_XKB_FILE;
- }
- else if ((strcmp(argv[i],"-xkm")==0)&&(!xkblist)) {
- if ((outputFormat!=WANT_DEFAULT)&&(outputFormat!=WANT_XKM_FILE)) {
- if (warningLevel>0) {
- WARN("Multiple output file formats specified\n");
- ACTION1("\"%s\" flag ignored\n",argv[i]);
- }
- }
- else outputFormat= WANT_XKM_FILE;
- }
- else {
- ERROR1("Unknown flag \"%s\" on command line\n",argv[i]);
- Usage(argc,argv);
- return False;
- }
+ else if ((strncmp(argv[i], "-l", 2) == 0) && (!xkblist))
+ {
+ if (outputFormat != WANT_DEFAULT)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple output file formats specified\n");
+ ACTION1("\"%s\" flag ignored\n", argv[i]);
+ }
+ }
+ else
+ {
+ if (argv[i][2] != '\0')
+ setVerboseFlags(&argv[i][2]);
+ xkblist = True;
+ if ((inputFile) && (!AddMatchingFiles(inputFile)))
+ return False;
+ else
+ inputFile = NULL;
+ if ((outputFile) && (!AddMatchingFiles(outputFile)))
+ return False;
+ else
+ outputFile = NULL;
+ }
+ }
+ else if ((strcmp(argv[i], "-m") == 0)
+ || (strcmp(argv[i], "-map") == 0))
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No map name specified\n");
+ ACTION1("Trailing \"%s\" option ignored\n", argv[i - 1]);
+ }
+ }
+ else if (xkblist)
+ {
+ if (!AddMapOnly(argv[i]))
+ return False;
+ }
+ else if (inputMap != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple map names specified\n");
+ ACTION2("Compiling %s, ignoring %s\n", inputMap, argv[i]);
+ }
+ }
+ else
+ inputMap = argv[i];
+ }
+ else if ((strcmp(argv[i], "-merge") == 0) && (!xkblist))
+ {
+ /* Ignored */
+ }
+ else if (strcmp(argv[i], "-o") == 0)
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No output file specified\n");
+ ACTION("Trailing \"-o\" option ignored\n");
+ }
+ }
+ else if (outputFile != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple output files specified\n");
+ ACTION2("Compiling %s, ignoring %s\n", outputFile,
+ argv[i]);
+ }
+ }
+ else
+ outputFile = argv[i];
+ }
+ else if (((strcmp(argv[i], "-opt") == 0)
+ || (strcmp(argv[i], "optional") == 0)) && (!xkblist))
+ {
+ if (++i >= argc)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No optional components specified\n");
+ ACTION1("Trailing \"%s\" option ignored\n", argv[i - 1]);
+ }
+ }
+ else
+ {
+ char *tmp2;
+ for (tmp2 = argv[i]; (*tmp2 != '\0'); tmp2++)
+ {
+ switch (*tmp2)
+ {
+ case 'c':
+ case 'C':
+ optionalParts |= XkmCompatMapMask;
+ break;
+ case 'g':
+ case 'G':
+ optionalParts |= XkmGeometryMask;
+ break;
+ case 'k':
+ case 'K':
+ optionalParts |= XkmKeyNamesMask;
+ break;
+ case 's':
+ case 'S':
+ optionalParts |= XkmSymbolsMask;
+ break;
+ case 't':
+ case 'T':
+ optionalParts |= XkmTypesMask;
+ break;
+ default:
+ if (warningLevel > 0)
+ {
+ WARN1
+ ("Illegal component for %s option\n",
+ argv[i - 1]);
+ ACTION1
+ ("Ignoring unknown specifier \"%c\"\n",
+ (unsigned int) *tmp2);
+ }
+ break;
+ }
+ }
+ }
+ }
+ else if (strncmp(argv[i], "-p", 2) == 0)
+ {
+ if (isdigit(argv[i][2]))
+ {
+ if (sscanf(&argv[i][2], "%i", &itmp) == 1)
+ dirsToStrip = itmp;
+ }
+ else if ((i < (argc - 1)) && (isdigit(argv[i + 1][0])))
+ {
+ if (sscanf(argv[++i], "%i", &itmp) == 1)
+ dirsToStrip = itmp;
+ }
+ else
+ {
+ dirsToStrip = 0;
+ }
+ if (warningLevel > 5)
+ INFO1("Setting path count to %d\n", dirsToStrip);
+ }
+ else if (strncmp(argv[i], "-R", 2) == 0)
+ {
+ if (argv[i][2] == '\0')
+ {
+ if (warningLevel > 0)
+ {
+ WARN("No root directory specified\n");
+ ACTION("Ignoring -R option\n");
+ }
+ }
+ else if (rootDir != NULL)
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple root directories specified\n");
+ ACTION2("Using %s, ignoring %s\n", rootDir, argv[i]);
+ }
+ }
+ else
+ {
+ rootDir = &argv[i][2];
+ if (warningLevel > 8)
+ {
+ WARN1("Changing root directory to \"%s\"\n", rootDir);
+ }
+ if ((chdir(rootDir) < 0) && (warningLevel > 0))
+ {
+ WARN1("Couldn't change directory to \"%s\"\n", rootDir);
+ ACTION("Root directory (-R) option ignored\n");
+ rootDir = NULL;
+ }
+ }
+ }
+ else if ((strcmp(argv[i], "-synch") == 0)
+ || (strcmp(argv[i], "-s") == 0))
+ {
+ synch = True;
+ }
+ else if (strncmp(argv[i], "-v", 2) == 0)
+ {
+ char *str;
+ if (argv[i][2] != '\0')
+ str = &argv[i][2];
+ else if ((i < (argc - 1)) && (argv[i + 1][0] != '-'))
+ str = argv[++i];
+ else
+ str = NULL;
+ if (str)
+ setVerboseFlags(str);
+ }
+ else if (strncmp(argv[i], "-w", 2) == 0)
+ {
+ if ((i >= (argc - 1)) || (!isdigit(argv[i + 1][0])))
+ {
+ warningLevel = 0;
+ if (isdigit(argv[i][1]))
+ if (sscanf(&argv[i][1], "%i", &itmp) == 1)
+ warningLevel = itmp;
+ }
+ else
+ {
+ if (sscanf(argv[++i], "%i", &itmp) == 1)
+ warningLevel = itmp;
+ }
+ }
+ else if ((strcmp(argv[i], "-xkb") == 0) && (!xkblist))
+ {
+ if ((outputFormat != WANT_DEFAULT)
+ && (outputFormat != WANT_XKB_FILE))
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple output file formats specified\n");
+ ACTION1("\"%s\" flag ignored\n", argv[i]);
+ }
+ }
+ else
+ outputFormat = WANT_XKB_FILE;
+ }
+ else if ((strcmp(argv[i], "-xkm") == 0) && (!xkblist))
+ {
+ if ((outputFormat != WANT_DEFAULT)
+ && (outputFormat != WANT_XKM_FILE))
+ {
+ if (warningLevel > 0)
+ {
+ WARN("Multiple output file formats specified\n");
+ ACTION1("\"%s\" flag ignored\n", argv[i]);
+ }
+ }
+ else
+ outputFormat = WANT_XKM_FILE;
+ }
+ else
+ {
+ ERROR1("Unknown flag \"%s\" on command line\n", argv[i]);
+ Usage(argc, argv);
+ return False;
+ }
}
if (xkblist)
- inputFormat= INPUT_XKB;
- else if (inputFile==NULL) {
- ERROR("No input file specified\n");
- return False;
+ inputFormat = INPUT_XKB;
+ else if (inputFile == NULL)
+ {
+ ERROR("No input file specified\n");
+ return False;
}
- else if (uStringEqual(inputFile,"-")) {
- inputFormat= INPUT_XKB;
+ else if (uStringEqual(inputFile, "-"))
+ {
+ inputFormat = INPUT_XKB;
}
#ifndef WIN32
- else if (strchr(inputFile,':')==0) {
+ else if (strchr(inputFile, ':') == NULL)
+ {
#else
- else if ((strchr(inputFile,':')==0) || (
- strlen(inputFile) > 2 &&
- isalpha(inputFile[0]) &&
- inputFile[1] == ':' && strchr(inputFile + 2,':')==NULL)) {
+ else if ((strchr(inputFile, ':') == NULL) || (strlen(inputFile) > 2 &&
+ isalpha(inputFile[0]) &&
+ inputFile[1] == ':'
+ && strchr(inputFile + 2,
+ ':') == NULL))
+ {
#endif
- int len;
- len= strlen(inputFile);
- if (inputFile[len-1]==')') {
- char *tmp;
- if ((tmp=strchr(inputFile,'('))!=0) {
- *tmp= '\0'; inputFile[len-1]= '\0';
- tmp++;
- if (*tmp=='\0') {
- WARN("Empty map in filename\n");
- ACTION("Ignored\n");
- }
- else if (inputMap==NULL) {
- inputMap= uStringDup(tmp);
- }
- else {
- WARN("Map specified in filename and with -m flag\n");
- ACTION1("map from name (\"%s\") ignored\n",tmp);
- }
- }
- else {
- ERROR1("Illegal name \"%s\" for input file\n",inputFile);
- return False;
- }
- }
- if ((len>4)&&(strcmp(&inputFile[len-4],".xkm")==0)) {
- inputFormat= INPUT_XKM;
- }
- else {
- FILE *file;
- file= fopen(inputFile,"r");
- if (file) {
- if (XkmProbe(file)) inputFormat= INPUT_XKM;
- else inputFormat= INPUT_XKB;
- fclose(file);
- }
- else {
- fprintf(stderr,"Cannot open \"%s\" for reading\n",inputFile);
- return False;
- }
- }
+ int len;
+ len = strlen(inputFile);
+ if (inputFile[len - 1] == ')')
+ {
+ char *tmp;
+ if ((tmp = strchr(inputFile, '(')) != NULL)
+ {
+ *tmp = '\0';
+ inputFile[len - 1] = '\0';
+ tmp++;
+ if (*tmp == '\0')
+ {
+ WARN("Empty map in filename\n");
+ ACTION("Ignored\n");
+ }
+ else if (inputMap == NULL)
+ {
+ inputMap = uStringDup(tmp);
+ }
+ else
+ {
+ WARN("Map specified in filename and with -m flag\n");
+ ACTION1("map from name (\"%s\") ignored\n", tmp);
+ }
+ }
+ else
+ {
+ ERROR1("Illegal name \"%s\" for input file\n", inputFile);
+ return False;
+ }
+ }
+ if ((len > 4) && (strcmp(&inputFile[len - 4], ".xkm") == 0))
+ {
+ inputFormat = INPUT_XKM;
+ }
+ else
+ {
+ FILE *file;
+ file = fopen(inputFile, "r");
+ if (file)
+ {
+ if (XkmProbe(file))
+ inputFormat = INPUT_XKM;
+ else
+ inputFormat = INPUT_XKB;
+ fclose(file);
+ }
+ else
+ {
+ fprintf(stderr, "Cannot open \"%s\" for reading\n",
+ inputFile);
+ return False;
+ }
+ }
}
- else {
- inDpyName= inputFile;
- inputFile= NULL;
- inputFormat= INPUT_XKM;
+ else
+ {
+ inDpyName = inputFile;
+ inputFile = NULL;
+ inputFormat = INPUT_XKM;
}
- if (outputFormat==WANT_DEFAULT) {
- if (xkblist) outputFormat= WANT_LISTING;
- else if (inputFormat==INPUT_XKB) outputFormat= WANT_XKM_FILE;
- else outputFormat= WANT_XKB_FILE;
+ if (outputFormat == WANT_DEFAULT)
+ {
+ if (xkblist)
+ outputFormat = WANT_LISTING;
+ else if (inputFormat == INPUT_XKB)
+ outputFormat = WANT_XKM_FILE;
+ else
+ outputFormat = WANT_XKB_FILE;
}
- if ((outputFormat==WANT_LISTING)&&(inputFormat!=INPUT_XKB)) {
- if (inputFile)
- ERROR("Cannot generate a listing from a .xkm file (yet)\n");
- else ERROR("Cannot generate a listing from an X connection (yet)\n");
- return False;
+ if ((outputFormat == WANT_LISTING) && (inputFormat != INPUT_XKB))
+ {
+ if (inputFile)
+ ERROR("Cannot generate a listing from a .xkm file (yet)\n");
+ else
+ ERROR("Cannot generate a listing from an X connection (yet)\n");
+ return False;
}
- if (xkblist) {
- if (outputFile==NULL) outputFile= uStringDup("-");
- else if (strchr(outputFile,':')!=NULL) {
- ERROR("Cannot write a listing to an X connection\n");
- return False;
- }
+ if (xkblist)
+ {
+ if (outputFile == NULL)
+ outputFile = uStringDup("-");
+ else if (strchr(outputFile, ':') != NULL)
+ {
+ ERROR("Cannot write a listing to an X connection\n");
+ return False;
+ }
}
- else if ((!outputFile) && (inputFile) && uStringEqual(inputFile,"-")) {
- int len= strlen("stdin")+strlen(fileTypeExt[outputFormat])+2;
- outputFile= uTypedCalloc(len,char);
- if (outputFile==NULL) {
- WSGO("Cannot allocate space for output file name\n");
- ACTION("Exiting\n");
- exit(1);
- }
- sprintf(outputFile,"stdin.%s",fileTypeExt[outputFormat]);
+ else if ((!outputFile) && (inputFile) && uStringEqual(inputFile, "-"))
+ {
+ int len = strlen("stdin") + strlen(fileTypeExt[outputFormat]) + 2;
+ outputFile = uTypedCalloc(len, char);
+ if (outputFile == NULL)
+ {
+ WSGO("Cannot allocate space for output file name\n");
+ ACTION("Exiting\n");
+ exit(1);
+ }
+ sprintf(outputFile, "stdin.%s", fileTypeExt[outputFormat]);
}
- else if ((outputFile==NULL)&&(inputFile!=NULL)) {
- int len;
- char *base,*ext;
-
- if (inputMap==NULL) {
- base= strrchr(inputFile,'/');
- if (base==NULL) base= inputFile;
- else base++;
- }
- else base= inputMap;
-
- len= strlen(base)+strlen(fileTypeExt[outputFormat])+2;
- outputFile= uTypedCalloc(len,char);
- if (outputFile==NULL) {
- WSGO("Cannot allocate space for output file name\n");
- ACTION("Exiting\n");
- exit(1);
- }
- ext= strrchr(base,'.');
- if (ext==NULL)
- sprintf(outputFile,"%s.%s",base,fileTypeExt[outputFormat]);
- else {
- strcpy(outputFile,base);
- strcpy(&outputFile[ext-base+1],fileTypeExt[outputFormat]);
- }
+ else if ((outputFile == NULL) && (inputFile != NULL))
+ {
+ int len;
+ char *base, *ext;
+
+ if (inputMap == NULL)
+ {
+ base = strrchr(inputFile, '/');
+ if (base == NULL)
+ base = inputFile;
+ else
+ base++;
+ }
+ else
+ base = inputMap;
+
+ len = strlen(base) + strlen(fileTypeExt[outputFormat]) + 2;
+ outputFile = uTypedCalloc(len, char);
+ if (outputFile == NULL)
+ {
+ WSGO("Cannot allocate space for output file name\n");
+ ACTION("Exiting\n");
+ exit(1);
+ }
+ ext = strrchr(base, '.');
+ if (ext == NULL)
+ sprintf(outputFile, "%s.%s", base, fileTypeExt[outputFormat]);
+ else
+ {
+ strcpy(outputFile, base);
+ strcpy(&outputFile[ext - base + 1], fileTypeExt[outputFormat]);
+ }
}
- else if (outputFile==NULL) {
- int len;
- char *ch,*name,buf[128];
- if (inDpyName[0]==':')
- sprintf(name=buf,"server%s",inDpyName);
- else name= inDpyName;
-
- len= strlen(name)+strlen(fileTypeExt[outputFormat])+2;
- outputFile= uTypedCalloc(len,char);
- if (outputFile==NULL) {
- WSGO("Cannot allocate space for output file name\n");
- ACTION("Exiting\n");
- exit(1);
- }
- strcpy(outputFile,name);
- for (ch=outputFile;(*ch)!='\0';ch++) {
- if (*ch==':') *ch= '-';
- else if (*ch=='.') *ch= '_';
- }
- *ch++= '.';
- strcpy(ch,fileTypeExt[outputFormat]);
+ else if (outputFile == NULL)
+ {
+ int len;
+ char *ch, *name, buf[128];
+ if (inDpyName[0] == ':')
+ snprintf(name = buf, sizeof(buf), "server%s", inDpyName);
+ else
+ name = inDpyName;
+
+ len = strlen(name) + strlen(fileTypeExt[outputFormat]) + 2;
+ outputFile = uTypedCalloc(len, char);
+ if (outputFile == NULL)
+ {
+ WSGO("Cannot allocate space for output file name\n");
+ ACTION("Exiting\n");
+ exit(1);
+ }
+ strcpy(outputFile, name);
+ for (ch = outputFile; (*ch) != '\0'; ch++)
+ {
+ if (*ch == ':')
+ *ch = '-';
+ else if (*ch == '.')
+ *ch = '_';
+ }
+ *ch++ = '.';
+ strcpy(ch, fileTypeExt[outputFormat]);
}
#ifdef WIN32
- else if (strlen(outputFile) > 2 &&
- isalpha(outputFile[0]) &&
- outputFile[1] == ':' && strchr(outputFile + 2,':')==NULL) {
+ else if (strlen(outputFile) > 2 &&
+ isalpha(outputFile[0]) &&
+ outputFile[1] == ':' && strchr(outputFile + 2, ':') == NULL)
+ {
}
#endif
- else if (strchr(outputFile,':')!=NULL) {
- outDpyName= outputFile;
- outputFile= NULL;
- outputFormat= WANT_X_SERVER;
+ else if (strchr(outputFile, ':') != NULL)
+ {
+ outDpyName = outputFile;
+ outputFile = NULL;
+ outputFormat = WANT_X_SERVER;
}
return True;
}
static Display *
-GetDisplay(char *program,char *dpyName)
+GetDisplay(char *program, char *dpyName)
{
-int mjr,mnr,error;
-Display *dpy;
-
- mjr= XkbMajorVersion;
- mnr= XkbMinorVersion;
- dpy= XkbOpenDisplay(dpyName,NULL,NULL,&mjr,&mnr,&error);
- if (dpy==NULL) {
- switch (error) {
- case XkbOD_BadLibraryVersion:
- INFO3("%s was compiled with XKB version %d.%02d\n",
- program,XkbMajorVersion,XkbMinorVersion);
- ERROR2("X library supports incompatible version %d.%02d\n",
- mjr,mnr);
- break;
- case XkbOD_ConnectionRefused:
- ERROR1("Cannot open display \"%s\"\n",dpyName);
- break;
- case XkbOD_NonXkbServer:
- ERROR1("XKB extension not present on %s\n",dpyName);
- break;
- case XkbOD_BadServerVersion:
- INFO3("%s was compiled with XKB version %d.%02d\n",
- program,XkbMajorVersion,XkbMinorVersion);
- ERROR3("Server %s uses incompatible version %d.%02d\n",
- dpyName,mjr,mnr);
- break;
- default:
- WSGO1("Unknown error %d from XkbOpenDisplay\n",error);
- }
+ int mjr, mnr, error;
+ Display *dpy;
+
+ mjr = XkbMajorVersion;
+ mnr = XkbMinorVersion;
+ dpy = XkbOpenDisplay(dpyName, NULL, NULL, &mjr, &mnr, &error);
+ if (dpy == NULL)
+ {
+ switch (error)
+ {
+ case XkbOD_BadLibraryVersion:
+ INFO3("%s was compiled with XKB version %d.%02d\n",
+ program, XkbMajorVersion, XkbMinorVersion);
+ ERROR2("X library supports incompatible version %d.%02d\n",
+ mjr, mnr);
+ break;
+ case XkbOD_ConnectionRefused:
+ ERROR1("Cannot open display \"%s\"\n", dpyName);
+ break;
+ case XkbOD_NonXkbServer:
+ ERROR1("XKB extension not present on %s\n", dpyName);
+ break;
+ case XkbOD_BadServerVersion:
+ INFO3("%s was compiled with XKB version %d.%02d\n",
+ program, XkbMajorVersion, XkbMinorVersion);
+ ERROR3("Server %s uses incompatible version %d.%02d\n",
+ dpyName, mjr, mnr);
+ break;
+ default:
+ WSGO1("Unknown error %d from XkbOpenDisplay\n", error);
+ }
}
else if (synch)
- XSynchronize(dpy,True);
+ XSynchronize(dpy, True);
return dpy;
}
/***====================================================================***/
+#ifdef DEBUG
extern int yydebug;
+#endif
int
-main(int argc,char *argv[])
+main(int argc, char *argv[])
{
-FILE * file;
-XkbFile * rtrn;
-XkbFile * mapToUse;
-int ok;
-XkbFileInfo result;
-Status status;
+ FILE *file; /* input file (or stdin) */
+ XkbFile *rtrn;
+ XkbFile *mapToUse;
+ int ok;
+ XkbFileInfo result;
+ Status status;
yyin = stdin;
uSetEntryFile(NullString);
@@ -706,281 +884,339 @@ Status status;
uSetErrorFile(NullString);
XkbInitIncludePath();
- if (!parseArgs(argc,argv))
- exit(1);
+ if (!parseArgs(argc, argv))
+ exit(1);
#ifdef DEBUG
- if (debugFlags&0x2)
- yydebug= 1;
+ if (debugFlags & 0x2)
+ yydebug = 1;
#endif
if (preErrorMsg)
- uSetPreErrorMessage(preErrorMsg);
+ uSetPreErrorMessage(preErrorMsg);
if (errorPrefix)
- uSetErrorPrefix(errorPrefix);
+ uSetErrorPrefix(errorPrefix);
if (postErrorMsg)
- uSetPostErrorMessage(postErrorMsg);
- file= NULL;
+ uSetPostErrorMessage(postErrorMsg);
+ file = NULL;
XkbInitAtoms(NULL);
XkbAddDefaultDirectoriesToPath();
- if (xkblist) {
- Bool gotSome;
- gotSome= GenerateListing(outputFile);
- if ((warningLevel>7)&&(!gotSome))
- return -1;
- return 0;
+ if (xkblist)
+ {
+ Bool gotSome;
+ gotSome = GenerateListing(outputFile);
+ if ((warningLevel > 7) && (!gotSome))
+ return -1;
+ return 0;
}
- if (inputFile!=NULL) {
- if (uStringEqual(inputFile,"-")) {
- file= stdin;
- inputFile= "stdin";
- }
- else {
- file= fopen(inputFile,"r");
- }
+ if (inputFile != NULL)
+ {
+ if (uStringEqual(inputFile, "-"))
+ {
+ file = stdin;
+ inputFile = "stdin";
+ }
+ else
+ {
+ file = fopen(inputFile, "r");
+ }
}
- else if (inDpyName!=NULL) {
- inDpy= GetDisplay(argv[0],inDpyName);
- if (!inDpy) {
- ACTION("Exiting\n");
- exit(1);
- }
+ else if (inDpyName != NULL)
+ {
+ inDpy = GetDisplay(argv[0], inDpyName);
+ if (!inDpy)
+ {
+ ACTION("Exiting\n");
+ exit(1);
+ }
}
- if (outDpyName!=NULL) {
- outDpy= GetDisplay(argv[0],outDpyName);
- if (!outDpy) {
- ACTION("Exiting\n");
- exit(1);
- }
+ if (outDpyName != NULL)
+ {
+ outDpy = GetDisplay(argv[0], outDpyName);
+ if (!outDpy)
+ {
+ ACTION("Exiting\n");
+ exit(1);
+ }
}
- if ((inDpy==NULL) && (outDpy==NULL)) {
- int mjr,mnr;
- mjr= XkbMajorVersion;
- mnr= XkbMinorVersion;
- if (!XkbLibraryVersion(&mjr,&mnr)) {
- INFO3("%s was compiled with XKB version %d.%02d\n",
- argv[0],XkbMajorVersion,XkbMinorVersion);
- ERROR2("X library supports incompatible version %d.%02d\n",
- mjr,mnr);
- ACTION("Exiting\n");
- exit(1);
- }
+ if ((inDpy == NULL) && (outDpy == NULL))
+ {
+ int mjr, mnr;
+ mjr = XkbMajorVersion;
+ mnr = XkbMinorVersion;
+ if (!XkbLibraryVersion(&mjr, &mnr))
+ {
+ INFO3("%s was compiled with XKB version %d.%02d\n",
+ argv[0], XkbMajorVersion, XkbMinorVersion);
+ ERROR2("X library supports incompatible version %d.%02d\n",
+ mjr, mnr);
+ ACTION("Exiting\n");
+ exit(1);
+ }
}
- if (file) {
- ok= True;
- setScanState(inputFile,1);
- if ((inputFormat==INPUT_XKB)&&(XKBParseFile(file,&rtrn)&&(rtrn!=NULL))){
- fclose(file);
- mapToUse= rtrn;
- if (inputMap!=NULL) {
- while ((mapToUse)&&(!uStringEqual(mapToUse->name,inputMap))) {
- mapToUse= (XkbFile *)mapToUse->common.next;
- }
- if (!mapToUse) {
- FATAL2("No map named \"%s\" in \"%s\"\n",inputMap,
- inputFile);
- /* NOTREACHED */
- }
- }
- else if (rtrn->common.next!=NULL) {
- mapToUse= rtrn;
- for (;mapToUse;mapToUse= (XkbFile*)mapToUse->common.next) {
- if (mapToUse->flags&XkbLC_Default)
- break;
- }
- if (!mapToUse) {
- mapToUse= rtrn;
- if (warningLevel>4) {
- WARN1("No map specified, but \"%s\" has several\n",
- inputFile);
- ACTION1("Using the first defined map, \"%s\"\n",
- mapToUse->name);
- }
- }
- }
- bzero((char *)&result,sizeof(result));
- result.type= mapToUse->type;
- if ((result.xkb= XkbAllocKeyboard())==NULL) {
- WSGO("Cannot allocate keyboard description\n");
- /* NOTREACHED */
- }
- switch (mapToUse->type) {
- case XkmSemanticsFile:
- case XkmLayoutFile:
- case XkmKeymapFile:
- ok= CompileKeymap(mapToUse,&result,MergeReplace);
- break;
- case XkmKeyNamesIndex:
- ok= CompileKeycodes(mapToUse,&result,MergeReplace);
- break;
- case XkmTypesIndex:
- ok= CompileKeyTypes(mapToUse,&result,MergeReplace);
- break;
- case XkmSymbolsIndex:
- /* if it's just symbols, invent key names */
- result.xkb->flags|= AutoKeyNames;
- ok= False;
- break;
- case XkmCompatMapIndex:
- ok= CompileCompatMap(mapToUse,&result,MergeReplace,NULL);
- break;
- case XkmGeometryFile:
- case XkmGeometryIndex:
- /* if it's just a geometry, invent key names */
- result.xkb->flags|= AutoKeyNames;
- ok= CompileGeometry(mapToUse,&result,MergeReplace);
- break;
- default:
- WSGO1("Unknown file type %d\n",mapToUse->type);
- ok= False;
- break;
- }
- }
- else if (inputFormat==INPUT_XKM) {
- unsigned tmp;
- bzero((char *)&result,sizeof(result));
- if ((result.xkb= XkbAllocKeyboard())==NULL) {
- WSGO("Cannot allocate keyboard description\n");
- /* NOTREACHED */
- }
- tmp= XkmReadFile(file,0,XkmKeymapLegal,&result);
- if (tmp==XkmKeymapLegal) {
- ERROR1("Cannot read XKM file \"%s\"\n",inputFile);
- ok= False;
- }
- }
- else {
- INFO1("Errors encountered in %s; not compiled.\n",inputFile);
- ok= False;
- }
+ if (file)
+ {
+ ok = True;
+ setScanState(inputFile, 1);
+ if ((inputFormat == INPUT_XKB) /* parse .xkb file */
+ && (XKBParseFile(file, &rtrn) && (rtrn != NULL)))
+ {
+ fclose(file);
+ mapToUse = rtrn;
+ if (inputMap != NULL) /* map specified on cmdline? */
+ {
+ while ((mapToUse)
+ && (!uStringEqual(mapToUse->name, inputMap)))
+ {
+ mapToUse = (XkbFile *) mapToUse->common.next;
+ }
+ if (!mapToUse)
+ {
+ FATAL2("No map named \"%s\" in \"%s\"\n",
+ inputMap, inputFile);
+ /* NOTREACHED */
+ }
+ }
+ else if (rtrn->common.next != NULL)
+ {
+ /* look for map with XkbLC_Default flag. */
+ mapToUse = rtrn;
+ for (; mapToUse; mapToUse = (XkbFile *) mapToUse->common.next)
+ {
+ if (mapToUse->flags & XkbLC_Default)
+ break;
+ }
+ if (!mapToUse)
+ {
+ mapToUse = rtrn;
+ if (warningLevel > 4)
+ {
+ WARN1
+ ("No map specified, but \"%s\" has several\n",
+ inputFile);
+ ACTION1
+ ("Using the first defined map, \"%s\"\n",
+ mapToUse->name);
+ }
+ }
+ }
+ bzero((char *) &result, sizeof(result));
+ result.type = mapToUse->type;
+ if ((result.xkb = XkbAllocKeyboard()) == NULL)
+ {
+ WSGO("Cannot allocate keyboard description\n");
+ /* NOTREACHED */
+ }
+ switch (mapToUse->type)
+ {
+ case XkmSemanticsFile:
+ case XkmLayoutFile:
+ case XkmKeymapFile:
+ ok = CompileKeymap(mapToUse, &result, MergeReplace);
+ break;
+ case XkmKeyNamesIndex:
+ ok = CompileKeycodes(mapToUse, &result, MergeReplace);
+ break;
+ case XkmTypesIndex:
+ ok = CompileKeyTypes(mapToUse, &result, MergeReplace);
+ break;
+ case XkmSymbolsIndex:
+ /* if it's just symbols, invent key names */
+ result.xkb->flags |= AutoKeyNames;
+ ok = False;
+ break;
+ case XkmCompatMapIndex:
+ ok = CompileCompatMap(mapToUse, &result, MergeReplace, NULL);
+ break;
+ case XkmGeometryFile:
+ case XkmGeometryIndex:
+ /* if it's just a geometry, invent key names */
+ result.xkb->flags |= AutoKeyNames;
+ ok = CompileGeometry(mapToUse, &result, MergeReplace);
+ break;
+ default:
+ WSGO1("Unknown file type %d\n", mapToUse->type);
+ ok = False;
+ break;
+ }
+ }
+ else if (inputFormat == INPUT_XKM) /* parse xkm file */
+ {
+ unsigned tmp;
+ bzero((char *) &result, sizeof(result));
+ if ((result.xkb = XkbAllocKeyboard()) == NULL)
+ {
+ WSGO("Cannot allocate keyboard description\n");
+ /* NOTREACHED */
+ }
+ tmp = XkmReadFile(file, 0, XkmKeymapLegal, &result);
+ if (tmp == XkmKeymapLegal)
+ {
+ ERROR1("Cannot read XKM file \"%s\"\n", inputFile);
+ ok = False;
+ }
+ }
+ else
+ {
+ INFO1("Errors encountered in %s; not compiled.\n", inputFile);
+ ok = False;
+ }
}
- else if (inDpy!=NULL) {
- bzero((char *)&result,sizeof(result));
- result.type= XkmKeymapFile;
- result.xkb= XkbGetMap(inDpy,XkbAllMapComponentsMask,device_id);
- if (result.xkb==NULL)
- WSGO("Cannot load keyboard description\n");
- if (XkbGetIndicatorMap(inDpy,~0,result.xkb)!=Success)
- WSGO("Could not load indicator map\n");
- if (XkbGetControls(inDpy,XkbAllControlsMask,result.xkb)!=Success)
- WSGO("Could not load keyboard controls\n");
- if (XkbGetCompatMap(inDpy,XkbAllCompatMask,result.xkb)!=Success)
- WSGO("Could not load compatibility map\n");
- if (XkbGetNames(inDpy,XkbAllNamesMask,result.xkb)!=Success)
- WSGO("Could not load names\n");
- if ((status=XkbGetGeometry(inDpy,result.xkb))!=Success) {
- if (warningLevel>3) {
- char buf[100];
- buf[0]= '\0';
- XGetErrorText(inDpy,status,buf,100);
- WARN1("Could not load keyboard geometry for %s\n",inDpyName);
- ACTION1("%s\n",buf);
- ACTION("Resulting keymap file will not describe geometry\n");
- }
- }
- if (computeDflts)
- ok= (ComputeKbdDefaults(result.xkb)==Success);
- else ok= True;
+ else if (inDpy != NULL)
+ {
+ bzero((char *) &result, sizeof(result));
+ result.type = XkmKeymapFile;
+ result.xkb = XkbGetMap(inDpy, XkbAllMapComponentsMask, device_id);
+ if (result.xkb == NULL)
+ WSGO("Cannot load keyboard description\n");
+ if (XkbGetIndicatorMap(inDpy, ~0, result.xkb) != Success)
+ WSGO("Could not load indicator map\n");
+ if (XkbGetControls(inDpy, XkbAllControlsMask, result.xkb) != Success)
+ WSGO("Could not load keyboard controls\n");
+ if (XkbGetCompatMap(inDpy, XkbAllCompatMask, result.xkb) != Success)
+ WSGO("Could not load compatibility map\n");
+ if (XkbGetNames(inDpy, XkbAllNamesMask, result.xkb) != Success)
+ WSGO("Could not load names\n");
+ if ((status = XkbGetGeometry(inDpy, result.xkb)) != Success)
+ {
+ if (warningLevel > 3)
+ {
+ char buf[100];
+ buf[0] = '\0';
+ XGetErrorText(inDpy, status, buf, 100);
+ WARN1("Could not load keyboard geometry for %s\n", inDpyName);
+ ACTION1("%s\n", buf);
+ ACTION("Resulting keymap file will not describe geometry\n");
+ }
+ }
+ if (computeDflts)
+ ok = (ComputeKbdDefaults(result.xkb) == Success);
+ else
+ ok = True;
}
- else {
- fprintf(stderr,"Cannot open \"%s\" to compile\n",inputFile);
- ok= 0;
+ else
+ {
+ fprintf(stderr, "Cannot open \"%s\" to compile\n", inputFile);
+ ok = 0;
}
- if (ok) {
- FILE *out = stdout;
- if ((inDpy!=outDpy)&&
- (XkbChangeKbdDisplay(outDpy,&result)!=Success)) {
- WSGO2("Error converting keyboard display from %s to %s\n",
- inDpyName,outDpyName);
- exit(1);
- }
- if (outputFile!=NULL) {
- if (uStringEqual(outputFile,"-"))
- outputFile= "stdout";
- else {
- /*
- * fix to prevent symlink attack (e.g.,
- * ln -s /etc/passwd /var/tmp/server-0.xkm)
- */
- /*
- * this patch may have POSIX, Linux, or GNU libc bias
- * -- Branden Robinson
- */
- int outputFileFd;
- int binMode = 0;
- const char *openMode = "w";
- unlink(outputFile);
+ if (ok)
+ {
+ FILE *out = stdout;
+ if ((inDpy != outDpy) &&
+ (XkbChangeKbdDisplay(outDpy, &result) != Success))
+ {
+ WSGO2("Error converting keyboard display from %s to %s\n",
+ inDpyName, outDpyName);
+ exit(1);
+ }
+ if (outputFile != NULL)
+ {
+ if (uStringEqual(outputFile, "-"))
+ outputFile = "stdout";
+ else
+ {
+ /*
+ * fix to prevent symlink attack (e.g.,
+ * ln -s /etc/passwd /var/tmp/server-0.xkm)
+ */
+ /*
+ * this patch may have POSIX, Linux, or GNU libc bias
+ * -- Branden Robinson
+ */
+ int outputFileFd;
+ int binMode = 0;
+ const char *openMode = "w";
+ unlink(outputFile);
#ifdef O_BINARY
- switch (outputFormat) {
- case WANT_XKM_FILE:
- binMode = O_BINARY;
- openMode = "wb";
- break;
- default:
- binMode = 0;
- break;
- }
+ switch (outputFormat)
+ {
+ case WANT_XKM_FILE:
+ binMode = O_BINARY;
+ openMode = "wb";
+ break;
+ default:
+ binMode = 0;
+ break;
+ }
#endif
- outputFileFd= open(outputFile, O_WRONLY|O_CREAT|O_EXCL,
- S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH|binMode);
- if (outputFileFd<0) {
- ERROR1("Cannot open \"%s\" to write keyboard description\n",
- outputFile);
- ACTION("Exiting\n");
- exit(1);
- }
+ outputFileFd =
+ open(outputFile, O_WRONLY | O_CREAT | O_EXCL,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH
+ | S_IWOTH | binMode);
+ if (outputFileFd < 0)
+ {
+ ERROR1
+ ("Cannot open \"%s\" to write keyboard description\n",
+ outputFile);
+ ACTION("Exiting\n");
+ exit(1);
+ }
#ifndef WIN32
- out= fdopen(outputFileFd, openMode);
+ out = fdopen(outputFileFd, openMode);
#else
- close(outputFileFd);
- out= fopen(outputFile, "wb");
+ close(outputFileFd);
+ out = fopen(outputFile, "wb");
#endif
- /* end BR */
- if (out==NULL) {
- ERROR1("Cannot open \"%s\" to write keyboard description\n",
- outputFile);
- ACTION("Exiting\n");
- exit(1);
- }
- }
- }
- switch (outputFormat) {
- case WANT_XKM_FILE:
- ok= XkbWriteXKMFile(out,&result);
- break;
- case WANT_XKB_FILE:
- ok= XkbWriteXKBFile(out,&result,showImplicit,NULL,NULL);
- break;
- case WANT_C_HDR:
- ok= XkbWriteCFile(out,outputFile,&result);
- break;
- case WANT_X_SERVER:
- if (!(ok= XkbWriteToServer(&result))) {
- ERROR2("%s in %s\n",_XkbErrMessages[_XkbErrCode],
- _XkbErrLocation?_XkbErrLocation:"unknown");
- ACTION1("Couldn't write keyboard description to %s\n",
- outDpyName);
- }
- break;
- default:
- WSGO1("Unknown output format %d\n",outputFormat);
- ACTION("No output file created\n");
- ok= False;
- break;
- }
- if (outputFormat!=WANT_X_SERVER) {
- fclose(out);
- if (!ok) {
- ERROR2("%s in %s\n",_XkbErrMessages[_XkbErrCode],
- _XkbErrLocation?_XkbErrLocation:"unknown");
- ACTION1("Output file \"%s\" removed\n",outputFile);
- unlink(outputFile);
- }
- }
+ /* end BR */
+ if (out == NULL)
+ {
+ ERROR1
+ ("Cannot open \"%s\" to write keyboard description\n",
+ outputFile);
+ ACTION("Exiting\n");
+ exit(1);
+ }
+ }
+ }
+ switch (outputFormat)
+ {
+ case WANT_XKM_FILE:
+ ok = XkbWriteXKMFile(out, &result);
+ break;
+ case WANT_XKB_FILE:
+ ok = XkbWriteXKBFile(out, &result, showImplicit, NULL, NULL);
+ break;
+ case WANT_C_HDR:
+ ok = XkbWriteCFile(out, outputFile, &result);
+ break;
+ case WANT_X_SERVER:
+ if (!(ok = XkbWriteToServer(&result)))
+ {
+ ERROR2("%s in %s\n", _XkbErrMessages[_XkbErrCode],
+ _XkbErrLocation ? _XkbErrLocation : "unknown");
+ ACTION1("Couldn't write keyboard description to %s\n",
+ outDpyName);
+ }
+ break;
+ default:
+ WSGO1("Unknown output format %d\n", outputFormat);
+ ACTION("No output file created\n");
+ ok = False;
+ break;
+ }
+ if (outputFormat != WANT_X_SERVER)
+ {
+ if (fclose(out))
+ {
+ ERROR1("Cannot close \"%s\" properly (not enough space?)\n",
+ outputFile);
+ ok= False;
+ }
+ else if (!ok)
+ {
+ ERROR2("%s in %s\n", _XkbErrMessages[_XkbErrCode],
+ _XkbErrLocation ? _XkbErrLocation : "unknown");
+ }
+ if (!ok)
+ {
+ ACTION1("Output file \"%s\" removed\n", outputFile);
+ unlink(outputFile);
+ }
+ }
}
- if (inDpy)
- XCloseDisplay(inDpy);
- inDpy= NULL;
+ if (inDpy)
+ XCloseDisplay(inDpy);
+ inDpy = NULL;
if (outDpy)
- XCloseDisplay(outDpy);
+ XCloseDisplay(outDpy);
uFinishUp();
- return (ok==0);
+ return (ok == 0);
}
diff --git a/app/xkbcomp/xkbcomp.h b/app/xkbcomp/xkbcomp.h
index b9b9caed1..d6a718541 100644
--- a/app/xkbcomp/xkbcomp.h
+++ b/app/xkbcomp/xkbcomp.h
@@ -1,4 +1,3 @@
-/* $Xorg: xkbcomp.h,v 1.3 2000/08/17 19:54:33 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,13 +23,11 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/xkbcomp.h,v 3.8 2001/12/19 21:30:30 dawes Exp $ */
#ifndef XKBCOMP_H
#define XKBCOMP_H 1
#ifndef DEBUG_VAR
-#define DEBUG_VAR_NOT_LOCAL
#define DEBUG_VAR debugFlags
#endif
@@ -78,9 +75,10 @@ extern char *scanFile;
#define FileSymInterp 100
-typedef struct _ParseCommon {
- unsigned stmtType;
- struct _ParseCommon *next;
+typedef struct _ParseCommon
+{
+ unsigned stmtType;
+ struct _ParseCommon *next;
} ParseCommon;
#define ExprValue 0
@@ -111,188 +109,215 @@ typedef struct _ParseCommon {
#define AutoKeyNames (1L << 0)
#define CreateKeyNames(x) ((x)->flags&AutoKeyNames)
-extern unsigned warningLevel;
-extern unsigned optionalParts;
-
-typedef struct _IncludeStmt {
- ParseCommon common;
- unsigned merge;
- char *stmt;
- char *file;
- char *map;
- char *modifier;
- char *path;
- struct _IncludeStmt *next;
+extern unsigned warningLevel;
+extern unsigned optionalParts;
+
+typedef struct _IncludeStmt
+{
+ ParseCommon common;
+ unsigned merge;
+ char *stmt;
+ char *file;
+ char *map;
+ char *modifier;
+ char *path;
+ struct _IncludeStmt *next;
} IncludeStmt;
-typedef struct _Expr {
- ParseCommon common;
- unsigned op;
- unsigned type;
- union {
- struct {
- struct _Expr *left;
- struct _Expr *right;
- } binary;
- struct {
- Atom element;
- Atom field;
- } field;
- struct {
- Atom element;
- Atom field;
- struct _Expr *entry;
- } array;
- struct {
- Atom name;
- struct _Expr *args;
- } action;
- struct {
- int nSyms;
- int szSyms;
- KeySym * syms;
- } list;
- struct {
- int x;
- int y;
- } coord;
- struct _Expr *child;
- Atom str;
- unsigned uval;
- int ival;
- char keyName[5];
- Opaque ptr;
+typedef struct _Expr
+{
+ ParseCommon common;
+ unsigned op;
+ unsigned type;
+ union
+ {
+ struct
+ {
+ struct _Expr *left;
+ struct _Expr *right;
+ } binary;
+ struct
+ {
+ Atom element;
+ Atom field;
+ } field;
+ struct
+ {
+ Atom element;
+ Atom field;
+ struct _Expr *entry;
+ } array;
+ struct
+ {
+ Atom name;
+ struct _Expr *args;
+ } action;
+ struct
+ {
+ int nSyms;
+ int szSyms;
+ char **syms;
+ } list;
+ struct
+ {
+ int x;
+ int y;
+ } coord;
+ struct _Expr *child;
+ Atom str;
+ unsigned uval;
+ int ival;
+ char keyName[5];
+ Opaque ptr;
} value;
} ExprDef;
-typedef struct _VarDef {
- ParseCommon common;
- unsigned merge;
- ExprDef *name;
- ExprDef *value;
+typedef struct _VarDef
+{
+ ParseCommon common;
+ unsigned merge;
+ ExprDef *name;
+ ExprDef *value;
} VarDef;
-typedef struct _VModDef {
- ParseCommon common;
- unsigned merge;
- Atom name;
- ExprDef *value;
+typedef struct _VModDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom name;
+ ExprDef *value;
} VModDef;
-typedef struct _KeycodeDef {
- ParseCommon common;
- unsigned merge;
- char name[5];
- ExprDef *value;
+typedef struct _KeycodeDef
+{
+ ParseCommon common;
+ unsigned merge;
+ char name[5];
+ ExprDef *value;
} KeycodeDef;
-typedef struct _KeyAliasDef {
- ParseCommon common;
- unsigned merge;
- char alias[5];
- char real[5];
+typedef struct _KeyAliasDef
+{
+ ParseCommon common;
+ unsigned merge;
+ char alias[5];
+ char real[5];
} KeyAliasDef;
-typedef struct _KeyTypeDef {
- ParseCommon common;
- unsigned merge;
- Atom name;
- VarDef *body;
+typedef struct _KeyTypeDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom name;
+ VarDef *body;
} KeyTypeDef;
-typedef struct _SymbolsDef {
- ParseCommon common;
- unsigned merge;
- char keyName[5];
- ExprDef * symbols;
+typedef struct _SymbolsDef
+{
+ ParseCommon common;
+ unsigned merge;
+ char keyName[5];
+ ExprDef *symbols;
} SymbolsDef;
-typedef struct _ModMapDef {
- ParseCommon common;
- unsigned merge;
- Atom modifier;
- ExprDef * keys;
+typedef struct _ModMapDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom modifier;
+ ExprDef *keys;
} ModMapDef;
-typedef struct _GroupCompatDef {
- ParseCommon common;
- unsigned merge;
- int group;
- ExprDef * def;
+typedef struct _GroupCompatDef
+{
+ ParseCommon common;
+ unsigned merge;
+ int group;
+ ExprDef *def;
} GroupCompatDef;
-typedef struct _InterpDef {
- ParseCommon common;
- unsigned merge;
- KeySym sym;
- ExprDef *match;
- VarDef *def;
+typedef struct _InterpDef
+{
+ ParseCommon common;
+ unsigned merge;
+ KeySym sym;
+ ExprDef *match;
+ VarDef *def;
} InterpDef;
-typedef struct _IndicatorNameDef {
- ParseCommon common;
- unsigned merge;
- int ndx;
- ExprDef * name;
- Bool virtual;
+typedef struct _IndicatorNameDef
+{
+ ParseCommon common;
+ unsigned merge;
+ int ndx;
+ ExprDef *name;
+ Bool virtual;
} IndicatorNameDef;
-typedef struct _OutlineDef {
- ParseCommon common;
- Atom field;
- int nPoints;
- ExprDef * points;
+typedef struct _OutlineDef
+{
+ ParseCommon common;
+ Atom field;
+ int nPoints;
+ ExprDef *points;
} OutlineDef;
-typedef struct _ShapeDef {
- ParseCommon common;
- unsigned merge;
- Atom name;
- int nOutlines;
- OutlineDef * outlines;
+typedef struct _ShapeDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom name;
+ int nOutlines;
+ OutlineDef *outlines;
} ShapeDef;
-typedef struct _KeyDef {
- ParseCommon common;
- unsigned defined;
- char * name;
- ExprDef * expr;
+typedef struct _KeyDef
+{
+ ParseCommon common;
+ unsigned defined;
+ char *name;
+ ExprDef *expr;
} KeyDef;
-typedef struct _RowDef {
- ParseCommon common;
- int nKeys;
- KeyDef * keys;
+typedef struct _RowDef
+{
+ ParseCommon common;
+ int nKeys;
+ KeyDef *keys;
} RowDef;
-typedef struct _SectionDef {
- ParseCommon common;
- unsigned merge;
- Atom name;
- int nRows;
- RowDef * rows;
+typedef struct _SectionDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom name;
+ int nRows;
+ RowDef *rows;
} SectionDef;
-typedef struct _OverlayKeyDef {
- ParseCommon common;
- char over[5];
- char under[5];
+typedef struct _OverlayKeyDef
+{
+ ParseCommon common;
+ char over[5];
+ char under[5];
} OverlayKeyDef;
-typedef struct _OverlayDef {
- ParseCommon common;
- unsigned merge;
- Atom name;
- int nKeys;
- OverlayKeyDef * keys;
+typedef struct _OverlayDef
+{
+ ParseCommon common;
+ unsigned merge;
+ Atom name;
+ int nKeys;
+ OverlayKeyDef *keys;
} OverlayDef;
-typedef struct _DoodadDef {
- ParseCommon common;
- unsigned merge;
- unsigned type;
- Atom name;
- VarDef * body;
+typedef struct _DoodadDef
+{
+ ParseCommon common;
+ unsigned merge;
+ unsigned type;
+ Atom name;
+ VarDef *body;
} DoodadDef;
/* IndicatorMapDef doesn't use the type field, but the rest of the fields
@@ -300,55 +325,50 @@ typedef struct _DoodadDef {
any strict aliasing problems. */
#define IndicatorMapDef DoodadDef
-typedef struct _XkbFile {
- ParseCommon common;
- int type;
- char * topName;
- char * name;
- ParseCommon *defs;
- int id;
- unsigned flags;
- Bool compiled;
+typedef struct _XkbFile
+{
+ ParseCommon common;
+ int type;
+ char *topName;
+ char *name;
+ ParseCommon *defs;
+ int id;
+ unsigned flags;
+ Bool compiled;
} XkbFile;
-extern Bool CompileKeymap(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */
-);
-
-extern Bool CompileKeycodes(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */
-);
-
-extern Bool CompileGeometry(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */
-);
-
-extern Bool CompileKeyTypes(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */
-);
+extern Bool CompileKeymap(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */
+ );
+
+extern Bool CompileKeycodes(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */
+ );
+
+extern Bool CompileGeometry(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */
+ );
+
+extern Bool CompileKeyTypes(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */
+ );
typedef struct _LEDInfo *LEDInfoPtr;
-extern Bool CompileCompatMap(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */,
- LEDInfoPtr * /* unboundLEDs */
-);
+extern Bool CompileCompatMap(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */ ,
+ LEDInfoPtr * /* unboundLEDs */
+ );
-extern Bool CompileSymbols(
- XkbFile * /* file */,
- XkbFileInfo * /* result */,
- unsigned /* merge */
-);
+extern Bool CompileSymbols(XkbFile * /* file */ ,
+ XkbFileInfo * /* result */ ,
+ unsigned /* merge */
+ );
#define WantLongListing (1<<0)
#define WantPartialMaps (1<<1)
@@ -356,25 +376,21 @@ extern Bool CompileSymbols(
#define WantFullNames (1<<3)
#define ListRecursive (1<<4)
-extern char * rootDir;
+extern char *rootDir;
extern unsigned verboseLevel;
-extern unsigned dirsToStrip;
+extern unsigned dirsToStrip;
-extern Bool AddListing(
- char * /* file */,
- char * /* map */
-);
+extern Bool AddListing(char * /* file */ ,
+ char * /* map */
+ );
-extern Bool AddMatchingFiles(
- char * /* head_in */
-);
+extern Bool AddMatchingFiles(char * /* head_in */
+ );
-extern int AddMapOnly(
- char * /* map */
-);
+extern int AddMapOnly(char * /* map */
+ );
-extern int GenerateListing(
- char * /* filename */
-);
+extern int GenerateListing(char * /* filename */
+ );
#endif /* XKBCOMP_H */
diff --git a/app/xkbcomp/xkbcomp.man b/app/xkbcomp/xkbcomp.man
index aa18d3e72..0e4d29454 100644
--- a/app/xkbcomp/xkbcomp.man
+++ b/app/xkbcomp/xkbcomp.man
@@ -1,9 +1,3 @@
-.\" $Xorg: xkbcomp.man,v 1.3 2000/08/17 19:54:33 cpqbld Exp $
-.\"
-.\"
-.\"
-.\"
-.\" $XFree86: xc/programs/xkbcomp/xkbcomp.man,v 1.11 2003/07/28 21:57:02 herrb Exp $
.\"
.TH XKBCOMP 1 __xorgversion__
.SH NAME
@@ -63,6 +57,9 @@ To prevent the current and default directories from being searched,
use the \-I option alone (i.e. without a directory), before any \-I
options that specify the directories you do want searched.
.TP 8
+.B \-i\ \fIdeviceid\fP
+Specifies device ID (not name) to compile for.
+.TP 8
.B \-l
List maps that specify the \fImap\fP pattern in any files listed on the
command line (not implemented yet).
diff --git a/app/xkbcomp/xkbparse.y b/app/xkbcomp/xkbparse.y
index 52afa2b80..d73b92a27 100644
--- a/app/xkbcomp/xkbparse.y
+++ b/app/xkbcomp/xkbparse.y
@@ -1,4 +1,3 @@
-/* $Xorg: xkbparse.y,v 1.3 2000/08/17 19:54:34 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/xkbparse.y,v 3.11tsi Exp $ */
%token
END_OF_FILE 0
@@ -100,6 +98,7 @@
#include <X11/extensions/XKBgeom.h>
#include <stdlib.h>
+unsigned int parseDebug;
%}
%right EQUALS
@@ -137,9 +136,9 @@
XkbFile *file;
}
%type <ival> Number Integer Float SignedNumber
-%type <uval> XkbCompositeType FileType MergeMode OptMergeMode KeySym
+%type <uval> XkbCompositeType FileType MergeMode OptMergeMode
%type <uval> DoodadType Flag Flags OptFlags
-%type <str> KeyName MapName OptMapName
+%type <str> KeyName MapName OptMapName KeySym
%type <sval> FieldSpec Ident Element String
%type <any> DeclList Decl
%type <expr> OptExprList ExprList Expr Term Lhs Terminal ArrayInit
@@ -312,10 +311,10 @@ Decl : OptMergeMode VarDecl
{
if ($1==MergeAltForm) {
yyerror("cannot use 'alternate' to include other maps");
- $$= &IncludeCreate(scanStr,MergeDefault)->common;
+ $$= &IncludeCreate(scanBuf,MergeDefault)->common;
}
else {
- $$= &IncludeCreate(scanStr,$1)->common;
+ $$= &IncludeCreate(scanBuf,$1)->common;
}
}
;
@@ -375,9 +374,9 @@ InterpretDecl : INTERPRET InterpretMatch OBRACE
;
InterpretMatch : KeySym PLUS Expr
- { $$= InterpCreate((KeySym)$1,$3); }
+ { $$= InterpCreate(XStringToKeysym($1), $3); }
| KeySym
- { $$= InterpCreate((KeySym)$1,NULL); }
+ { $$= InterpCreate(XStringToKeysym($1), NULL); }
;
VarDeclList : VarDeclList VarDecl
@@ -717,33 +716,17 @@ OptKeySymList : KeySymList { $$= $1; }
;
KeySymList : KeySymList COMMA KeySym
- { $$= AppendKeysymList($1,(KeySym)$3); }
+ { $$= AppendKeysymList($1,$3); }
| KeySym
- { $$= CreateKeysymList((KeySym)$1); }
+ { $$= CreateKeysymList($1); }
;
-KeySym : IDENT
- {
- KeySym sym;
- if (LookupKeysym(scanStr,&sym))
- $$= sym;
- else {
- char buf[120];
- sprintf(buf,"expected keysym, got %s",
- uStringText(scanStr));
- yyerror(buf);
- yynerrs++;
- $$= NoSymbol;
- }
- }
- | SECTION
- {
- $$= XK_section;
- }
+KeySym : IDENT { $$= strdup(scanBuf); }
+ | SECTION { $$= strdup("section"); }
| Integer
{
- if ($1<10) $$= $1+'0'; /* XK_0 .. XK_9 */
- else $$= $1;
+ if ($1<10) { $$= malloc(2); $$[0]= '0' + $1; $$[1]= '\0'; }
+ else { $$= malloc(19); snprintf($$, 19, "0x%x", $1); }
}
;
@@ -761,21 +744,21 @@ Float : FLOAT { $$= scanInt; }
Integer : INTEGER { $$= scanInt; }
;
-KeyName : KEYNAME { $$= scanStr; scanStr= NULL; }
+KeyName : KEYNAME { $$= strdup(scanBuf); }
;
-Ident : IDENT { $$= XkbInternAtom(NULL,scanStr,False); }
+Ident : IDENT { $$= XkbInternAtom(NULL,scanBuf,False); }
| DEFAULT { $$= XkbInternAtom(NULL,"default",False); }
;
-String : STRING { $$= XkbInternAtom(NULL,scanStr,False); }
+String : STRING { $$= XkbInternAtom(NULL,scanBuf,False); }
;
OptMapName : MapName { $$= $1; }
| { $$= NULL; }
;
-MapName : STRING { $$= scanStr; scanStr= NULL; }
+MapName : STRING { $$= strdup(scanBuf); }
;
%%
void
@@ -784,8 +767,8 @@ yyerror(const char *s)
if (warningLevel>0) {
(void)fprintf(stderr,"%s: line %d of %s\n",s,lineNum,
(scanFile?scanFile:"(unknown)"));
- if ((scanStr)&&(warningLevel>3))
- (void)fprintf(stderr,"last scanned symbol is: %s\n",scanStr);
+ if ((warningLevel>3))
+ (void)fprintf(stderr,"last scanned symbol is: %s\n",scanBuf);
}
return;
}
diff --git a/app/xkbcomp/xkbpath.c b/app/xkbcomp/xkbpath.c
index 0a7329c8e..68020129e 100644
--- a/app/xkbcomp/xkbpath.c
+++ b/app/xkbcomp/xkbpath.c
@@ -1,4 +1,3 @@
-/* $Xorg: xkbpath.c,v 1.3 2000/08/17 19:54:34 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,12 +23,10 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/xkbpath.c,v 3.7 2002/06/05 00:00:38 dawes Exp $ */
#include <X11/Xlib.h>
#include <X11/XKBlib.h>
-#define DEBUG_VAR_NOT_LOCAL
#define DEBUG_VAR debugFlags
#include "utils.h"
#include <stdlib.h>
@@ -44,87 +41,130 @@
#define PATH_MAX 1024
#endif
-#define PATH_CHUNK 8
+#define PATH_CHUNK 8 /* initial szPath */
-static Bool noDefaultPath = False;
-static int longestPath;
-static int szPath;
-static int nPathEntries;
-static char ** includePath;
+static Bool noDefaultPath = False;
+static int szPath; /* number of entries allocated for includePath */
+static int nPathEntries; /* number of actual entries in includePath */
+static char **includePath; /* Holds all directories we might be including data from */
+/**
+ * Extract the first token from an include statement.
+ * @param str_inout Input statement, modified in-place. Can be passed in
+ * repeatedly. If str_inout is NULL, the parsing has completed.
+ * @param file_rtrn Set to the include file to be used.
+ * @param map_rtrn Set to whatever comes after ), if any.
+ * @param nextop_rtrn Set to the next operation in the complete statement.
+ * @param extra_data Set to the string between ( and ), if any.
+ *
+ * @return True if parsing was succcessful, False for an illegal string.
+ *
+ * Example: "evdev+aliases(qwerty)"
+ * str_inout = aliases(qwerty)
+ * nextop_retrn = +
+ * extra_data = NULL
+ * file_rtrn = evdev
+ * map_rtrn = NULL
+ *
+ * 2nd run with "aliases(qwerty)"
+ * str_inout = NULL
+ * file_rtrn = aliases
+ * map_rtrn = qwerty
+ * extra_data = NULL
+ * nextop_retrn = ""
+ *
+ */
Bool
-XkbParseIncludeMap(char **str_inout,char **file_rtrn,char **map_rtrn,
- char *nextop_rtrn, char **extra_data)
+XkbParseIncludeMap(char **str_inout, char **file_rtrn, char **map_rtrn,
+ char *nextop_rtrn, char **extra_data)
{
-char *tmp,*str,*next;
+ char *tmp, *str, *next;
- str= *str_inout;
- if ((*str=='+')||(*str=='|')) {
- *file_rtrn= *map_rtrn= NULL;
- *nextop_rtrn= *str;
- next= str+1;
+ str = *str_inout;
+ if ((*str == '+') || (*str == '|'))
+ {
+ *file_rtrn = *map_rtrn = NULL;
+ *nextop_rtrn = *str;
+ next = str + 1;
}
- else if (*str=='%') {
- *file_rtrn= *map_rtrn= NULL;
- *nextop_rtrn= str[1];
- next= str+2;
+ else if (*str == '%')
+ {
+ *file_rtrn = *map_rtrn = NULL;
+ *nextop_rtrn = str[1];
+ next = str + 2;
}
- else {
- next= strpbrk(str,"|+");
- if (next) {
- *nextop_rtrn= *next;
- *next++= '\0';
- }
- else {
- *nextop_rtrn= '\0';
- next= NULL;
- }
- tmp= strchr(str,':');
- if (tmp != NULL) {
- *tmp++ = '\0';
- *extra_data = uStringDup(tmp);
- }
- else {
- *extra_data = NULL;
- }
- tmp= strchr(str,'(');
- if (tmp==NULL) {
- *file_rtrn= uStringDup(str);
- *map_rtrn= NULL;
- }
- else if (str[0]=='(') {
- uFree(*extra_data);
- return False;
- }
- else {
- *tmp++= '\0';
- *file_rtrn= uStringDup(str);
- str= tmp;
- tmp= strchr(str,')');
- if ((tmp==NULL)||(tmp[1]!='\0')) {
- uFree(*file_rtrn);
- uFree(*extra_data);
- return False;
- }
- *tmp++= '\0';
- *map_rtrn= uStringDup(str);
- }
+ else
+ {
+ /* search for tokens inside the string */
+ next = strpbrk(str, "|+");
+ if (next)
+ {
+ /* set nextop_rtrn to \0, next to next character */
+ *nextop_rtrn = *next;
+ *next++ = '\0';
+ }
+ else
+ {
+ *nextop_rtrn = '\0';
+ next = NULL;
+ }
+ /* search for :, store result in extra_data */
+ tmp = strchr(str, ':');
+ if (tmp != NULL)
+ {
+ *tmp++ = '\0';
+ *extra_data = uStringDup(tmp);
+ }
+ else
+ {
+ *extra_data = NULL;
+ }
+ tmp = strchr(str, '(');
+ if (tmp == NULL)
+ {
+ *file_rtrn = uStringDup(str);
+ *map_rtrn = NULL;
+ }
+ else if (str[0] == '(')
+ {
+ uFree(*extra_data);
+ return False;
+ }
+ else
+ {
+ *tmp++ = '\0';
+ *file_rtrn = uStringDup(str);
+ str = tmp;
+ tmp = strchr(str, ')');
+ if ((tmp == NULL) || (tmp[1] != '\0'))
+ {
+ uFree(*file_rtrn);
+ uFree(*extra_data);
+ return False;
+ }
+ *tmp++ = '\0';
+ *map_rtrn = uStringDup(str);
+ }
}
- if (*nextop_rtrn=='\0')
- *str_inout= NULL;
- else if ((*nextop_rtrn=='|')||(*nextop_rtrn=='+'))
- *str_inout= next;
- else return False;
+ if (*nextop_rtrn == '\0')
+ *str_inout = NULL;
+ else if ((*nextop_rtrn == '|') || (*nextop_rtrn == '+'))
+ *str_inout = next;
+ else
+ return False;
return True;
}
+/**
+ * Init memory for include paths.
+ */
Bool
XkbInitIncludePath(void)
{
- szPath= PATH_CHUNK;
- includePath= (char **)calloc(szPath,sizeof(char *));
- if (includePath==NULL)
- return False;
+ szPath = PATH_CHUNK;
+ includePath = (char **) calloc(szPath, sizeof(char *));
+ if (includePath == NULL)
+ return False;
return True;
}
@@ -132,191 +172,249 @@ void
XkbAddDefaultDirectoriesToPath(void)
{
if (noDefaultPath)
- return;
+ return;
XkbAddDirectoryToPath(DFLT_XKB_CONFIG_ROOT);
}
+/**
+ * Remove all entries from the global includePath.
+ */
void
XkbClearIncludePath(void)
{
-register int i;
+ register int i;
- if (szPath>0) {
- for (i=0;i<nPathEntries;i++) {
- if (includePath[i]!=NULL) {
- uFree(includePath[i]);
- includePath[i]= NULL;
- }
- }
- nPathEntries= 0;
- longestPath= 0;
+ if (szPath > 0)
+ {
+ for (i = 0; i < nPathEntries; i++)
+ {
+ if (includePath[i] != NULL)
+ {
+ uFree(includePath[i]);
+ includePath[i] = NULL;
+ }
+ }
+ nPathEntries = 0;
}
noDefaultPath = True;
return;
}
+/**
+ * Add the given path to the global includePath variable.
+ * If dir is NULL, the includePath is emptied.
+ */
Bool
XkbAddDirectoryToPath(const char *dir)
{
-int len;
- if ((dir==NULL)||(dir[0]=='\0')) {
- XkbClearIncludePath();
- return True;
+ int len;
+ if ((dir == NULL) || (dir[0] == '\0'))
+ {
+ XkbClearIncludePath();
+ return True;
}
#ifdef __UNIXOS2__
- dir = (char*)__XOS2RedirRoot(dir);
+ dir = (char *) __XOS2RedirRoot(dir);
#endif
- len= strlen(dir);
- if (len+2>=PATH_MAX) { /* allow for '/' and at least one character */
- ERROR2("Path entry (%s) too long (maxiumum length is %d)\n",
- dir,PATH_MAX-3);
- return False;
+ len = strlen(dir);
+ if (len + 2 >= PATH_MAX)
+ { /* allow for '/' and at least one character */
+ ERROR2("Path entry (%s) too long (maxiumum length is %d)\n",
+ dir, PATH_MAX - 3);
+ return False;
}
- if (len>longestPath)
- longestPath= len;
- if (nPathEntries>=szPath) {
- szPath+= PATH_CHUNK;
- includePath= (char **)realloc(includePath,szPath*sizeof(char *));
- if (includePath==NULL) {
- WSGO("Allocation failed (includePath)\n");
- return False;
- }
+ if (nPathEntries >= szPath)
+ {
+ szPath += PATH_CHUNK;
+ includePath = (char **) realloc(includePath, szPath * sizeof(char *));
+ if (includePath == NULL)
+ {
+ WSGO("Allocation failed (includePath)\n");
+ return False;
+ }
}
- includePath[nPathEntries]= (char *)calloc(strlen(dir)+1,sizeof(char));
- if (includePath[nPathEntries]==NULL) {
- WSGO1("Allocation failed (includePath[%d])\n",nPathEntries);
- return False;
+ includePath[nPathEntries] =
+ (char *) calloc(strlen(dir) + 1, sizeof(char));
+ if (includePath[nPathEntries] == NULL)
+ {
+ WSGO1("Allocation failed (includePath[%d])\n", nPathEntries);
+ return False;
}
- strcpy(includePath[nPathEntries++],dir);
+ strcpy(includePath[nPathEntries++], dir);
return True;
}
/***====================================================================***/
+/**
+ * Return the xkb directory based on the type.
+ * Do not free the memory returned by this function.
+ */
char *
XkbDirectoryForInclude(unsigned type)
{
-static char buf[32];
+ static char buf[32];
- switch (type) {
- case XkmSemanticsFile:
- strcpy(buf,"semantics");
- break;
- case XkmLayoutFile:
- strcpy(buf,"layout");
- break;
- case XkmKeymapFile:
- strcpy(buf,"keymap");
- break;
- case XkmKeyNamesIndex:
- strcpy(buf,"keycodes");
- break;
- case XkmTypesIndex:
- strcpy(buf,"types");
- break;
- case XkmSymbolsIndex:
- strcpy(buf,"symbols");
- break;
- case XkmCompatMapIndex:
- strcpy(buf,"compat");
- break;
- case XkmGeometryFile:
- case XkmGeometryIndex:
- strcpy(buf,"geometry");
- break;
- default:
- strcpy(buf,"");
- break;
+ switch (type)
+ {
+ case XkmSemanticsFile:
+ strcpy(buf, "semantics");
+ break;
+ case XkmLayoutFile:
+ strcpy(buf, "layout");
+ break;
+ case XkmKeymapFile:
+ strcpy(buf, "keymap");
+ break;
+ case XkmKeyNamesIndex:
+ strcpy(buf, "keycodes");
+ break;
+ case XkmTypesIndex:
+ strcpy(buf, "types");
+ break;
+ case XkmSymbolsIndex:
+ strcpy(buf, "symbols");
+ break;
+ case XkmCompatMapIndex:
+ strcpy(buf, "compat");
+ break;
+ case XkmGeometryFile:
+ case XkmGeometryIndex:
+ strcpy(buf, "geometry");
+ break;
+ default:
+ strcpy(buf, "");
+ break;
}
return buf;
}
/***====================================================================***/
-typedef struct _FileCacheEntry {
- char * name;
- unsigned type;
- char * path;
- void * data;
- struct _FileCacheEntry * next;
+typedef struct _FileCacheEntry
+{
+ char *name;
+ unsigned type;
+ char *path;
+ void *data;
+ struct _FileCacheEntry *next;
} FileCacheEntry;
-static FileCacheEntry *fileCache;
+static FileCacheEntry *fileCache;
+/**
+ * Add the file with the given name to the internal cache to avoid opening and
+ * parsing the file multiple times. If a cache entry for the same name + type
+ * is already present, the entry is overwritten and the data belonging to the
+ * previous entry is returned.
+ *
+ * @parameter name The name of the file (e.g. evdev).
+ * @parameter type Type of the file (XkbTypesIdx, ... or XkbSemanticsFile, ...)
+ * @parameter path The full path to the file.
+ * @parameter data Already parsed data.
+ *
+ * @return The data from the overwritten file or NULL.
+ */
void *
-XkbAddFileToCache(char *name,unsigned type,char *path,void *data)
+XkbAddFileToCache(char *name, unsigned type, char *path, void *data)
{
-FileCacheEntry *entry;
+ FileCacheEntry *entry;
- for (entry=fileCache;entry!=NULL;entry=entry->next) {
- if ((type==entry->type)&&(uStringEqual(name,entry->name))) {
- void *old= entry->data;
- WSGO2("Replacing file cache entry (%s/%d)\n",name,type);
- entry->path= path;
- entry->data= data;
- return old;
- }
+ for (entry = fileCache; entry != NULL; entry = entry->next)
+ {
+ if ((type == entry->type) && (uStringEqual(name, entry->name)))
+ {
+ void *old = entry->data;
+ WSGO2("Replacing file cache entry (%s/%d)\n", name, type);
+ entry->path = path;
+ entry->data = data;
+ return old;
+ }
}
- entry= uTypedAlloc(FileCacheEntry);
- if (entry!=NULL) {
- entry->name= name;
- entry->type= type;
- entry->path= path;
- entry->data= data;
- entry->next= fileCache;
- fileCache= entry;
+ entry = uTypedAlloc(FileCacheEntry);
+ if (entry != NULL)
+ {
+ entry->name = name;
+ entry->type = type;
+ entry->path = path;
+ entry->data = data;
+ entry->next = fileCache;
+ fileCache = entry;
}
return NULL;
}
+/**
+ * Search for the given name + type in the cache.
+ *
+ * @parameter name The name of the file (e.g. evdev).
+ * @parameter type Type of the file (XkbTypesIdx, ... or XkbSemanticsFile, ...)
+ * @parameter pathRtrn Set to the full path of the given entry.
+ *
+ * @return the data from the cache entry or NULL if no matching entry was found.
+ */
void *
-XkbFindFileInCache(char *name,unsigned type,char **pathRtrn)
+XkbFindFileInCache(char *name, unsigned type, char **pathRtrn)
{
-FileCacheEntry *entry;
+ FileCacheEntry *entry;
- for (entry=fileCache;entry!=NULL;entry=entry->next) {
- if ((type==entry->type)&&(uStringEqual(name,entry->name))) {
- *pathRtrn= entry->path;
- return entry->data;
- }
+ for (entry = fileCache; entry != NULL; entry = entry->next)
+ {
+ if ((type == entry->type) && (uStringEqual(name, entry->name)))
+ {
+ *pathRtrn = entry->path;
+ return entry->data;
+ }
}
return NULL;
}
/***====================================================================***/
+/**
+ * Search for the given file name in the include directories.
+ *
+ * @param type one of XkbTypesIndex, XkbCompatMapIndex, ..., or
+ * XkbSemanticsFile, XkmKeymapFile, ...
+ * @param pathReturn is set to the full path of the file if found.
+ *
+ * @return an FD to the file or NULL. If NULL is returned, the value of
+ * pathRtrn is undefined.
+ */
FILE *
-XkbFindFileInPath(char *name,unsigned type,char **pathRtrn)
+XkbFindFileInPath(char *name, unsigned type, char **pathRtrn)
{
-register int i;
-FILE *file= NULL;
-int nameLen,typeLen,pathLen;
-char buf[PATH_MAX],*typeDir;
+ register int i;
+ FILE *file = NULL;
+ int nameLen, typeLen, pathLen;
+ char buf[PATH_MAX], *typeDir;
- typeDir= XkbDirectoryForInclude(type);
- nameLen= strlen(name);
- typeLen= strlen(typeDir);
- for (i=0;i<nPathEntries;i++) {
- pathLen= strlen(includePath[i]);
- if (typeLen<1)
- continue;
+ typeDir = XkbDirectoryForInclude(type);
+ nameLen = strlen(name);
+ typeLen = strlen(typeDir);
+ for (i = 0; i < nPathEntries; i++)
+ {
+ pathLen = strlen(includePath[i]);
+ if (typeLen < 1)
+ continue;
- if ((nameLen+typeLen+pathLen+2)>=PATH_MAX) {
- ERROR3("File name (%s/%s/%s) too long\n",includePath[i],typeDir,
- name);
- ACTION("Ignored\n");
- continue;
- }
- sprintf(buf,"%s/%s/%s",includePath[i],typeDir,name);
- file= fopen(buf,"r");
- if (file!=NULL)
- break;
+ if ((nameLen + typeLen + pathLen + 2) >= PATH_MAX)
+ {
+ ERROR3("File name (%s/%s/%s) too long\n", includePath[i],
+ typeDir, name);
+ ACTION("Ignored\n");
+ continue;
+ }
+ snprintf(buf, sizeof(buf), "%s/%s/%s", includePath[i], typeDir, name);
+ file = fopen(buf, "r");
+ if (file != NULL)
+ break;
}
- if ((file!=NULL)&&(pathRtrn!=NULL)) {
- *pathRtrn= (char *)calloc(strlen(buf)+1,sizeof(char));
- if (*pathRtrn!=NULL)
- strcpy(*pathRtrn,buf);
+ if ((file != NULL) && (pathRtrn != NULL))
+ {
+ *pathRtrn = (char *) calloc(strlen(buf) + 1, sizeof(char));
+ if (*pathRtrn != NULL)
+ strcpy(*pathRtrn, buf);
}
return file;
}
-
diff --git a/app/xkbcomp/xkbpath.h b/app/xkbcomp/xkbpath.h
index 75c137d0c..66c3ab76b 100644
--- a/app/xkbcomp/xkbpath.h
+++ b/app/xkbcomp/xkbpath.h
@@ -1,4 +1,3 @@
-/* $XConsortium $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,56 +23,43 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/xkbpath.h,v 1.3 2002/07/01 02:26:01 tsi Exp $ */
#ifndef _XKBPATH_H_
#define _XKBPATH_H_ 1
-extern Bool XkbInitIncludePath(
- void
-);
+extern Bool XkbInitIncludePath(void);
-extern void XkbClearIncludePath(
- void
-);
+extern void XkbClearIncludePath(void);
-extern void XkbAddDefaultDirectoriesToPath(
- void
-);
+extern void XkbAddDefaultDirectoriesToPath(void);
-extern Bool XkbAddDirectoryToPath(
- const char * /* dir */
-);
+extern Bool XkbAddDirectoryToPath(const char * /* dir */
+ );
-extern char * XkbDirectoryForInclude(
- unsigned /* type */
-);
+extern char *XkbDirectoryForInclude(unsigned /* type */
+ );
-extern FILE *XkbFindFileInPath(
- char * /* name */,
- unsigned /* type */,
- char ** /* pathRtrn */
-);
+extern FILE *XkbFindFileInPath(char * /* name */ ,
+ unsigned /* type */ ,
+ char ** /* pathRtrn */
+ );
-extern void * XkbAddFileToCache(
- char * /* name */,
- unsigned /* type */,
- char * /* path */,
- void * /* data */
-);
+extern void *XkbAddFileToCache(char * /* name */ ,
+ unsigned /* type */ ,
+ char * /* path */ ,
+ void * /* data */
+ );
-extern void * XkbFindFileInCache(
- char * /* name */,
- unsigned /* type */,
- char ** /* pathRtrn */
-);
+extern void *XkbFindFileInCache(char * /* name */ ,
+ unsigned /* type */ ,
+ char ** /* pathRtrn */
+ );
-extern Bool XkbParseIncludeMap(
- char ** /* str_inout */,
- char ** /* file_rtrn */,
- char ** /* map_rtrn */,
- char * /* nextop_rtrn */,
- char ** /* extra_data */
-);
+extern Bool XkbParseIncludeMap(char ** /* str_inout */ ,
+ char ** /* file_rtrn */ ,
+ char ** /* map_rtrn */ ,
+ char * /* nextop_rtrn */ ,
+ char ** /* extra_data */
+ );
#endif /* _XKBPATH_H_ */
diff --git a/app/xkbcomp/xkbscan.c b/app/xkbcomp/xkbscan.c
index ef2227d79..03193e2d0 100644
--- a/app/xkbcomp/xkbscan.c
+++ b/app/xkbcomp/xkbscan.c
@@ -1,4 +1,3 @@
-/* $Xorg: xkbscan.c,v 1.3 2000/08/17 19:54:34 cpqbld Exp $ */
/************************************************************
Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
@@ -24,7 +23,6 @@
THE USE OR PERFORMANCE OF THIS SOFTWARE.
********************************************************/
-/* $XFree86: xc/programs/xkbcomp/xkbscan.c,v 3.10 2001/01/17 23:45:45 dawes Exp $ */
#include <stdio.h>
#include <ctype.h>
@@ -37,183 +35,355 @@
#include "utils.h"
#include "parseutils.h"
-FILE *yyin = NULL;
+unsigned int scanDebug;
-static char scanFileBuf[1024];
-char * scanFile= scanFileBuf;
-int lineNum= 0;
+FILE *yyin = NULL;
-int scanInt;
-char *scanIntStr;
-int scanIntClass;
+static char scanFileBuf[1024] = {0};
+char *scanFile = scanFileBuf;
+int lineNum = 0;
-char *scanStr = NULL;
-int scanStrLine= 0;
+int scanInt;
-#define BUFSIZE 512
-static int nInBuf = 0;
-static char buf[BUFSIZE];
+char scanBuf[1024];
+static int scanStrLine = 0;
-#ifdef DEBUG
+#define BUFSIZE 4096
+static char readBuf[BUFSIZE];
+static int readBufPos = 0;
+static int readBufLen = 0;
-extern unsigned debugFlags;
+#ifdef DEBUG
+extern int debugFlags;
static char *
tokText(int tok)
{
-static char buf[32];
-
- switch (tok) {
- case END_OF_FILE: sprintf(buf, "END_OF_FILE");break;
- case ERROR_TOK: sprintf(buf, "ERROR"); break;
-
- case XKB_KEYMAP: sprintf(buf, "XKB_KEYMAP"); break;
- case XKB_KEYCODES: sprintf(buf, "XKB_KEYCODES"); break;
- case XKB_TYPES: sprintf(buf, "XKB_TYPES"); break;
- case XKB_SYMBOLS: sprintf(buf, "XKB_SYMBOLS"); break;
- case XKB_COMPATMAP: sprintf(buf, "XKB_COMPATMAP"); break;
- case XKB_GEOMETRY: sprintf(buf, "XKB_GEOMETRY"); break;
- case XKB_SEMANTICS: sprintf(buf, "XKB_SEMANTICS"); break;
- case XKB_LAYOUT: sprintf(buf, "XKB_LAYOUT"); break;
-
- case INCLUDE: sprintf(buf, "INCLUDE"); break;
- case OVERRIDE: sprintf(buf, "OVERRIDE"); break;
- case AUGMENT: sprintf(buf, "AUGMENT"); break;
- case REPLACE: sprintf(buf, "REPLACE"); break;
- case ALTERNATE: sprintf(buf, "ALTERNATE"); break;
-
- case VIRTUAL_MODS: sprintf(buf, "VIRTUAL_MODS"); break;
- case TYPE: sprintf(buf, "TYPE"); break;
- case INTERPRET: sprintf(buf, "INTERPRET"); break;
- case ACTION_TOK: sprintf(buf, "ACTION"); break;
- case KEY: sprintf(buf, "KEY"); break;
- case ALIAS: sprintf(buf, "ALIAS"); break;
- case GROUP: sprintf(buf, "GROUP"); break;
- case MODIFIER_MAP: sprintf(buf, "MODIFIER_MAP"); break;
- case INDICATOR: sprintf(buf, "INDICATOR"); break;
- case SHAPE: sprintf(buf, "SHAPE"); break;
- case KEYS: sprintf(buf, "KEYS"); break;
- case ROW: sprintf(buf, "ROW"); break;
- case SECTION: sprintf(buf, "SECTION"); break;
- case OVERLAY: sprintf(buf, "OVERLAY"); break;
- case TEXT: sprintf(buf, "TEXT"); break;
- case OUTLINE: sprintf(buf, "OUTLINE"); break;
- case SOLID: sprintf(buf, "SOLID"); break;
- case LOGO: sprintf(buf, "LOGO"); break;
- case VIRTUAL: sprintf(buf, "VIRTUAL"); break;
-
- case EQUALS: sprintf(buf, "EQUALS"); break;
- case PLUS: sprintf(buf, "PLUS"); break;
- case MINUS: sprintf(buf, "MINUS"); break;
- case DIVIDE: sprintf(buf, "DIVIDE"); break;
- case TIMES: sprintf(buf, "TIMES"); break;
- case OBRACE: sprintf(buf, "OBRACE"); break;
- case CBRACE: sprintf(buf, "CBRACE"); break;
- case OPAREN: sprintf(buf, "OPAREN"); break;
- case CPAREN: sprintf(buf, "CPAREN"); break;
- case OBRACKET: sprintf(buf, "OBRACKET");break;
- case CBRACKET: sprintf(buf, "CBRACKET");break;
- case DOT: sprintf(buf, "DOT"); break;
- case COMMA: sprintf(buf, "COMMA"); break;
- case SEMI: sprintf(buf, "SEMI"); break;
- case EXCLAM: sprintf(buf, "EXCLAM"); break;
- case INVERT: sprintf(buf, "INVERT"); break;
-
- case STRING: sprintf(buf, "STRING (%s)",scanStr); break;
- case INTEGER: sprintf(buf, "INTEGER (0x%x)",scanInt); break;
- case FLOAT: sprintf(buf, "FLOAT (%d.%d)",
- scanInt/XkbGeomPtsPerMM,
- scanInt%XkbGeomPtsPerMM);break;
- case IDENT: sprintf(buf, "IDENT (%s)",scanStr); break;
- case KEYNAME: sprintf(buf, "KEYNAME (%s)",scanStr); break;
-
- case PARTIAL: sprintf(buf, "PARTIAL"); break;
- case DEFAULT: sprintf(buf, "DEFAULT"); break;
- case HIDDEN: sprintf(buf, "HIDDEN"); break;
-
- case ALPHANUMERIC_KEYS: sprintf(buf, "ALPHANUMERIC_KEYS"); break;
- case MODIFIER_KEYS: sprintf(buf, "MODIFIER_KEYS"); break;
- case KEYPAD_KEYS: sprintf(buf, "KEYPAD_KEYS"); break;
- case FUNCTION_KEYS: sprintf(buf, "FUNCTION_KEYS"); break;
- case ALTERNATE_GROUP: sprintf(buf, "ALTERNATE_GROUP"); break;
-
- default: sprintf(buf, "UNKNOWN"); break;
+ static char buf[32];
+
+ switch (tok)
+ {
+ case END_OF_FILE:
+ snprintf(buf, sizeof(buf), "END_OF_FILE");
+ break;
+ case ERROR_TOK:
+ snprintf(buf, sizeof(buf), "ERROR");
+ break;
+
+ case XKB_KEYMAP:
+ snprintf(buf, sizeof(buf), "XKB_KEYMAP");
+ break;
+ case XKB_KEYCODES:
+ snprintf(buf, sizeof(buf), "XKB_KEYCODES");
+ break;
+ case XKB_TYPES:
+ snprintf(buf, sizeof(buf), "XKB_TYPES");
+ break;
+ case XKB_SYMBOLS:
+ snprintf(buf, sizeof(buf), "XKB_SYMBOLS");
+ break;
+ case XKB_COMPATMAP:
+ snprintf(buf, sizeof(buf), "XKB_COMPATMAP");
+ break;
+ case XKB_GEOMETRY:
+ snprintf(buf, sizeof(buf), "XKB_GEOMETRY");
+ break;
+ case XKB_SEMANTICS:
+ snprintf(buf, sizeof(buf), "XKB_SEMANTICS");
+ break;
+ case XKB_LAYOUT:
+ snprintf(buf, sizeof(buf), "XKB_LAYOUT");
+ break;
+
+ case INCLUDE:
+ snprintf(buf, sizeof(buf), "INCLUDE");
+ break;
+ case OVERRIDE:
+ snprintf(buf, sizeof(buf), "OVERRIDE");
+ break;
+ case AUGMENT:
+ snprintf(buf, sizeof(buf), "AUGMENT");
+ break;
+ case REPLACE:
+ snprintf(buf, sizeof(buf), "REPLACE");
+ break;
+ case ALTERNATE:
+ snprintf(buf, sizeof(buf), "ALTERNATE");
+ break;
+
+ case VIRTUAL_MODS:
+ snprintf(buf, sizeof(buf), "VIRTUAL_MODS");
+ break;
+ case TYPE:
+ snprintf(buf, sizeof(buf), "TYPE");
+ break;
+ case INTERPRET:
+ snprintf(buf, sizeof(buf), "INTERPRET");
+ break;
+ case ACTION_TOK:
+ snprintf(buf, sizeof(buf), "ACTION");
+ break;
+ case KEY:
+ snprintf(buf, sizeof(buf), "KEY");
+ break;
+ case ALIAS:
+ snprintf(buf, sizeof(buf), "ALIAS");
+ break;
+ case GROUP:
+ snprintf(buf, sizeof(buf), "GROUP");
+ break;
+ case MODIFIER_MAP:
+ snprintf(buf, sizeof(buf), "MODIFIER_MAP");
+ break;
+ case INDICATOR:
+ snprintf(buf, sizeof(buf), "INDICATOR");
+ break;
+ case SHAPE:
+ snprintf(buf, sizeof(buf), "SHAPE");
+ break;
+ case KEYS:
+ snprintf(buf, sizeof(buf), "KEYS");
+ break;
+ case ROW:
+ snprintf(buf, sizeof(buf), "ROW");
+ break;
+ case SECTION:
+ snprintf(buf, sizeof(buf), "SECTION");
+ break;
+ case OVERLAY:
+ snprintf(buf, sizeof(buf), "OVERLAY");
+ break;
+ case TEXT:
+ snprintf(buf, sizeof(buf), "TEXT");
+ break;
+ case OUTLINE:
+ snprintf(buf, sizeof(buf), "OUTLINE");
+ break;
+ case SOLID:
+ snprintf(buf, sizeof(buf), "SOLID");
+ break;
+ case LOGO:
+ snprintf(buf, sizeof(buf), "LOGO");
+ break;
+ case VIRTUAL:
+ snprintf(buf, sizeof(buf), "VIRTUAL");
+ break;
+
+ case EQUALS:
+ snprintf(buf, sizeof(buf), "EQUALS");
+ break;
+ case PLUS:
+ snprintf(buf, sizeof(buf), "PLUS");
+ break;
+ case MINUS:
+ snprintf(buf, sizeof(buf), "MINUS");
+ break;
+ case DIVIDE:
+ snprintf(buf, sizeof(buf), "DIVIDE");
+ break;
+ case TIMES:
+ snprintf(buf, sizeof(buf), "TIMES");
+ break;
+ case OBRACE:
+ snprintf(buf, sizeof(buf), "OBRACE");
+ break;
+ case CBRACE:
+ snprintf(buf, sizeof(buf), "CBRACE");
+ break;
+ case OPAREN:
+ snprintf(buf, sizeof(buf), "OPAREN");
+ break;
+ case CPAREN:
+ snprintf(buf, sizeof(buf), "CPAREN");
+ break;
+ case OBRACKET:
+ snprintf(buf, sizeof(buf), "OBRACKET");
+ break;
+ case CBRACKET:
+ snprintf(buf, sizeof(buf), "CBRACKET");
+ break;
+ case DOT:
+ snprintf(buf, sizeof(buf), "DOT");
+ break;
+ case COMMA:
+ snprintf(buf, sizeof(buf), "COMMA");
+ break;
+ case SEMI:
+ snprintf(buf, sizeof(buf), "SEMI");
+ break;
+ case EXCLAM:
+ snprintf(buf, sizeof(buf), "EXCLAM");
+ break;
+ case INVERT:
+ snprintf(buf, sizeof(buf), "INVERT");
+ break;
+
+ case STRING:
+ snprintf(buf, sizeof(buf), "STRING (%s)", scanBuf);
+ break;
+ case INTEGER:
+ snprintf(buf, sizeof(buf), "INTEGER (0x%x)", scanInt);
+ break;
+ case FLOAT:
+ snprintf(buf, sizeof(buf), "FLOAT (%d.%d)",
+ scanInt / XkbGeomPtsPerMM, scanInt % XkbGeomPtsPerMM);
+ break;
+ case IDENT:
+ snprintf(buf, sizeof(buf), "IDENT (%s)", scanBuf);
+ break;
+ case KEYNAME:
+ snprintf(buf, sizeof(buf), "KEYNAME (%s)", scanBuf);
+ break;
+
+ case PARTIAL:
+ snprintf(buf, sizeof(buf), "PARTIAL");
+ break;
+ case DEFAULT:
+ snprintf(buf, sizeof(buf), "DEFAULT");
+ break;
+ case HIDDEN:
+ snprintf(buf, sizeof(buf), "HIDDEN");
+ break;
+
+ case ALPHANUMERIC_KEYS:
+ snprintf(buf, sizeof(buf), "ALPHANUMERIC_KEYS");
+ break;
+ case MODIFIER_KEYS:
+ snprintf(buf, sizeof(buf), "MODIFIER_KEYS");
+ break;
+ case KEYPAD_KEYS:
+ snprintf(buf, sizeof(buf), "KEYPAD_KEYS");
+ break;
+ case FUNCTION_KEYS:
+ snprintf(buf, sizeof(buf), "FUNCTION_KEYS");
+ break;
+ case ALTERNATE_GROUP:
+ snprintf(buf, sizeof(buf), "ALTERNATE_GROUP");
+ break;
+
+ default:
+ snprintf(buf, sizeof(buf), "UNKNOWN");
+ break;
}
return buf;
}
#endif
+static int
+scanchar(void)
+{
+ if (readBufPos >= readBufLen) {
+ readBufLen = fread(readBuf, 1, BUFSIZE, yyin);
+ readBufPos = 0;
+ if (!readBufLen)
+ return EOF;
+ if (feof(yyin))
+ readBuf[readBufLen] = EOF;
+ }
+
+ return readBuf[readBufPos++];
+}
+
+static void
+unscanchar(int c)
+{
+ if (readBuf[--readBufPos] != c) {
+ fprintf(stderr, "UNGETCHAR FAILED! Put back %c, was expecting %c at "
+ "position %d, buf is '%s'\n", c, readBuf[readBufPos],
+ readBufPos, readBuf);
+ _exit(94);
+ }
+}
+
int
-setScanState(char *file,int line)
+setScanState(char *file, int line)
{
- if (file!=NULL)
- strncpy(scanFile,file,1024);
- if (line>=0)
- lineNum= line;
+ if (file != NULL)
+ strncpy(scanFile, file, 1024);
+ if (line >= 0)
+ lineNum = line;
return 1;
}
static int
yyGetString(void)
{
-int ch;
-
- nInBuf = 0;
- while ( ((ch=getc(yyin))!=EOF) && (ch!='"') ) {
- if ( ch == '\\' ) {
- if ((ch = getc(yyin))!=EOF) {
- if ( ch=='n' ) ch = '\n';
- else if ( ch == 't' ) ch = '\t';
- else if ( ch == 'v' ) ch = '\v';
- else if ( ch == 'b' ) ch = '\b';
- else if ( ch == 'r' ) ch = '\r';
- else if ( ch == 'f' ) ch = '\f';
- else if ( ch == 'e' ) ch = '\033';
- else if ( ch == '0' ) {
- int tmp,stop;
- ch = stop = 0;
- if (((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- if (!stop) {
- if (((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- }
- if (!stop) {
- if (((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- }
- }
- }
- else return ERROR_TOK;
- }
- if ( nInBuf < BUFSIZE-1 )
- buf[nInBuf++] = ch;
+ int ch, i;
+
+ i = 0;
+ while (((ch = scanchar()) != EOF) && (ch != '"'))
+ {
+ if (ch == '\\')
+ {
+ if ((ch = scanchar()) != EOF)
+ {
+ if (ch == 'n')
+ ch = '\n';
+ else if (ch == 't')
+ ch = '\t';
+ else if (ch == 'v')
+ ch = '\v';
+ else if (ch == 'b')
+ ch = '\b';
+ else if (ch == 'r')
+ ch = '\r';
+ else if (ch == 'f')
+ ch = '\f';
+ else if (ch == 'e')
+ ch = '\033';
+ else if (ch == '0')
+ {
+ int tmp, stop;
+ ch = stop = 0;
+ if (((tmp = scanchar()) != EOF) && (isdigit(tmp))
+ && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ if (!stop)
+ {
+ if (((tmp = scanchar()) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ }
+ if (!stop)
+ {
+ if (((tmp = scanchar()) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ }
+ }
+ }
+ else
+ return ERROR_TOK;
+ }
+ if (i < sizeof(scanBuf) - 1)
+ scanBuf[i++] = ch;
}
- if ( ch == '"' ) {
- buf[nInBuf++] = '\0';
- if ( scanStr )
- uFree( scanStr );
- scanStr = (char *)uStringDup(buf);
- scanStrLine = lineNum;
- return STRING;
+ if (ch == '"')
+ {
+ scanBuf[i++] = '\0';
+ scanStrLine = lineNum;
+ return STRING;
}
return ERROR_TOK;
}
@@ -221,149 +391,214 @@ int ch;
static int
yyGetKeyName(void)
{
-int ch;
-
- nInBuf = 0;
- while ( ((ch=getc(yyin))!=EOF) && (ch!='>') ) {
- if ( ch == '\\' ) {
- if ((ch = getc(yyin))!=EOF) {
- if ( ch=='n' ) ch = '\n';
- else if ( ch == 't' ) ch = '\t';
- else if ( ch == 'v' ) ch = '\v';
- else if ( ch == 'b' ) ch = '\b';
- else if ( ch == 'r' ) ch = '\r';
- else if ( ch == 'f' ) ch = '\f';
- else if ( ch == 'e' ) ch = '\033';
- else if ( ch == '0' ) {
- int tmp,stop;
- ch = stop = 0;
- if (((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- if ((!stop) && ((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- if ((!stop) && ((tmp=getc(yyin))!=EOF) && (isdigit(tmp)) &&
- (tmp!='8') && (tmp!='9')) {
- ch= (ch*8)+(tmp-'0');
- }
- else {
- stop= 1;
- ungetc(tmp,yyin);
- }
- }
- }
- else return ERROR_TOK;
- }
-
- if ( nInBuf < BUFSIZE-1 )
- buf[nInBuf++] = ch;
+ int ch, i;
+
+ i = 0;
+ while (((ch = scanchar()) != EOF) && (ch != '>'))
+ {
+ if (ch == '\\')
+ {
+ if ((ch = scanchar()) != EOF)
+ {
+ if (ch == 'n')
+ ch = '\n';
+ else if (ch == 't')
+ ch = '\t';
+ else if (ch == 'v')
+ ch = '\v';
+ else if (ch == 'b')
+ ch = '\b';
+ else if (ch == 'r')
+ ch = '\r';
+ else if (ch == 'f')
+ ch = '\f';
+ else if (ch == 'e')
+ ch = '\033';
+ else if (ch == '0')
+ {
+ int tmp, stop;
+ ch = stop = 0;
+ if (((tmp = scanchar()) != EOF) && (isdigit(tmp))
+ && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ if ((!stop) && ((tmp = scanchar()) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ if ((!stop) && ((tmp = scanchar()) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ }
+ }
+ else
+ return ERROR_TOK;
+ }
+
+ if (i < sizeof(scanBuf) - 1)
+ scanBuf[i++] = ch;
}
- if (( ch == '>' )&&(nInBuf<5)) {
- buf[nInBuf++] = '\0';
- if ( scanStr )
- uFree( scanStr );
- scanStr = (char *)uStringDup(buf);
- scanStrLine = lineNum;
- return KEYNAME;
+ if ((ch == '>') && (i < 5))
+ {
+ scanBuf[i++] = '\0';
+ scanStrLine = lineNum;
+ return KEYNAME;
}
return ERROR_TOK;
}
-struct _Keyword {
- const char *keyword;
- int token;
-} keywords[] = {
- { "xkb_keymap", XKB_KEYMAP },
- { "xkb_keycodes", XKB_KEYCODES },
- { "xkb_types", XKB_TYPES },
- { "xkb_symbols", XKB_SYMBOLS },
- { "xkb_compat", XKB_COMPATMAP },
- { "xkb_compat_map", XKB_COMPATMAP },
- { "xkb_compatibility", XKB_COMPATMAP },
- { "xkb_compatibility_map", XKB_COMPATMAP },
- { "xkb_geometry", XKB_GEOMETRY },
- { "xkb_semantics", XKB_SEMANTICS },
- { "xkb_layout", XKB_LAYOUT },
- { "include", INCLUDE },
- { "override", OVERRIDE },
- { "augment", AUGMENT },
- { "replace", REPLACE },
- { "alternate", ALTERNATE },
- { "partial", PARTIAL },
- { "default", DEFAULT },
- { "hidden", HIDDEN },
- { "virtual_modifiers", VIRTUAL_MODS },
- { "type", TYPE },
- { "interpret", INTERPRET },
- { "action", ACTION_TOK },
- { "key", KEY },
- { "alias", ALIAS },
- { "group", GROUP },
- { "modmap", MODIFIER_MAP },
- { "mod_map", MODIFIER_MAP },
- { "modifier_map", MODIFIER_MAP },
- { "indicator", INDICATOR },
- { "shape", SHAPE },
- { "row", ROW },
- { "keys", KEYS },
- { "section", SECTION },
- { "overlay", OVERLAY },
- { "text", TEXT },
- { "outline", OUTLINE },
- { "solid", SOLID },
- { "logo", LOGO },
- { "virtual", VIRTUAL },
- { "alphanumeric_keys", ALPHANUMERIC_KEYS },
- { "modifier_keys", MODIFIER_KEYS },
- { "keypad_keys", KEYPAD_KEYS },
- { "function_keys", FUNCTION_KEYS },
- { "alternate_group", ALTERNATE_GROUP }
+static struct _Keyword
+{
+ const char *keyword;
+ int token;
+} keywords[] =
+{
+ {
+ "xkb_keymap", XKB_KEYMAP},
+ {
+ "xkb_keycodes", XKB_KEYCODES},
+ {
+ "xkb_types", XKB_TYPES},
+ {
+ "xkb_symbols", XKB_SYMBOLS},
+ {
+ "xkb_compat", XKB_COMPATMAP},
+ {
+ "xkb_compat_map", XKB_COMPATMAP},
+ {
+ "xkb_compatibility", XKB_COMPATMAP},
+ {
+ "xkb_compatibility_map", XKB_COMPATMAP},
+ {
+ "xkb_geometry", XKB_GEOMETRY},
+ {
+ "xkb_semantics", XKB_SEMANTICS},
+ {
+ "xkb_layout", XKB_LAYOUT},
+ {
+ "include", INCLUDE},
+ {
+ "override", OVERRIDE},
+ {
+ "augment", AUGMENT},
+ {
+ "replace", REPLACE},
+ {
+ "alternate", ALTERNATE},
+ {
+ "partial", PARTIAL},
+ {
+ "default", DEFAULT},
+ {
+ "hidden", HIDDEN},
+ {
+ "virtual_modifiers", VIRTUAL_MODS},
+ {
+ "type", TYPE},
+ {
+ "interpret", INTERPRET},
+ {
+ "action", ACTION_TOK},
+ {
+ "key", KEY},
+ {
+ "alias", ALIAS},
+ {
+ "group", GROUP},
+ {
+ "modmap", MODIFIER_MAP},
+ {
+ "mod_map", MODIFIER_MAP},
+ {
+ "modifier_map", MODIFIER_MAP},
+ {
+ "indicator", INDICATOR},
+ {
+ "shape", SHAPE},
+ {
+ "row", ROW},
+ {
+ "keys", KEYS},
+ {
+ "section", SECTION},
+ {
+ "overlay", OVERLAY},
+ {
+ "text", TEXT},
+ {
+ "outline", OUTLINE},
+ {
+ "solid", SOLID},
+ {
+ "logo", LOGO},
+ {
+ "virtual", VIRTUAL},
+ {
+ "alphanumeric_keys", ALPHANUMERIC_KEYS},
+ {
+ "modifier_keys", MODIFIER_KEYS},
+ {
+ "keypad_keys", KEYPAD_KEYS},
+ {
+ "function_keys", FUNCTION_KEYS},
+ {
+ "alternate_group", ALTERNATE_GROUP}
};
-int numKeywords = sizeof(keywords)/sizeof(struct _Keyword);
+static int numKeywords = sizeof(keywords) / sizeof(struct _Keyword);
static int
yyGetIdent(int first)
{
-int ch,i,found;
-int rtrn = IDENT;
-
- buf[0] = first; nInBuf = 1;
- while ( ((ch=getc(yyin))!=EOF) && (isalnum(ch)||(ch=='_')) ) {
- if ( nInBuf < BUFSIZE - 1 )
- buf[nInBuf++] = ch;
+ int ch, i, j, found;
+ int rtrn = IDENT;
+
+ scanBuf[0] = first;
+ j = 1;
+ while (((ch = scanchar()) != EOF) && (isalnum(ch) || (ch == '_')))
+ {
+ if (j < sizeof(scanBuf) - 1)
+ scanBuf[j++] = ch;
}
- buf[nInBuf++] = '\0';
- found= 0;
-
- for (i=0;(!found)&&(i<numKeywords);i++) {
- if (uStrCaseCmp(buf,keywords[i].keyword)==0) {
- rtrn= keywords[i].token;
- found= 1;
- }
+ scanBuf[j++] = '\0';
+ found = 0;
+
+ for (i = 0; (!found) && (i < numKeywords); i++)
+ {
+ if (uStrCaseCmp(scanBuf, keywords[i].keyword) == 0)
+ {
+ rtrn = keywords[i].token;
+ found = 1;
+ }
}
- if (!found) {
- if ( scanStr )
- uFree( scanStr );
- scanStr = (char *)uStringDup(buf);
- scanStrLine = lineNum;
- rtrn = IDENT;
+ if (!found)
+ {
+ scanStrLine = lineNum;
+ rtrn = IDENT;
}
- if ( (ch!=EOF) && (!isspace(ch)) )
- ungetc( ch, yyin );
- else if ( ch=='\n' )
- lineNum++;
+ if ((ch != EOF) && (!isspace(ch)))
+ unscanchar(ch);
+ else if (ch == '\n')
+ lineNum++;
return rtrn;
}
@@ -371,98 +606,140 @@ int rtrn = IDENT;
static int
yyGetNumber(int ch)
{
-int isFloat= 0;
-
- buf[0]= ch;
- nInBuf= 1;
- while (((ch=getc(yyin))!=EOF)&&(isxdigit(ch)||((nInBuf==1)&&(ch=='x')))) {
- buf[nInBuf++]= ch;
+ int isFloat = 0;
+ char buf[1024];
+ int nInBuf = 0;
+
+ buf[0] = ch;
+ nInBuf = 1;
+ while (((ch = scanchar()) != EOF)
+ && (isxdigit(ch) || ((nInBuf == 1) && (ch == 'x'))))
+ {
+ buf[nInBuf++] = ch;
}
- if (ch=='.') {
- isFloat= 1;
- buf[nInBuf++]= ch;
- while (((ch=getc(yyin))!=EOF)&&(isxdigit(ch))) {
- buf[nInBuf++]= ch;
- }
+ if (ch == '.')
+ {
+ isFloat = 1;
+ buf[nInBuf++] = ch;
+ while (((ch = scanchar()) != EOF) && (isxdigit(ch)))
+ {
+ buf[nInBuf++] = ch;
+ }
}
- buf[nInBuf++]= '\0';
- if ((ch!=EOF)&&(!isspace(ch)))
- ungetc( ch, yyin );
-
- if (isFloat) {
- float tmp;
- if (sscanf(buf,"%g",&tmp)==1) {
- scanInt= tmp*XkbGeomPtsPerMM;
- return FLOAT;
- }
+ buf[nInBuf++] = '\0';
+ if ((ch != EOF) && (!isspace(ch)))
+ unscanchar(ch);
+
+ if (isFloat)
+ {
+ float tmp;
+ if (sscanf(buf, "%g", &tmp) == 1)
+ {
+ scanInt = tmp * XkbGeomPtsPerMM;
+ return FLOAT;
+ }
}
- else if ( sscanf(buf,"%i",&scanInt)==1 )
- return INTEGER;
- fprintf(stderr,"Malformed number %s\n",buf);
+ else if (sscanf(buf, "%i", &scanInt) == 1)
+ return INTEGER;
+ fprintf(stderr, "Malformed number %s\n", buf);
return ERROR_TOK;
}
int
yylex(void)
{
-int ch;
-int rtrn;
-
- do {
- ch = getc(yyin);
- if ( ch == '\n' ) {
- lineNum++;
- }
- else if ( ch=='#' ) { /* handle shell style '#' comments */
- do {
- ch= getc(yyin);
- } while ((ch!='\n')&&(ch!=EOF));
- lineNum++;
- }
- else if ( ch=='/' ) { /* handle C++ style double-/ comments */
- int newch= getc(yyin);
- if (newch=='/') {
- do {
- ch= getc(yyin);
- } while ((ch!='\n')&&(ch!=EOF));
- lineNum++;
- }
- else if (newch!=EOF) {
- ungetc(newch,yyin);
- }
- }
- } while ((ch!=EOF)&&(isspace(ch)));
- if ( ch == '=' ) rtrn = EQUALS;
- else if ( ch == '+' ) rtrn = PLUS;
- else if ( ch == '-' ) rtrn = MINUS;
- else if ( ch == '/' ) rtrn = DIVIDE;
- else if ( ch == '*' ) rtrn = TIMES;
- else if ( ch == '{' ) rtrn = OBRACE;
- else if ( ch == '}' ) rtrn = CBRACE;
- else if ( ch == '(' ) rtrn = OPAREN;
- else if ( ch == ')' ) rtrn = CPAREN;
- else if ( ch == '[' ) rtrn = OBRACKET;
- else if ( ch == ']' ) rtrn = CBRACKET;
- else if ( ch == '.' ) rtrn = DOT;
- else if ( ch == ',' ) rtrn = COMMA;
- else if ( ch == ';' ) rtrn = SEMI;
- else if ( ch == '!' ) rtrn = EXCLAM;
- else if ( ch == '~' ) rtrn = INVERT;
- else if ( ch == '"' ) rtrn = yyGetString();
- else if ( ch == '<' ) rtrn = yyGetKeyName();
- else if ( isalpha(ch) || (ch=='_')) rtrn = yyGetIdent(ch);
- else if ( isdigit(ch) ) rtrn = yyGetNumber(ch);
- else if ( ch == EOF ) rtrn = END_OF_FILE;
- else {
+ int ch;
+ int rtrn;
+
+ do
+ {
+ ch = scanchar();
+ if (ch == '\n')
+ {
+ lineNum++;
+ }
+ else if (ch == '#')
+ { /* handle shell style '#' comments */
+ do
+ {
+ ch = scanchar();
+ }
+ while ((ch != '\n') && (ch != EOF));
+ lineNum++;
+ }
+ else if (ch == '/')
+ { /* handle C++ style double-/ comments */
+ int newch = scanchar();
+ if (newch == '/')
+ {
+ do
+ {
+ ch = scanchar();
+ }
+ while ((ch != '\n') && (ch != EOF));
+ lineNum++;
+ }
+ else if (newch != EOF)
+ {
+ unscanchar(newch);
+ }
+ }
+ }
+ while ((ch != EOF) && (isspace(ch)));
+ if (ch == '=')
+ rtrn = EQUALS;
+ else if (ch == '+')
+ rtrn = PLUS;
+ else if (ch == '-')
+ rtrn = MINUS;
+ else if (ch == '/')
+ rtrn = DIVIDE;
+ else if (ch == '*')
+ rtrn = TIMES;
+ else if (ch == '{')
+ rtrn = OBRACE;
+ else if (ch == '}')
+ rtrn = CBRACE;
+ else if (ch == '(')
+ rtrn = OPAREN;
+ else if (ch == ')')
+ rtrn = CPAREN;
+ else if (ch == '[')
+ rtrn = OBRACKET;
+ else if (ch == ']')
+ rtrn = CBRACKET;
+ else if (ch == '.')
+ rtrn = DOT;
+ else if (ch == ',')
+ rtrn = COMMA;
+ else if (ch == ';')
+ rtrn = SEMI;
+ else if (ch == '!')
+ rtrn = EXCLAM;
+ else if (ch == '~')
+ rtrn = INVERT;
+ else if (ch == '"')
+ rtrn = yyGetString();
+ else if (ch == '<')
+ rtrn = yyGetKeyName();
+ else if (isalpha(ch) || (ch == '_'))
+ rtrn = yyGetIdent(ch);
+ else if (isdigit(ch))
+ rtrn = yyGetNumber(ch);
+ else if (ch == EOF)
+ rtrn = END_OF_FILE;
+ else
+ {
#ifdef DEBUG
- if (debugFlags)
- fprintf(stderr,"Unexpected character %c (%d) in input stream\n",ch,ch);
+ if (debugFlags)
+ fprintf(stderr,
+ "Unexpected character %c (%d) in input stream\n", ch, ch);
#endif
- rtrn = ERROR_TOK;
+ rtrn = ERROR_TOK;
}
#ifdef DEBUG
- if (debugFlags&0x2)
- fprintf(stderr,"scan: %s\n",tokText(rtrn));
+ if (debugFlags & 0x2)
+ fprintf(stderr, "scan: %s\n", tokText(rtrn));
#endif
return rtrn;
}